/* slant ionospheric delay ---------------------------------------------------*/ static int corr_ion(gtime_t time, const nav_t *nav, int sat, const double *pos, const double *azel, int ionoopt, double *ion, double *var, int *brk) { #ifdef EXTSTEC double rate; #endif /* sbas ionosphere model */ if (ionoopt==IONOOPT_SBAS) { return sbsioncorr(time,nav,pos,azel,ion,var); } /* ionex tec model */ if (ionoopt==IONOOPT_TEC) { return iontec(time,nav,pos,azel,1,ion,var); } #ifdef EXTSTEC /* slant tec model */ if (ionoopt==IONOOPT_STEC) { return stec_ion(time,nav,sat,pos,azel,ion,&rate,var,brk); } #endif /* broadcast model */ *ion=ionmodel(time,nav->ion_gps,pos,azel); *var=SQR(*ion*ERR_BRDCI); return 1; }
/* ionospheric correction ------------------------------------------------------ * compute ionospheric correction * args : gtime_t time I time * nav_t *nav I navigation data * int sat I satellite number * double *pos I receiver position {lat,lon,h} (rad|m) * double *azel I azimuth/elevation angle {az,el} (rad) * int ionoopt I ionospheric correction option (IONOOPT_???) * double *ion O ionospheric delay (L1) (m) * double *var O ionospheric delay (L1) variance (m^2) * return : status(1:ok,0:error) *-----------------------------------------------------------------------------*/ extern int ionocorr(gtime_t time, const nav_t *nav, int sat, const double *pos, const double *azel, int ionoopt, double *ion, double *var) { trace(4,"ionocorr: time=%s opt=%d sat=%2d pos=%.3f %.3f azel=%.3f %.3f\n", time_str(time,3),ionoopt,sat,pos[0]*R2D,pos[1]*R2D,azel[0]*R2D, azel[1]*R2D); /* broadcast model */ if (ionoopt==IONOOPT_BRDC) { *ion=ionmodel(time,nav->ion_gps,pos,azel); *var=SQR(*ion*ERR_BRDCI); return 1; } /* sbas ionosphere model */ if (ionoopt==IONOOPT_SBAS) { return sbsioncorr(time,nav,pos,azel,ion,var); } /* ionex tec model */ if (ionoopt==IONOOPT_TEC) { return iontec(time,nav,pos,azel,1,ion,var); } /* qzss broadcast model */ if (ionoopt==IONOOPT_QZS&&norm(nav->ion_qzs,8)>0.0) { *ion=ionmodel(time,nav->ion_qzs,pos,azel); *var=SQR(*ion*ERR_BRDCI); return 1; } /* lex ionosphere model */ if (ionoopt==IONOOPT_LEX) { return lexioncorr(time,nav,pos,azel,ion,var); } *ion=0.0; *var=ionoopt==IONOOPT_OFF?SQR(ERR_ION):0.0; return 1; }