#ifndef _sgp4unit_ #define _sgp4unit_ /* ---------------------------------------------------------------- * * sgp4unit.h * * this file contains the sgp4 procedures for analytical propagation * of a satellite. the code was originally released in the 1980 and 1986 * spacetrack papers. a detailed discussion of the theory and history * may be found in the 2006 aiaa paper by vallado, crawford, hujsak, * and kelso. * * companion code for * fundamentals of astrodynamics and applications * 2007 * by david vallado * * (w) 719-573-2600, email dvallado@agi.com * * current : * 30 Dec 11 david vallado * consolidate updated code version * 30 Aug 10 david vallado * delete unused variables in initl * replace pow inetger 2, 3 with multiplies for speed * changes : * 3 Nov 08 david vallado * put returns in for error codes * 29 sep 08 david vallado * fix atime for faster operation in dspace * add operationmode for afspc (a) or improved (i) * performance mode * 20 apr 07 david vallado * misc fixes for constants * 11 aug 06 david vallado * chg lyddane choice back to strn3, constants, misc doc * 15 dec 05 david vallado * misc fixes * 26 jul 05 david vallado * fixes for paper * note that each fix is preceded by a * comment with "sgp4fix" and an explanation of * what was changed * 10 aug 04 david vallado * 2nd printing baseline working * 14 may 01 david vallado * 2nd edition baseline * 80 norad * original baseline * ---------------------------------------------------------------- */ #include #include #define SGP4Version "SGP4 Version 2011-12-30" #define pi 3.14159265358979323846 // -------------------------- structure declarations ---------------------------- typedef enum { wgs72old, wgs72, wgs84 } gravconsttype; typedef struct elsetrec { long int satnum; int epochyr, epochtynumrev; int error; char operationmode; char init, method; /* Near Earth */ int isimp; double aycof , con41 , cc1 , cc4 , cc5 , d2 , d3 , d4 , delmo , eta , argpdot, omgcof , sinmao , t , t2cof, t3cof , t4cof , t5cof , x1mth2 , x7thm1 , mdot , nodedot, xlcof , xmcof , nodecf; /* Deep Space */ int irez; double d2201 , d2211 , d3210 , d3222 , d4410 , d4422 , d5220 , d5232 , d5421 , d5433 , dedt , del1 , del2 , del3 , didt , dmdt , dnodt , domdt , e3 , ee2 , peo , pgho , pho , pinco , plo , se2 , se3 , sgh2 , sgh3 , sgh4 , sh2 , sh3 , si2 , si3 , sl2 , sl3 , sl4 , gsto , xfact , xgh2 , xgh3 , xgh4 , xh2 , xh3 , xi2 , xi3 , xl2 , xl3 , xl4 , xlamo , zmol , zmos , atime , xli , xni; double a , altp , alta , epochdays, jdsatepoch , nddot , ndot , bstar , rcse , inclo , nodeo , ecco , argpo , mo , no; } elsetrec; // --------------------------- function declarations ---------------------------- bool sgp4init ( gravconsttype whichconst, char opsmode, const int satn, const double epoch, const double xbstar, const double xecco, const double xargpo, const double xinclo, const double xmo, const double xno, const double xnodeo, elsetrec& satrec ); bool sgp4 ( gravconsttype whichconst, elsetrec& satrec, double tsince, double r[3], double v[3] ); double gstime ( double jdut1 ); void getgravconst ( gravconsttype whichconst, double& tumin, double& mu, double& radiusearthkm, double& xke, double& j2, double& j3, double& j4, double& j3oj2 ); #endif