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