From 2e1ddfaefe78492922402b8f6b0e7568f02324d8 Mon Sep 17 00:00:00 2001 From: AndreHauschild Date: Fri, 20 Feb 2026 17:09:29 +0100 Subject: [PATCH 1/2] Remove dependency on BRDC data when precise products are used --- src/ephemeris.c | 13 ++++++++++++- src/postpos.c | 2 +- src/preceph.c | 2 +- src/rtklib.h | 2 ++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/ephemeris.c b/src/ephemeris.c index be4d0d9dd..69849692d 100644 --- a/src/ephemeris.c +++ b/src/ephemeris.c @@ -807,11 +807,19 @@ extern void satposs(gtime_t teph, const obsd_t *obs, int n, const nav_t *nav, /* transmission time by satellite clock */ time[i]=timeadd(obs[i].time,-pr/CLIGHT); - /* satellite clock bias by broadcast ephemeris */ + /* satellite clock offset from precise products or broadcast ephemeris */ + if (ephopt==EPHOPT_PREC&&nav->nc>0) { + if(!pephclk(time[i],obs[i].sat,nav,&dt,NULL)) { + trace(3,"no precise clock %s sat=%2d\n",time2str(time[i],tstr,3),obs[i].sat); + continue; + } + } + else { if (!ephclk(time[i],teph,obs[i].sat,nav,&dt)) { trace(3,"no broadcast clock %s sat=%2d\n",time2str(time[i],tstr,3),obs[i].sat); continue; } + } time[i]=timeadd(time[i],-dt); /* satellite position and clock at transmission time */ @@ -821,10 +829,13 @@ extern void satposs(gtime_t teph, const obsd_t *obs, int n, const nav_t *nav, continue; } /* if no precise clock available, use broadcast clock instead */ + /* NOTE: broadcast clock from ephclk() does NOT include relativistic + * correction for GPS, GAL and BDS! */ if (dts[i*2]==0.0) { if (!ephclk(time[i],teph,obs[i].sat,nav,dts+i*2)) continue; dts[1+i*2]=0.0; *var=SQR(STD_BRDCCLK); + trace(3,"no precise clock, use broadcast %s sat=%2d\n",time2str(time[i],tstr,3),obs[i].sat); } trace(4,"satposs: %d,time=%.9f dt=%.9f pr=%.3f rs=%13.3f %13.3f %13.3f dts=%12.3f var=%7.3f\n", obs[i].sat,time[i].sec,dt,pr,rs[i*6],rs[1+i*6],rs[2+i*6],dts[i*2]*1E9, diff --git a/src/postpos.c b/src/postpos.c index e71780228..5ca2198c6 100644 --- a/src/postpos.c +++ b/src/postpos.c @@ -773,7 +773,7 @@ static int readobsnav(gtime_t ts, gtime_t te, double ti, const char **infile, trace(1,"\n"); return 0; } - if (nav->n<=0&&nav->ng<=0&&nav->ns<=0) { + if (nav->n<=0&&nav->ng<=0&&nav->ns<=0&&prcopt->sateph!=EPHOPT_PREC) { checkbrk("error : no nav data"); trace(1,"\n"); return 0; diff --git a/src/preceph.c b/src/preceph.c index 207983c91..e0cb117cc 100644 --- a/src/preceph.c +++ b/src/preceph.c @@ -640,7 +640,7 @@ static int pephpos(gtime_t time, int sat, const nav_t *nav, double *rs, return 1; } /* satellite clock by precise clock ------------------------------------------*/ -static int pephclk(gtime_t time, int sat, const nav_t *nav, double *dts, +extern int pephclk(gtime_t time, int sat, const nav_t *nav, double *dts, double *varc) { double t[2],c[2],std; diff --git a/src/rtklib.h b/src/rtklib.h index b77e4038b..c6e42e690 100644 --- a/src/rtklib.h +++ b/src/rtklib.h @@ -1628,6 +1628,8 @@ EXPORT int open_rnxctr (rnxctr_t *rnx, FILE *fp); EXPORT int input_rnxctr(rnxctr_t *rnx, FILE *fp); /* ephemeris and clock functions ---------------------------------------------*/ +EXPORT int pephclk(gtime_t time, int sat, const nav_t *nav, double *dts, + double *varc); EXPORT double eph2clk (gtime_t time, const eph_t *eph); EXPORT double geph2clk(gtime_t time, const geph_t *geph); EXPORT double seph2clk(gtime_t time, const seph_t *seph); From 9f08ea45422289ae46f768475559e3bcd607cf17 Mon Sep 17 00:00:00 2001 From: AndreHauschild Date: Tue, 24 Feb 2026 14:52:17 +0100 Subject: [PATCH 2/2] Simplify broadcast clock check in ephemeris.c --- src/ephemeris.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/ephemeris.c b/src/ephemeris.c index ba300b4aa..56c8e6ea4 100644 --- a/src/ephemeris.c +++ b/src/ephemeris.c @@ -814,11 +814,9 @@ extern void satposs(gtime_t teph, const obsd_t *obs, int n, const nav_t *nav, continue; } } - else { - if (!ephclk(time[i],teph,obs[i].sat,nav,&dt)) { - trace(3,"no broadcast clock %s sat=%2d\n",time2str(time[i],tstr,3),obs[i].sat); - continue; - } + else if (!ephclk(time[i],teph,obs[i].sat,nav,&dt)) { + trace(3,"no broadcast clock %s sat=%2d\n",time2str(time[i],tstr,3),obs[i].sat); + continue; } time[i]=timeadd(time[i],-dt);