📄 ppf_lib_valid.c
字号:
cs_out=PL_MOD; status=pl_change_sv_cs(time,&cs_in,&cs_out,r_EF,rd_EF,r2d_EF,r_out,rd_out,r2d_out); CHECK_STATUS("pl_change_sv_cs",status) CHECK_VEC("Position vector from EF to MOD(m)",r_out,r_MOD,0,2,30) CHECK_VEC("Velocity vector from EF to MOD(m/s)",rd_out,rd_MOD,0,2,5e-2) /* CHECK_VEC("Acceleration vector from EF to MOD(m/s**2)",r2d_out,r2d_MOD,0,2,1) */ /* From EF to TOD */ cs_in=PL_EF; cs_out=PL_TOD; status=pl_change_sv_cs(time,&cs_in,&cs_out,r_EF,rd_EF,r2d_EF,r_out,rd_out,r2d_out); CHECK_STATUS("pl_change_sv_cs",status) CHECK_VEC("Position vector from EF to TOD(m)",r_out,r_TOD,0,2,30) CHECK_VEC("Velocity vector from EF to TOD(m/s)",rd_out,rd_TOD,0,2,5e-2) /* CHECK_VEC("Acceleration vector from EF to TOD(m/s**2)",r2d_out,r2d_TOD,0,2,1) */}END_CHECK/***************************************************************************************** * * --------- * Test case * --------- * * Test number : VT-2 * ****************************************************************************************//*--------pl_geo_car & pl_car_geo validation ---------*//*----------------------------------------------------*/START_CHECK("pl_geo_car & pl_car_geo validation.")/*--- Initialize input data ---*/lon_in=60.0;lat_in=70.0;h_in=2000000.0;lond_in=5.0;latd_in=2.5;hd_in=1000.0;/*------------------------------*/status=pl_geo_car(&lon_in,&lat_in,&h_in,&lond_in,&latd_in,&hd_in,rr,rrd);CHECK_STATUS("pl_geo_car status",status)status=pl_car_geo(rr,rrd,&lon_out,&lat_out,&h_out,&lond_out,&latd_out,&hd_out);CHECK_STATUS("pl_car_geo status",status)/*------------------------------*/CHECK_PAR ("Geocentric longitude consistency.",lon_out,lon_in,1e-6)CHECK_PAR ("Geodetic latitude consistency.",lat_out,lat_in,1e-6)CHECK_PAR ("Geodetic altitude consistency.",h_out,h_in,1e-3)CHECK_PAR ("Geocentric longitude rate consistency.",lond_out,lond_in,1e-3)CHECK_PAR ("Geodetic latitude rate consistency.",latd_out,latd_in,1e-3)CHECK_PAR ("Geodetic altitude rate consistency.",hd_out,hd_in,1e-3)END_CHECK/***************************************************************************************** * * --------- * Test case * --------- * * Test number : VT-3 * ****************************************************************************************//*----------pl_srar_cs validation--------------*//*---------------------------------------------*/START_CHECK("pl_srar_cs validation")/*--- Inputs initialization ---*/misp[0]=att[1]; /*--- Pitch angle ---*/misp[1]=att[2]; /*--- Roll angle ---*/misp[2]=att[0]; /*--- Yaw angle ---*/mispd[0]=datt[1]; /*--- Pitch angle rate ---*/mispd[1]=datt[2]; /*--- Roll angle rate ---*/mispd[2]=datt[0]; /*--- Yaw angle rate ---*/iatt=1;/*-----------------------------*/status=pl_srar_cs(pos,vel,acc,aocs,misp,mispd,xs,ys,zs,xsd,ysd,zsd,angout,angoutd);CHECK_STATUS ("pl_srar_cs status",status)for (i=1;i<=3;i++) rx[i]=xs[i-1];for (i=1;i<=3;i++) ry[i]=ys[i-1];for (i=1;i<=3;i++) rz[i]=zs[i-1];for (i=1;i<=3;i++) rxd[i]=xsd[i-1];for (i=1;i<=3;i++) ryd[i]=ysd[i-1];for (i=1;i<=3;i++) rzd[i]=zsd[i-1];rrx[1]=-0.7028840532726205; rrx[2]=-0.6523026281954788; rrx[3]=-0.2836464152855158; rry[1]=0.2096204695839999; rry[2]=0.1911030319047854; rry[3]=-0.9589259042951037; rrz[1]=0.6797155775664079; rrz[2]=-0.7334718211670233;rrz[3]=0.002412709575291077;rrxd[1]=5.063702825886715e-05; rrxd[2]=-5.574402970030661e-05;rrxd[3]=2.714708771020343e-06; rryd[1]=0.0007171613975994411; rryd[2]=-0.0007776056583015462;rryd[3]=1.802965168452014e-06; rrzd[1]=-0.0001688055313883543; rrzd[2]=-0.0001530267675034051; rrzd[3]=0.001035734860758374; x=sqrt(fabs(2.0-2.0*(rx[1]*rrx[1]+rx[2]*rrx[2]+rx[3]*rrx[3])));y=sqrt(fabs(2.0-2.0*(ry[1]*rry[1]+ry[2]*rry[2]+ry[3]*rry[3])));z=sqrt(fabs(2.0-2.0*(rz[1]*rrz[1]+rz[2]*rrz[2]+rz[3]*rrz[3])));CHECK_PAR ("pl_srar_cs. X-axis accuracy.",x,0.0,1e-3)CHECK_PAR ("pl_srar_cs. Y-axis accuracy.",y,0.0,1e-3)CHECK_PAR ("pl_srar_cs. Z-axis accuracy.",z,0.0,1e-3)CHECK_VEC ("pl_srar_cs. X-axis rate accuracy.",rrxd,rxd,1,3,1e-3)CHECK_VEC ("pl_srar_cs. Y-axis rate accuracy.",rryd,ryd,1,3,1e-3)CHECK_VEC ("pl_srar_cs. Z-axis rate accuracy.",rrzd,rzd,1,3,1e-3)END_CHECK/***************************************************************************************** * * --------- * Test case * --------- * * Test number : VT-4 * ****************************************************************************************//*------------pl_geo_distance validation-------------------*//*---------------------------------------------------------*/START_CHECK("pl_geo_distance validation")/*--- Input Initialization ---*//*----------------------------*/lon1=0.0;lat1=0.0;lon2=90.0;lat2=0.0;h=0.0;status=pl_geo_distance(&lon1,&lat1,&lon2,&lat2,&h,&d,&az1,&az2);CHECK_STATUS("pl_geo_distance status",status)p=(M_PI)*A/2.0;CHECK_PAR("AT-21.Geodesic distance accuracy.",d,p,20000)printf("\t\tGeodesic distance is equal to: %lf m.\n",d);CHECK_PAR("AT-21.Geodesic azimuth of initial point.",az1,90.0,1e-6)CHECK_PAR("AT-21.Geodesic azimuth of final point.",az2,270.0,1e-6)END_CHECK/***************************************************************************************** * * --------- * Test case * --------- * * Test number : VT-5 * ****************************************************************************************//*---------- pmjd & emjd validation ---------------*//*-------------------------------------------------*/START_CHECK("pmjd & emjd validation") mjdp_m[0] = mjdp[0]; mjdp_m[1] = mjdp[1]; status = pmjd( mjdt_m, mjdp_m, utce_m, dut1e_m ); strcpy( utce_new, utce_m ); strcpy( dut1e_new, dut1e_m ); status = emjd( mjdt_new, mjdp_new, utce_new, dut1e_new ); CHECK_PAR( "MJD output vs MJD input", mjdp_new[0], mjdp_m[0], 1.16e-11 ) CHECK_PAR( "DeltaUT1 output vs DeltaUT1 input", mjdp_new[1], mjdp_m[1], 1.16e-11)END_CHECK/***************************************************************************************** * * --------- * Test case * --------- * * Test number : VT-6 * ****************************************************************************************//*----------- pl_sun, pl_moon, pl_planets & pl_star_radec validation -----------*//*==============================================================================*/ START_CHECK("pl_sun, pl_moon, pl_planets & pl_star_radec validation.")/*--- Initialize input data ---*/ /* Output data taken from JPL file for date 1 Jan 1997. Given in GEO-MEAN-2000 reference system */ psun[0] = 27194878.68362263; psun[1] = -132630129.1728563; psun[2] = -57503402.89730293; vsun[0] = 29.76142628120521; vsun[1] = 5.144322852105286; vsun[2] = 2.231621282770508; pmoon[0] = -401090.0604245735; pmoon[1] = 8806.974516115712; pmoon[2] = 1317.167354695972; vmoon[0] = 0.01573390305025041; vmoon[1] = -0.924535097549946; vmoon[2] = -0.3073301858923245; pplanet[0] = 360537246.5220062; pplanet[1] = -620606064.8551784; pplanet[2] = -274804229.4228395; vplanet[0] = 11.37592527879614; vplanet[1] = 6.301985231532927; vplanet[2] = 2.424137059795838; /* To compare with JPL data we will need to transform from MEAN-2000 to TOD */ for( i=0 ; i<3 ; i++ ) { rr[i] = pmoon[i]; rrd[i] =vmoon[i]; } time_jpl[0]= -1095.; time_jpl[1]=0.0; pcs_in=PL_GM2000; /* GEO_MEAN_2000 */ pcs_out=PL_TOD; /* MEAN_DATE */ status=pl_change_sv_cs(time_jpl,&pcs_in,&pcs_out,rr,rrd,rr2d,rr_out,rrd_out,rr2d_out); for( i=0 ; i<3 ; i++ ) { pmoon[i] = rr_out[i]; vmoon[i] = rrd_out[i]; } for( i=0 ; i<3 ; i++ ) { rr[i] = psun[i]; rrd[i] =vsun[i]; } status=pl_change_sv_cs(time_jpl,&pcs_in,&pcs_out,rr,rrd,rr2d,rr_out,rrd_out,rr2d_out); for( i=0 ; i<3 ; i++ ) { psun[i] = rr_out[i]; vsun[i] = rrd_out[i]; } /* we need not change for pl_planet since it is given in MEAN-2000 */ ut1[0] = -1095.; ut1[1] = 0.0; ra0 = 1.2; /* rad */ dec0 = 0.2; /* rad */ mu_ra = 0.; /* rad/century */ mu_dec = 0.; /* rad/century */ rad_vel = 0.; /* AU/century */ par = 0.; /* rad */ ra=dec=0; ra_p = 1.2; /* I don't know the true values */ dec_p = 0.2;/*------------------------------*/status = pl_sun( ut1, rsun, rdsun );CHECK_STATUS("pl_sun status",status)status = pl_moon( ut1, rmoon, rdmoon ); CHECK_STATUS("pl_moon status",status)iplanet=5;status = pl_planets( &iplanet, ut1, rplanet, rdplanet );CHECK_STATUS("pl_planets status",status)pl_star_radec( ut1, &ra0, &dec0, &mu_ra, &mu_dec, &rad_vel, &par, &ra, &dec);CHECK_STATUS("pl_star_radec status",status)for( i=0 ; i<3 ; i++ ) { /* transform to km and km/s */ rsun[i] /=1000.; rdsun[i] /=1000.; rmoon[i] /=1000.; rdmoon[i] /=1000.; rplanet[i] /=1000.; rdplanet[i] /=1000.;}/*------------------------------*/CHECK_VEC( "Sun position consistency: ", rsun, psun, 0,2, 2000.0 )CHECK_VEC( "Sun velocity consistency: ", rdsun, vsun, 0,2, 0.005 )ang = acos( (rsun[0]*psun[0]+rsun[1]*psun[1]+rsun[2]*psun[2])/sqrt(rsun[0]*rsun[0]+rsun[1]*rsun[1]+rsun[2]*rsun[2])/sqrt(psun[0]*psun[0]+psun[1]*psun[1]+psun[2]*psun[2]))* (180000./M_PI);CHECK_PAR( "Sun angle difference(mdeg) ", ang, 0., 1. )CHECK_VEC( "Moon position consistency: ", rmoon, pmoon, 0,2, 100.0 )CHECK_VEC( "Moon velocity consistency: ", rdmoon, vmoon, 0,2, 0.005 )ang = acos( (rmoon[0]*pmoon[0]+rmoon[1]*pmoon[1]+rmoon[2]*pmoon[2])/sqrt(rmoon[0]*rmoon[0]+rmoon[1]*rmoon[1]+rmoon[2]*rmoon[2])/sqrt( pmoon[0]*pmoon[0]+pmoon[1]*pmoon[1]+pmoon[2]*pmoon[2]))* (180000./M_PI);CHECK_PAR( "Moon angle difference(mdeg) ", ang, 0., 10 )CHECK_VEC( "Planet position consistency: ", rplanet, pplanet, 0,2, 200000.0 )CHECK_VEC( "Planet velocity consistency: ", rdplanet, vplanet, 0,2, 0.1 )ang = acos( (rplanet[0]*pplanet[0]+rplanet[1]*pplanet[1]+rplanet[2]*pplanet[2])/sqrt(rplanet[0]*rplanet[0]+rplanet[1]*rplanet[1]+rplanet[2]*rplanet[2])/sqrt( pplanet[0]*pplanet[0]+pplanet[1]*pplanet[1]+pplanet[2]*pplanet[2]))* (180000./M_PI);CHECK_PAR( "Planet angle difference(mdeg) ", ang, 0., 10. )CHECK_PAR( "Star RA consistency: ", ra, ra_p, 1e-3 )CHECK_PAR( "Star DEC consistency: ", dec, dec_p, 1e-3 )END_CHECK/***************************************************************************************** * * --------- * Test case * --------- * * Test number : VT-7 * ****************************************************************************************//*------------tadd & tsub validation -------------------*//*======================================================*/START_CHECK("tadd & tsub validation") mjdt_a1[0] = (long) 1111; mjdt_a1[1] = (long) 86000; mjdt_a1[2] = (long) 333333; mjdt_a1[3] = (long) 4444; mjdt_a2[0] = (long) 111; mjdt_a2[1] = (long) 422; mjdt_a2[2] = (long) 800000; mjdt_a2[3] = (long) 444; status = tadd( mjdt_a1, mjdt_a3, mjdt_a2 ); CHECK_STATUS("tadd status",status) status = tsub( mjdt_a3, mjdt_a2, mjdt_a4); CHECK_STATUS("tsub status",status) CHECK_VEC( "tadd & tsub conistency: ", mjdt_a1, mjdt_a4, 0,3,1e-11)END_CHECK/***************************************************************************************** * * --------- * Test case * --------- * * Test number : VT-8 * ****************************************************************************************//*----------sbtutc & utcsbt--------------------*//*=============================================*/START_CHECK("sbutc & utcsbt validation") obtm_1 = (unsigned long) 0xABCDEF01; obtl_1 = (unsigned long) 0; mjdt_s1[0] = (long) 1111; mjdt_s1[1] = (long) 86000; mjdt_s1[2] = (long) 333333; mjdt_s1[3] = (long) 0; sbt0 = (unsigned long) 0xABCDEF01; per0 = (double) 1.0E12 / (double) 256.0; status = sbtutc( mjdt_s1, &sbt0, &per0, &obtm_1, &obtl_1, mjdt_s2 ); CHECK_STATUS("sbtutc status",status) status = utcsbt( mjdt_s1, &sbt0, &per0, &obtm_2, &obtl_2, mjdt_s2 ); CHECK_STATUS("utcsbt status",status) CHECK_PAR ("obt consistency LSB",obtm_1,obtm_2,1e-11) CHECK_PAR ("obt consistency MSB",obtl_1,obtl_2,1e-11)END_CHECK START_CHECK("tmjd, pmjd & emjd validation") mjdp_m[0] = mjdp[0]; mjdp_m[1] = mjdp[1]; mjdp_m[0] = 1.1E-7; mjdp_m[0] = 1.1E-3; status = pmjd( mjdt_m, mjdp_m, utce_m, dut1e_m ); strcpy( utce_new, utce_m ); strcpy( dut1e_new, dut1e_m ); status = emjd( mjdt_new, mjdp_new, utce_new, dut1e_new ); status = tmjd( mjdt_new, mjdp_tra, utce_tra, dut1e_tra ); printf( "------- Processing Format input :%19.12lf\n", mjdp_m[0] ); printf( "------- Processing Format output:%19.12lf\n", mjdp_tra[0] ); CHECK_PAR( "Processing Format loop (pmjd->emjd) : pmjd input vs output", mjdp_m[0], mjdp_new[0], 1.16E-11 ) CHECK_PAR( "Processing Format loop (pmjd->emjd->tmjd): pmjd input vs output", mjdp_m[0], mjdp_tra[0], 1.16E-11 ) END_CHECKEND_VALIDATION
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -