Пример #1
0
/* 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__);
}
Пример #2
0
/* 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;
}
Пример #3
0
//---------------------------------------------------------------------------
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;
}