Stellarium 0.14.3
sgp4unit.h
1 #ifndef _sgp4unit_
2 #define _sgp4unit_
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 <math.h>
48 #include <stdio.h>
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
96  (
97  gravconsttype whichconst, char opsmode, const int satn, const double epoch,
98  const double xbstar, const double xecco, const double xargpo,
99  const double xinclo, const double xmo, const double xno,
100  const double xnodeo, elsetrec& satrec
101  );
102 
103 bool sgp4
104  (
105  gravconsttype whichconst, elsetrec& satrec, double tsince,
106  double r[3], double v[3]
107  );
108 
109 double gstime
110  (
111  double jdut1
112  );
113 
114 void getgravconst
115  (
116  gravconsttype whichconst,
117  double& tumin,
118  double& mu,
119  double& radiusearthkm,
120  double& xke,
121  double& j2,
122  double& j3,
123  double& j4,
124  double& j3oj2
125  );
126 
127 #endif
128