1 #ifndef SGP4UNIT_H 2 #define SGP4UNIT_H 3 /* ---------------------------------------------------------------- 4 * 5 * sgp4unit.h 6 * 7 * this file contains the sgp4 procedures for analytical propagation 8 * of a satellite. the code was originally released in the 1980 and 1986 9 * spacetrack papers. a detailed discussion of the theory and history 10 * may be found in the 2006 aiaa paper by vallado, crawford, hujsak, 11 * and kelso. 12 * 13 * companion code for 14 * fundamentals of astrodynamics and applications 15 * 2007 16 * by david vallado 17 * 18 * (w) 719-573-2600, email dvallado@agi.com 19 * 20 * current : 21 * 3 Nov 08 david vallado 22 * put returns in for error codes 23 * changes : 24 * 29 sep 08 david vallado 25 * fix atime for faster operation in dspace 26 * add operationmode for afspc (a) or improved (i) 27 * performance mode 28 * 20 apr 07 david vallado 29 * misc fixes for constants 30 * 11 aug 06 david vallado 31 * chg lyddane choice back to strn3, constants, misc doc 32 * 15 dec 05 david vallado 33 * misc fixes 34 * 26 jul 05 david vallado 35 * fixes for paper 36 * note that each fix is preceded by a 37 * comment with "sgp4fix" and an explanation of 38 * what was changed 39 * 10 aug 04 david vallado 40 * 2nd printing baseline working 41 * 14 may 01 david vallado 42 * 2nd edition baseline 43 * 80 norad 44 * original baseline 45 * ---------------------------------------------------------------- */ 46 47 #include <cmath> 48 #include <cstdio> 49 #define SGP4Version "SGP4 Version 2008-11-03" 50 51 #ifndef M_PI 52 #define M_PI 3.14159265358979323846 53 #endif 54 55 // -------------------------- structure declarations ---------------------------- 56 typedef enum 57 { 58 wgs72old, 59 wgs72, 60 wgs84 61 } gravconsttype; 62 63 typedef struct elsetrec 64 { 65 long int satnum; 66 int epochyr; //, epochtynumrev; 67 int error; 68 char operationmode; 69 char init, method; 70 71 /* Near Earth */ 72 int isimp; 73 double aycof , con41 , cc1 , cc4 , cc5 , d2 , d3 , d4 , 74 delmo , eta , argpdot, omgcof , sinmao , t , t2cof, t3cof , 75 t4cof , t5cof , x1mth2 , x7thm1 , mdot , nodedot, xlcof , xmcof , 76 nodecf; 77 78 /* Deep Space */ 79 int irez; 80 double d2201 , d2211 , d3210 , d3222 , d4410 , d4422 , d5220 , d5232 , 81 d5421 , d5433 , dedt , del1 , del2 , del3 , didt , dmdt , 82 dnodt , domdt , e3 , ee2 , peo , pgho , pho , pinco , 83 plo , se2 , se3 , sgh2 , sgh3 , sgh4 , sh2 , sh3 , 84 si2 , si3 , sl2 , sl3 , sl4 , gsto , xfact , xgh2 , 85 xgh3 , xgh4 , xh2 , xh3 , xi2 , xi3 , xl2 , xl3 , 86 xl4 , xlamo , zmol , zmos , atime , xli , xni; 87 88 double a , altp , alta , epochdays, jdsatepoch , nddot , ndot , 89 bstar , /*rcse ,*/ inclo , nodeo , ecco , argpo , mo , 90 no; 91 } elsetrec; 92 93 94 // --------------------------- function declarations ---------------------------- 95 bool sgp4init(gravconsttype whichconst, char opsmode, const int satn, const double epoch, 96 const double xbstar, const double xecco, const double xargpo, 97 const double xinclo, const double xmo, const double xno, 98 const double xnodeo, elsetrec& satrec); 99 100 bool sgp4(gravconsttype whichconst, elsetrec& satrec, double tsince, 101 double r[3], double v[3]); 102 103 double gstime(double jdut1); 104 105 void getgravconst(gravconsttype whichconst, double& tumin, double& mu, double& radiusearthkm, 106 double& xke, double& j2, double& j3, double& j4, double& j3oj2); 107 108 #endif // SGP4UNIT_H 109 110