int DLL_FUNC SGP4( const double tsince, const tle_t *tle, const double *params, double *pos, double *vel) { double a, e, omega, omgadf, temp, tempa, tempe, templ, tsq, xl, xmdf, xmp, xnoddf, xnode; /* Update for secular gravity and atmospheric drag. */ xmdf = tle->xmo+p_xmdot*tsince; omgadf = tle->omegao+p_omgdot*tsince; xnoddf = tle->xnodeo+p_xnodot*tsince; omega = omgadf; xmp = xmdf; tsq = tsince*tsince; xnode = xnoddf+xnodcf*tsq; tempa = 1-c1*tsince; tempe = tle->bstar*c4*tsince; templ = t2cof*tsq; if( !simple_flag) { const double delomg = omgcof*tsince; double delm = 1. + p_eta * cos(xmdf); double tcube, tfour; delm = xmcof * (delm * delm * delm - delmo); temp = delomg+delm; xmp = xmdf+temp; omega = omgadf-temp; tcube = tsq*tsince; tfour = tsince*tcube; tempa = tempa-d2*tsq-d3*tcube-d4*tfour; tempe = tempe+tle->bstar*c5*(sin(xmp)-sinmo); templ = templ+t3cof*tcube+tfour*(t4cof+tsince*t5cof); }; /* End of if (isFlagClear(SIMPLE_FLAG)) */ a = p_aodp*tempa*tempa; e = tle->eo-tempe; /* A highly arbitrary lower limit on e, of 1e-6: */ if( e < ECC_EPS) e = ECC_EPS; xl = xmp+omega+xnode+p_xnodp*templ; if( tempa < 0.) /* force negative a, to indicate error condition */ a = -a; return( sxpx_posn_vel( xnode, a, e, p_cosio, p_sinio, tle->xincl, omega, xl, pos, vel)); } /*SGP4*/
void DLL_FUNC SDP4( const double tsince, const tle_t *tle, const double *params, double *pos, double *vel) { double a, tempa, tempe, templ, tsq, xl, xmam, xmdf, xnoddf; /* Update for secular gravity and atmospheric drag */ xmdf = tle->xmo+deep_arg->xmdot*tsince; deep_arg->omgadf = tle->omegao+deep_arg->omgdot*tsince; xnoddf = tle->xnodeo+deep_arg->xnodot*tsince; tsq = tsince*tsince; deep_arg->xnode = xnoddf+xnodcf*tsq; tempa = 1-c1*tsince; tempe = tle->bstar*c4*tsince; templ = t2cof*tsq; deep_arg->xn = deep_arg->xnodp; /* Update for deep-space secular effects */ deep_arg->xll = xmdf; deep_arg->t = tsince; Deep_dpsec( tle, deep_arg); xmdf = deep_arg->xll; a = pow(xke/deep_arg->xn,two_thirds)*tempa*tempa; deep_arg->em = deep_arg->em-tempe; xmam = xmdf+deep_arg->xnodp*templ; /* Update for deep-space periodic effects */ deep_arg->xll = xmam; Deep_dpper( deep_arg); xmam = deep_arg->xll; xl = xmam + deep_arg->omgadf + deep_arg->xnode; sxpx_posn_vel( deep_arg->xnode, a, deep_arg->em, params, deep_arg->cosio, deep_arg->sinio, deep_arg->xinc, deep_arg->omgadf, xl, pos, vel); } /* SDP4 */