/* time2doy() */ void utest11(void) { double ep1[]={2004,1,1,0,0,0}; double ep2[]={2004,12,31,0,0,0}; double ep3[]={2005,12,31,12,0,0}; double doy1,doy2,doy3; doy1=time2doy(epoch2time(ep1)); doy2=time2doy(epoch2time(ep2)); doy3=time2doy(epoch2time(ep3)); assert(fabs(doy1-1.0)<1E-6); assert(fabs(doy2-366.0)<1E-6); assert(fabs(doy3-365.5)<1E-6); printf("%s utset11 : OK\n",__FILE__); }
/* tropospheric delay correction ----------------------------------------------- * compute sbas tropospheric delay correction (mops model) * args : gtime_t time I time * double *pos I receiver position {lat,lon,height} (rad/m) * double *azel I satellite azimuth/elavation (rad) * double *var O variance of troposphric error (m^2) * return : slant tropospheric delay (m) *-----------------------------------------------------------------------------*/ extern double sbstropcorr(gtime_t time, const double *pos, const double *azel, double *var) { const double k1=77.604,k2=382000.0,rd=287.054,gm=9.784,g=9.80665; static double pos_[3]={0},zh=0.0,zw=0.0; int i; double c,met[10],sinel=sin(azel[1]),h=pos[2],m; trace(4,"sbstropcorr: pos=%.3f %.3f azel=%.3f %.3f\n",pos[0]*R2D,pos[1]*R2D, azel[0]*R2D,azel[1]*R2D); if (pos[2]<-100.0||10000.0<pos[2]||azel[1]<=0) { *var=0.0; return 0.0; } if (zh==0.0||fabs(pos[0]-pos_[0])>1E-7||fabs(pos[1]-pos_[1])>1E-7|| fabs(pos[2]-pos_[2])>1.0) { getmet(pos[0]*R2D,met); c=cos(2.0*PI*(time2doy(time)-(pos[0]>=0.0?28.0:211.0))/365.25); for (i=0;i<5;i++) met[i]-=met[i+5]*c; zh=1E-6*k1*rd*met[0]/gm; zw=1E-6*k2*rd/(gm*(met[4]+1.0)-met[3]*rd)*met[2]/met[1]; zh*=pow(1.0-met[3]*h/met[1],g/(rd*met[3])); zw*=pow(1.0-met[3]*h/met[1],(met[4]+1.0)*g/(rd*met[3])-1.0); for (i=0;i<3;i++) pos_[i]=pos[i]; } m=1.001/sqrt(0.002001+sinel*sinel); *var=0.12*0.12*m*m; return (zh+zw)*m; }
//--------------------------------------------------------------------------- void __fastcall TTimeDialog::FormShow(TObject *Sender) { gtime_t utc; double tow,doy; int week; char msg[1024],s1[64],s2[64],*p=msg; utc=gpst2utc(Time); time2str(Time,s1,0); time2str(utc,s2,0); tow=time2gpst(Time,&week); doy=time2doy(Time); p+=sprintf(p,"%s GPST\n",s1); p+=sprintf(p,"%s UTC\n\n",s2); p+=sprintf(p,"GPS Week: %d\n",week); p+=sprintf(p,"GPS Time: %.0f s\n",tow); p+=sprintf(p,"Day of Year: %03d\n",(int)floor(doy)); p+=sprintf(p,"Day of Week: %d\n",(int)floor(tow/86400.0)); p+=sprintf(p,"Time of Day: %.0f s\n",fmod(tow,86400.0)); sprintf(p,"Leap Seconds: %.0f s\n",timediff(Time,utc)); Message->Caption=msg; }