📄 ppf_lib_valid.c
字号:
#include <stdio.h>#include <math.h>#include <string.h>#include <ppf_lib.h>/* This version number is the SCCS version number valid only for internal configuration and control. *//* The oficial version number can be found in the History box below. */static char PPF_LIB_VALID_C [] = "@(#)ppf_lib_valid.c 1.12 00/06/28";/***************************************************************************************** * * Copyright : DEIMOS Space S.L. * Project : REMASE * * Test level : VALIDATION * * Module : ppf_lib_valid.c * Purpose : It runs validation tests of PPF_LIB * * History +------------------------------------------------------------------------+ * | Version | Date | Name | Change | * |---------|----------|--------------|------------------------------------| * | 4.1 | 15/01/97 | GMV, S.A. | First release | * | 4.2 | 30/04/97 | GMV, S.A. | Second release | * | 4.3 | 18/05/98 | GMV, S.A. | Third release | * | 4.4 | 13/10/98 | GMV, S.A. | Fourth release | * | 4.5 | 25/05/99 | GMV, S.A. | Fifth release | * | 4.6 | 14/04/00 | GMV, S.A. | Sixth release | * | 4.7 | 22/06/01 | GMV, S.A. | Seventh release | * | 4.8 | 31/07/01 | GMV, S.A. | Eigth release | * | 4.9 | 22/10/01 | DEIMOS Space | Ninth release | * | 5.0 | 18/01/02 | DEIMOS Space | Tenth release | * | 5.1 | 25/11/02 | DEIMOS Space | Eleventh release | * | 5.2 | 26/05/03 | DEIMOS Space | Twelfth release | * | 5.3 | 13/12/04 | DEIMOS Space | Thirteenth release | * | 5.3.1 | 15/02/05 | DEIMOS Space | Forteenth release | * | 5.4 | 17/05/05 | DEIMOS Space | Fifteenth release | * +------------------------------------------------------------------------+ * ****************************************************************************************//* Macro definition *//* ---------------- */#define MAX_CONDITION 1000 /* Maximum number of checks per test case */#define START_VALIDATION int main(int argc, char *argv[]){ \ double di,th,ta,tb,sinta,costa,sintb,costb;\ double di_l,di_r,th_l,th_r; \ int i,j; \ int checks; \ PL_Boolean condition[MAX_CONDITION]; \ PL_Boolean result;#define START_CHECK(msg) printf(" *** %s\n",msg); \ checks = 0;#define END_CHECK result = PL_TRUE; \ for (i = 0 ; i < checks ; i++) \ { \ if (condition[i] == PL_FALSE) \ { \ result = PL_FALSE; \ break; \ } \ } \ if (result == PL_TRUE) \ { \ printf(" *** RESULT = PASS ***\n\n");\ } \ else \ { \ printf(" *** RESULT = FAIL ***\n\n");\ }#define CHECK_STATUS(msg,stat) if (stat < PL_OK ) { \ condition[checks] = PL_FALSE; \ printf(" ...\t%s (PL_FALSE)\n",msg); \ }else{ \ condition[checks] = PL_TRUE; \ printf(" ...\t%s (PL_TRUE)\n",msg); \ } \ checks++;#define CHECK_PAR(msg,p,p0,dp) if((di=fabs(p-p0)) <= (th=dp)){ \ condition[checks] = PL_TRUE; \ printf(" ...\t%s (PL_TRUE)\n",msg); \ }else{ \ condition[checks] = PL_FALSE; \ printf(" ...\t%s (PL_FALSE)\n",msg); \ } \ printf("\t\t Threshold : %g\n",th); \ printf("\t\t Difference : %g\n",di); \ checks++;#define CHECK_VEC(msg,v,v0,im,iM,dp) for(i=im;i<=iM;++i){ \ CHECK_PAR(msg,v[i],v0[i],dp); \ }#define END_VALIDATION return(0); \ }/* Nominal validation values *//* ------------------------- */double mjdr[] = { -730.0 , 0.3};long irep = 35;long icyc = 501;double rlong = -47.2941;double ascmlst = 22.0;long iorb0 = 0;long iorb = 43;double mjdp[] = { -2456.0 , 0.3 };double pos[] = { 4859964.138 , -5265612.059 , 0.002 };double vel[] = { -1203.303801, -1098.845511 , 7377.224410 };double acc[] = { 0.0 , 0.0 , 0.0 };double aocs[] = { -0.1672 , 0.0501 , 3.9284 };double att[] = { 0.1 , -0.1 , 0.15 };double datt[] = { 0.0 , 0.0 , 0.0 };double longdrs = 15.4;double mjdrs[] = { -2456.0 , 0.3};double posdrs[] = { 40652295. , 11197507.0 , -844.0 };double veldrs[] = { 0.06 , -0.22 , 0.078 };double sta[] = {0.,0.,0.,0.};#define PL_Boolean PL_Boolean#define PL_FALSE PL_FALSE#define PL_TRUE PL_TRUEtypedef enum{PL_FALSE = 0, /* False variable */PL_TRUE = 1 /* True variable */} PL_Boolean;#ifndef M_PIstatic const double M_PI=3.14159265358979323846;#endifstatic const double A = 6378137.0;/* Validation for PPF_LIB *//* ---------------------- */START_VALIDATION/* Local variables definition *//* -------------------------- */long status=0;double time[2];double r_j2000[3],rd_j2000[3],r2d_j2000[3];double r_MOD[3],rd_MOD[3],r2d_MOD[3];double r_TOD[3],rd_TOD[3],r2d_TOD[3];double r_EF[3],rd_EF[3],r2d_EF[3];double r_out[3],rd_out[3],r2d_out[3];double rr[3],rrd[3],rr2d[3];double lon_in,lat_in,h_in,lond_in,latd_in,hd_in;double lon_out,lat_out,h_out,lond_out,latd_out,hd_out;double misp[3],mispd[3];long iatt;double xs[3],ys[3],zs[3],xsd[3],ysd[3],zsd[3];double angout[3],angoutd[3];double rx[4],ry[4],rz[4],rxd[4],ryd[4],rzd[4];double rrx[4],rry[4],rrz[4];double rrxd[4],rryd[4],rrzd[4];double x,y,z;double lon1,lat1,lon2,lat2;double h,d,az1,az2;double p;long mjdt_m[4], mjdt_new[4];double mjdp_m[2], mjdp_new[2], mjdp_tra[2];char utce_m[28], dut1e_m[9], utce_new[28], dut1e_new[9], utce_tra[28], dut1e_tra[9];long mjdt_pr[4], mjdt_prnew[4];double mjdp_pr[2], mjdp_prnew[2];char utce_pr[28], dut1e_pr[9], utce_prnew[28], dut1e_prnew[9];int con;long cs_in,cs_out;double psun[3],vsun[3],pmoon[3],vmoon[3],pplanet[3],vplanet[3];double time_jpl[2];long pcs_in,pcs_out,iplanet;double rr_out[3],rrd_out[3],rr2d_out[3];double ang, ut1[2], rmoon[3], rdmoon[3], rsun[3], rdsun[3], rplanet[3], rdplanet[3];double ra0, dec0, mu_ra, mu_dec, rad_vel, par, ra, dec, ra_p, dec_p;long mjdt_a1[4],mjdt_a2[4],mjdt_a3[4],mjdt_a4[4];long mjdt_s1[4],mjdt_s2[4];unsigned long sbt0,per0,obtm_1,obtl_1,obtm_2,obtl_2;/***************************************************************************************** * * --------- * Test case * --------- * * Test number : VT-1 * ****************************************************************************************//*--------- pl_change_sv_cs validation ------------*//*-------------------------------------------------*/START_CHECK("pl_change_sv_cs validation")/* REAL DATA AS INPUTS FOR pl_change_sv_cs *//* ----------------------------------------*/for(con=0;con<2;con++) { if(con==0) { time[0]= (double) -1127.5; time[1]= (double) -0.05; /* AT THIS TIME : */ r_j2000[0]= (double)4954.255420826*1000.; r_j2000[1]= (double)5176.446063286*1000.; r_j2000[2]= (double)-39.764584115*1000. ; rd_j2000[0]= (double) 0.821544143*1000.; rd_j2000[1]= (double) -0.741319667*1000.; rd_j2000[2]= (double) 7.377656733*1000.; r2d_j2000[0]=(double)0.; r2d_j2000[1]=(double)0.; r2d_j2000[2]=(double)0.; r_MOD[0]= (double)4957.816882545*1000.; r_MOD[1]= (double)5173.023476164*1000.; r_MOD[2]= (double) -41.251875801*1000.; rd_MOD[0]= (double) 0.823245938*1000.; rd_MOD[1]= (double) -0.741887569*1000.; rd_MOD[2]= (double) 7.377409950*1000.; r2d_MOD[0]= (double)0.; r2d_MOD[1]= (double)0.; r2d_MOD[2]= (double)0.; r_TOD[0]= (double) 4957.803233005*1000.; r_TOD[1]= (double) 5173.034652428*1000.; r_TOD[2]= (double) -41.490126861*1000.; rd_TOD[0]= (double) 0.823239720*1000.; rd_TOD[1]= (double) -0.741537770*1000.; rd_TOD[2]= (double) 7.377445812*1000.; r2d_TOD[0]=(double)0.; r2d_TOD[1]=(double)0.; r2d_TOD[2]=(double)0.; r_EF[0]= (double)-6622.972393372*1000.; r_EF[1]= (double) 2734.289198770*1000.; r_EF[2]= (double) -41.486108382*1000.; rd_EF[0]= (double) 0.590333424*1000.; rd_EF[1]= (double) 1.519660870*1000.; rd_EF[2]= (double) 7.377446179*1000.; r2d_EF[0]=(double)0.; r2d_EF[1]=(double)0.; r2d_EF[2]=(double)0.; } else if(con==1) { time[0]= (double) -1127.48611111; time[1]= (double) -0.05; /* 1996/11/29 12:20: 0.0 */ /* AT THIS TIME : */ r_j2000[0]= (double) 2310.184281427*1000.; r_j2000[1]= (double) 956.353819725*1000.; r_j2000[2]= (double) 6703.713927191*1000.; rd_j2000[0]= (double) -4.637710611*1000.; rd_j2000[1]= (double) -5.350625551*1000.; rd_j2000[2]= (double) 2.356550956*1000.; r2d_j2000[0]=(double) 0.; r2d_j2000[1]=(double) 0.; r2d_j2000[2]=(double) 0.; r_MOD[0]= (double) 2312.855805854*1000.; r_MOD[1]= (double) 954.757527635*1000.; r_MOD[2]= (double) 6703.020255454*1000.; rd_MOD[0]= (double) -4.640697179*1000.; rd_MOD[1]= (double) -5.347421788*1000.; rd_MOD[2]= (double) 2.357943157*1000.; r2d_MOD[0]= (double) 0.; r2d_MOD[1]= (double) 0.; r2d_MOD[2]= (double) 0.; r_TOD[0]= (double) 2312.845831401*1000.; r_TOD[1]= (double) 955.079493995*1000.; r_TOD[2]= (double) 6702.977829338*1000.; rd_TOD[0]= (double) -4.640685624*1000.; rd_TOD[1]= (double) -5.347322980*1000.; rd_TOD[2]= (double) 2.358189964*1000.; r2d_TOD[0]=(double) 0.; r2d_TOD[1]=(double) 0.; r2d_TOD[2]=(double) 0.; r_EF[0]= (double) -1567.051918508*1000.; r_EF[1]= (double) 1950.835982494*1000.; r_EF[2]= (double) 6702.979316274*1000.; rd_EF[0]= (double) 6.578987079*1000.; rd_EF[1]= (double) -2.835026155*1000.; rd_EF[2]= (double) 2.358185925*1000.; r2d_EF[0]=(double) 0.; r2d_EF[1]=(double) 0.; r2d_EF[2]=(double) 0.; } START_CHECK("AT-20") /* From GM2000 to MOD */ cs_in=PL_GM2000; cs_out=PL_MOD; status=pl_change_sv_cs(time,&cs_in,&cs_out,r_j2000,rd_j2000,r2d_j2000,r_out,rd_out,r2d_out); CHECK_STATUS("pl_change_sv_cs",status) CHECK_VEC("Position vector from GM2000 to MOD(m)",r_out,r_MOD,0,2,1e-3) CHECK_VEC("Velocity vector from GM2000 to MOD(m/s)",rd_out,rd_MOD,0,2,1e-5) /* CHECK_VEC("Acceleration vector from GM2000 to MOD(m/s**2)",r2d_out,r2d_MOD,0,2,1e-7) */ /* From GM2000 to TOD */ cs_in=PL_GM2000; cs_out=PL_TOD; status=pl_change_sv_cs(time,&cs_in,&cs_out,r_j2000,rd_j2000,r2d_j2000,r_out,rd_out,r2d_out); CHECK_STATUS("pl_change_sv_cs",status) CHECK_VEC("Position vector from GM2000 to TOD(m)",r_out,r_TOD,0,2,1) CHECK_VEC("Velocity vector from GM2000 to TOD(m/s)",rd_out,rd_TOD,0,2,1e-3) /* CHECK_VEC("Acceleration vector from GM2000 to TOD(m/s**2)",r2d_out,r2d_TOD,0,2,1e-6) */ /* From GM2000 to EF */ cs_in=PL_GM2000; cs_out=PL_EF; status=pl_change_sv_cs(time,&cs_in,&cs_out,r_j2000,rd_j2000,r2d_j2000,r_out,rd_out,r2d_out); CHECK_STATUS("pl_change_sv_cs",status) CHECK_VEC("Position vector from GM2000 to EF(m)",r_out,r_EF,0,2,30) CHECK_VEC("Velocity vector from GM2000 to EF(m/s)",rd_out,rd_EF,0,2,5e-2) /* CHECK_VEC("Acceleration vector from GM2000 to EF(m/s**2)",r2d_out,r2d_EF,0,2,1) */ /* From MOD to GM2000 */ cs_in=PL_MOD; cs_out=PL_GM2000; status=pl_change_sv_cs(time,&cs_in,&cs_out,r_MOD,rd_MOD,r2d_MOD,r_out,rd_out,r2d_out); CHECK_STATUS("pl_change_sv_cs",status) CHECK_VEC("Position vector from MOD to GM2000(m)",r_out,r_j2000,0,2,1e-3) CHECK_VEC("Velocity vector from MOD to GM2000(m/s)",rd_out,rd_j2000,0,2,1e-5) /* CHECK_VEC("Acceleration vector from MOD to GM2000(m/s**2)",r2d_out,r2d_j2000,0,2,1e-7) */ /* From MOD to TOD */ cs_in=PL_MOD; cs_out=PL_TOD; status=pl_change_sv_cs(time,&cs_in,&cs_out,r_MOD,rd_MOD,r2d_MOD,r_out,rd_out,r2d_out); CHECK_STATUS("pl_change_sv_cs",status) CHECK_VEC("Position vector from MOD to TOD(m)",r_out,r_TOD,0,2,1) CHECK_VEC("Velocity vector from MOD to TOD(m/s)",rd_out,rd_TOD,0,2,1e-3) /* CHECK_VEC("Acceleration vector from MOD to TOD(m/s**2)",r2d_out,r2d_TOD,0,2,1e-6) */ /* From MOD to EF */ cs_in=PL_MOD; cs_out=PL_EF; status=pl_change_sv_cs(time,&cs_in,&cs_out,r_MOD,rd_MOD,r2d_MOD,r_out,rd_out,r2d_out); CHECK_STATUS("pl_change_sv_cs",status) CHECK_VEC("Position vector from MOD to EF(m)",r_out,r_EF,0,2,30) CHECK_VEC("Velocity vector from MOD to EF(m/s)",rd_out,rd_EF,0,2,5e-2) /* CHECK_VEC("Acceleration vector from MOD to EF(m/s**2)",r2d_out,r2d_EF,0,2,1) */ /* From TOD to GM2000 */ cs_in=PL_TOD; cs_out=PL_GM2000; status=pl_change_sv_cs(time,&cs_in,&cs_out,r_TOD,rd_TOD,r2d_TOD,r_out,rd_out,r2d_out); CHECK_STATUS("pl_change_sv_cs",status) CHECK_VEC("Position vector from TOD to GM2000(m)",r_out,r_j2000,0,2,1) CHECK_VEC("Velocity vector from TOD to GM2000(m/s)",rd_out,rd_j2000,0,2,1e-3) /* CHECK_VEC("Acceleration vector from TOD to GM2000(m/s**2)",r2d_out,r2d_j2000,0,2,1e-6) */ /* From TOD to MOD */ cs_in=PL_TOD; cs_out=PL_MOD; status=pl_change_sv_cs(time,&cs_in,&cs_out,r_TOD,rd_TOD,r2d_TOD,r_out,rd_out,r2d_out); CHECK_STATUS("pl_change_sv_cs",status) CHECK_VEC("Position vector from TOD to MOD(m)",r_out,r_MOD,0,2,1) CHECK_VEC("Velocity vector from TOD to MOD(m/s)",rd_out,rd_MOD,0,2,1e-3) /* CHECK_VEC("Acceleration vector from TOD to MOD(m/s**2)",r2d_out,r2d_MOD,0,2,1e-6) */ /* From TOD to EF */ cs_in=PL_TOD; cs_out=PL_EF; status=pl_change_sv_cs(time,&cs_in,&cs_out,r_TOD,rd_TOD,r2d_TOD,r_out,rd_out,r2d_out); CHECK_STATUS("pl_change_sv_cs",status) CHECK_VEC("Position vector from TOD to EF(m)",r_out,r_EF,0,2,30) CHECK_VEC("Velocity vector from TOD to EF(m/s)",rd_out,rd_EF,0,2,5e-2) /* CHECK_VEC("Acceleration vector from TOD to EF(m/s**2)",r2d_out,r2d_EF,0,2,1) */ /* From EF to GM2000 */ cs_in=PL_EF; cs_out=PL_GM2000; 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 GM2000(m)",r_out,r_j2000,0,2,30) CHECK_VEC("Velocity vector from EF to GM2000(m/s)",rd_out,rd_j2000,0,2,5e-2) /* CHECK_VEC("Acceleration vector from EF to GM2000(m/s**2)",r2d_out,r2d_j2000,0,2,1) */ /* From EF to MOD */ cs_in=PL_EF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -