1 | #include <stdlib.h>
|
---|
2 | #include <math.h>
|
---|
3 |
|
---|
4 | #include "deepconst.h"
|
---|
5 | #include "satspec.h"
|
---|
6 |
|
---|
7 | /* * DEEP SPACE 31 OCT 80 */
|
---|
8 | /* SUBROUTINE DEEP */
|
---|
9 | /* COMMON/E1/XMO,XNODEO,OMEGAO,EO,XINCL,XNO,XNDT2O, */
|
---|
10 | /* 1 XNDD6O,BSTAR,X,Y,Z,XDOT,YDOT,ZDOT,EPOCH,DS50 */
|
---|
11 | /* COMMON/C1/CK2,CK4,E6A,QOMS2T,S,TOTHRD, */
|
---|
12 | /* 1 XJ3,XKE,XKMPER,XMNPDA,AE */
|
---|
13 | /* COMMON/C2/DE2RA,PI,PIO2,TWOPI,X3PIO2 */
|
---|
14 | /* DOUBLE PRECISION EPOCH, DS50 */
|
---|
15 | /* DOUBLE PRECISION */
|
---|
16 | /* * DAY,PREEP,XNODCE,ATIME,DELT,SAVTSN,STEP2,STEPN,STEPP */
|
---|
17 | /* DATA ZNS, C1SS, ZES/ */
|
---|
18 | /* A 1.19459E-5, 2.9864797E-6, .01675/ */
|
---|
19 | /* DATA ZNL, C1L, ZEL/ */
|
---|
20 | /* A 1.5835218E-4, 4.7968065E-7, .05490/ */
|
---|
21 | /* DATA ZCOSIS, ZSINIS, ZSINGS/ */
|
---|
22 | /* A .91744867, .39785416, -.98088458/ */
|
---|
23 | /* DATA ZCOSGS, ZCOSHS, ZSINHS/ */
|
---|
24 | /* A .1945905, 1.0, 0.0/ */
|
---|
25 | /* DATA Q22,Q31,Q33/1.7891679E-6,2.1460748E-6,2.2123015E-7/ */
|
---|
26 | /* DATA G22,G32/5.7686396,0.95240898/ */
|
---|
27 | /* DATA G44,G52/1.8014998,1.0508330/ */
|
---|
28 | /* DATA G54/4.4108898/ */
|
---|
29 | /* DATA ROOT22,ROOT32/1.7891679E-6,3.7393792E-7/ */
|
---|
30 | /* DATA ROOT44,ROOT52/7.3636953E-9,1.1428639E-7/ */
|
---|
31 | /* DATA ROOT54/2.1765803E-9/ */
|
---|
32 | /* DATA THDT/4.3752691E-3/ */
|
---|
33 |
|
---|
34 | #define XMO (sat->elem->se_XMO)
|
---|
35 | #define XNODEO (sat->elem->se_XNODEO)
|
---|
36 | #define OMEGAO (sat->elem->se_OMEGAO)
|
---|
37 | #define EO (sat->elem->se_EO)
|
---|
38 | #define XINCL (sat->elem->se_XINCL)
|
---|
39 | #define XNO (sat->elem->se_XNO)
|
---|
40 | #define XNDT20 (sat->elem->se_XNDT20)
|
---|
41 | #define XNDD60 (sat->elem->se_XNDD60)
|
---|
42 | #define BSTAR (sat->elem->se_BSTAR)
|
---|
43 | #define EPOCH (sat->elem->se_EPOCH)
|
---|
44 |
|
---|
45 | #define ZNS (1.19459E-5)
|
---|
46 | #define C1SS (2.9864797E-6)
|
---|
47 | #define ZES (.01675)
|
---|
48 | #define ZNL (1.5835218E-4)
|
---|
49 | #define C1L (4.7968065E-7)
|
---|
50 | #define ZEL (.05490)
|
---|
51 | #define ZCOSIS (.91744867)
|
---|
52 | #define ZSINIS (.39785416)
|
---|
53 | #define ZSINGS (-.98088458)
|
---|
54 | #define ZCOSGS (.1945905)
|
---|
55 | #define ZCOSHS (1.0)
|
---|
56 | #define ZSINHS (0.0)
|
---|
57 |
|
---|
58 | #define Q22 (1.7891679E-6)
|
---|
59 | #define Q31 (2.1460748E-6)
|
---|
60 | #define Q33 (2.2123015E-7)
|
---|
61 | #define G22 (5.7686396)
|
---|
62 | #define G32 (0.95240898)
|
---|
63 | #define G44 (1.8014998)
|
---|
64 | #define G52 (1.0508330)
|
---|
65 | #define G54 (4.4108898)
|
---|
66 | #define ROOT22 (1.7891679E-6)
|
---|
67 | #define ROOT32 (3.7393792E-7)
|
---|
68 | #define ROOT44 (7.3636953E-9)
|
---|
69 | #define ROOT52 (1.1428639E-7)
|
---|
70 | #define ROOT54 (2.1765803E-9)
|
---|
71 | #define THDT (4.3752691E-3)
|
---|
72 |
|
---|
73 | #define IRESFL (sat->deep->deep_flags.IRESFL)
|
---|
74 | #define ISYNFL (sat->deep->deep_flags.ISYNFL)
|
---|
75 |
|
---|
76 | #define s_SINIQ (sat->deep->deep_s_SINIQ)
|
---|
77 | #define s_COSIQ (sat->deep->deep_s_COSIQ)
|
---|
78 | #define s_OMGDT (sat->deep->deep_s_OMGDT)
|
---|
79 | #define ATIME (sat->deep->deep_ATIME)
|
---|
80 | #define D2201 (sat->deep->deep_D2201)
|
---|
81 | #define D2211 (sat->deep->deep_D2211)
|
---|
82 | #define D3210 (sat->deep->deep_D3210)
|
---|
83 | #define D3222 (sat->deep->deep_D3222)
|
---|
84 | #define D4410 (sat->deep->deep_D4410)
|
---|
85 | #define D4422 (sat->deep->deep_D4422)
|
---|
86 | #define D5220 (sat->deep->deep_D5220)
|
---|
87 | #define D5232 (sat->deep->deep_D5232)
|
---|
88 | #define D5421 (sat->deep->deep_D5421)
|
---|
89 | #define D5433 (sat->deep->deep_D5433)
|
---|
90 | #define DEL1 (sat->deep->deep_DEL1)
|
---|
91 | #define DEL2 (sat->deep->deep_DEL2)
|
---|
92 | #define DEL3 (sat->deep->deep_DEL3)
|
---|
93 | #define E3 (sat->deep->deep_E3)
|
---|
94 | #define EE2 (sat->deep->deep_EE2)
|
---|
95 | #define FASX2 (sat->deep->deep_FASX2)
|
---|
96 | #define FASX4 (sat->deep->deep_FASX4)
|
---|
97 | #define FASX6 (sat->deep->deep_FASX6)
|
---|
98 | #define OMEGAQ (sat->deep->deep_OMEGAQ)
|
---|
99 | #define PE (sat->deep->deep_PE)
|
---|
100 | #define PINC (sat->deep->deep_PINC)
|
---|
101 | #define PL (sat->deep->deep_PL)
|
---|
102 | #define SAVTSN (sat->deep->deep_SAVTSN)
|
---|
103 | #define SE2 (sat->deep->deep_SE2)
|
---|
104 | #define SE3 (sat->deep->deep_SE3)
|
---|
105 | #define SGH2 (sat->deep->deep_SGH2)
|
---|
106 | #define SGH3 (sat->deep->deep_SGH3)
|
---|
107 | #define SGH4 (sat->deep->deep_SGH4)
|
---|
108 | #define SGHL (sat->deep->deep_SGHL)
|
---|
109 | #define SGHS (sat->deep->deep_SGHS)
|
---|
110 | #define SH2 (sat->deep->deep_SH2)
|
---|
111 | #define SH3 (sat->deep->deep_SH3)
|
---|
112 | #define SHS (sat->deep->deep_SHS)
|
---|
113 | #define SHL (sat->deep->deep_SHL)
|
---|
114 | #define SI2 (sat->deep->deep_SI2)
|
---|
115 | #define SI3 (sat->deep->deep_SI3)
|
---|
116 | #define SL2 (sat->deep->deep_SL2)
|
---|
117 | #define SL3 (sat->deep->deep_SL3)
|
---|
118 | #define SL4 (sat->deep->deep_SL4)
|
---|
119 | #define SSE (sat->deep->deep_SSE)
|
---|
120 | #define SSG (sat->deep->deep_SSG)
|
---|
121 | #define SSH (sat->deep->deep_SSH)
|
---|
122 | #define SSI (sat->deep->deep_SSI)
|
---|
123 | #define SSL (sat->deep->deep_SSL)
|
---|
124 | #define STEP2 (sat->deep->deep_STEP2)
|
---|
125 | #define STEPN (sat->deep->deep_STEPN)
|
---|
126 | #define STEPP (sat->deep->deep_STEPP)
|
---|
127 | #define THGR (sat->deep->deep_THGR)
|
---|
128 | #define XFACT (sat->deep->deep_XFACT)
|
---|
129 | #define XGH2 (sat->deep->deep_XGH2)
|
---|
130 | #define XGH3 (sat->deep->deep_XGH3)
|
---|
131 | #define XGH4 (sat->deep->deep_XGH4)
|
---|
132 | #define XH2 (sat->deep->deep_XH2)
|
---|
133 | #define XH3 (sat->deep->deep_XH3)
|
---|
134 | #define XI2 (sat->deep->deep_XI2)
|
---|
135 | #define XI3 (sat->deep->deep_XI3)
|
---|
136 | #define XL2 (sat->deep->deep_XL2)
|
---|
137 | #define XL3 (sat->deep->deep_XL3)
|
---|
138 | #define XL4 (sat->deep->deep_XL4)
|
---|
139 | #define XLAMO (sat->deep->deep_XLAMO)
|
---|
140 | #define XLI (sat->deep->deep_XLI)
|
---|
141 | #define XNI (sat->deep->deep_XNI)
|
---|
142 | #define XNQ (sat->deep->deep_XNQ)
|
---|
143 | #define XQNCL (sat->deep->deep_XQNCL)
|
---|
144 | #define ZMOL (sat->deep->deep_ZMOL)
|
---|
145 | #define ZMOS (sat->deep->deep_ZMOS)
|
---|
146 |
|
---|
147 | /* * ENTRANCE FOR DEEP SPACE INITIALIZATION */
|
---|
148 |
|
---|
149 | /* ENTRY DPINIT(EQSQ,SINIQ,COSIQ,RTEQSQ,AO,COSQ2,SINOMO,COSOMO, */
|
---|
150 | /* 1 BSQ,XLLDOT,OMGDT,XNODOT,XNODP) */
|
---|
151 |
|
---|
152 | void
|
---|
153 | dpinit(SatData *sat, double EQSQ, double SINIQ, double COSIQ,
|
---|
154 | double RTEQSQ, double AO, double COSQ2, double SINOMO,
|
---|
155 | double COSOMO, double BSQ, double XLLDOT, double OMGDT,
|
---|
156 | double XNODOT, double XNODP)
|
---|
157 | {
|
---|
158 | double A1, A10, A2, A3, A4, A5, A6, A7, A8, A9, AINV2, AQNV, BFACT,
|
---|
159 | C, CC, COSQ, CTEM, DAY, DS50, EOC, EQ, F220, F221, F311, F321, F322,
|
---|
160 | F330, F441, F442, F522, F523, F542, F543, G200, G201, G211, G300,
|
---|
161 | G310, G322, G410, G422, G520, G521, G532, G533, GAM, PREEP, S1, S2,
|
---|
162 | S3, S4, S5, S6, S7, SE, SGH, SH, SI, SINI2, SINQ, SL, STEM, TEMP,
|
---|
163 | TEMP1, X1, X2, X3, X4, X5, X6, X7, X8, XMAO, XNO2, XNODCE, XNOI,
|
---|
164 | XPIDOT, Z1, Z11, Z12, Z13, Z2, Z21, Z22, Z23, Z3, Z31, Z32, Z33,
|
---|
165 | ZCOSG, ZCOSGL, ZCOSH, ZCOSHL, ZCOSI, ZCOSIL, ZE, ZMO, ZN, ZSING,
|
---|
166 | ZSINGL, ZSINH, ZSINHL, ZSINI, ZSINIL, ZX, ZY;
|
---|
167 |
|
---|
168 | int c;
|
---|
169 | #if 0
|
---|
170 | A1=A10=A2=A3=A4=A5=A6=A7=A8=A9=AINV2=AQNV=BFACT = signaling_nan();
|
---|
171 | C=CC=COSQ=CTEM=DAY=DS50=EOC=EQ=F220=F221=F311=F321=F322 = signaling_nan();
|
---|
172 | F330=F441=F442=F522=F523=F542=F543=G200=G201=G211=G300 = signaling_nan();
|
---|
173 | G310=G322=G410=G422=G520=G521=G532=G533=GAM=PREEP=S1=S2 = signaling_nan();
|
---|
174 | S3=S4=S5=S6=S7=SE=SGH=SH=SI=SINI2=SINQ=SL=STEM=TEMP = signaling_nan();
|
---|
175 | TEMP1=X1=X2=X3=X4=X5=X6=X7=X8=XMAO=XNO2=XNODCE=XNOI = signaling_nan();
|
---|
176 | XPIDOT=Z1=Z11=Z12=Z13=Z2=Z21=Z22=Z23=Z3=Z31=Z32=Z33 = signaling_nan();
|
---|
177 | ZCOSG=ZCOSGL=ZCOSH=ZCOSHL=ZCOSI=ZCOSIL=ZE=ZMO=ZN=ZSING = signaling_nan();
|
---|
178 | ZSINGL=ZSINH=ZSINHL=ZSINI=ZSINIL=ZX=ZY = signaling_nan();
|
---|
179 | #endif
|
---|
180 | if(!sat->deep)
|
---|
181 | sat->deep = (struct deep_data *) malloc(sizeof(struct deep_data));
|
---|
182 | else
|
---|
183 | return;
|
---|
184 |
|
---|
185 | /* init_deep(sat->deep); */
|
---|
186 | PREEP = 0.0;
|
---|
187 |
|
---|
188 | ZCOSGL = ZCOSHL = ZCOSIL = ZSINGL = ZSINHL = ZSINIL = 0.0;
|
---|
189 |
|
---|
190 | /* Save some of the arguments, for use by dpsec() and dpper() */
|
---|
191 | s_SINIQ = SINIQ;
|
---|
192 | s_COSIQ = COSIQ;
|
---|
193 | s_OMGDT = OMGDT;
|
---|
194 |
|
---|
195 | THGR = thetag(EPOCH, &DS50);
|
---|
196 |
|
---|
197 | EQ = EO;
|
---|
198 | XNQ = XNODP;
|
---|
199 | AQNV = 1.0/AO;
|
---|
200 | XQNCL = XINCL;
|
---|
201 | XMAO = XMO;
|
---|
202 | XPIDOT = OMGDT + XNODOT;
|
---|
203 | SINQ = sin(XNODEO);
|
---|
204 | COSQ = cos(XNODEO);
|
---|
205 | OMEGAQ = OMEGAO;
|
---|
206 |
|
---|
207 | /* INITIALIZE LUNAR SOLAR TERMS */
|
---|
208 |
|
---|
209 | DAY = DS50 + 18261.5;
|
---|
210 |
|
---|
211 | if(DAY != PREEP) {
|
---|
212 | PREEP = DAY;
|
---|
213 | XNODCE = 4.5236020 - 9.2422029E-4 * DAY;
|
---|
214 | STEM = sin(XNODCE);
|
---|
215 | CTEM = cos(XNODCE);
|
---|
216 | ZCOSIL = .91375164 - .03568096 * CTEM;
|
---|
217 | ZSINIL = sqrt(1.0 - ZCOSIL * ZCOSIL);
|
---|
218 | ZSINHL = .089683511 * STEM / ZSINIL;
|
---|
219 | ZCOSHL = sqrt(1.0 - ZSINHL * ZSINHL);
|
---|
220 | C = 4.7199672 + .22997150 * DAY;
|
---|
221 | GAM = 5.8351514 + .0019443680 * DAY;
|
---|
222 | ZMOL = fmod(C-GAM, TWOPI);
|
---|
223 | ZX = .39785416 * STEM / ZSINIL;
|
---|
224 | ZY = ZCOSHL * CTEM + 0.91744867 * ZSINHL * STEM;
|
---|
225 | ZX = actan(ZX, ZY);
|
---|
226 | ZX = GAM + ZX - XNODCE;
|
---|
227 | ZCOSGL = cos(ZX);
|
---|
228 | ZSINGL = sin(ZX);
|
---|
229 | ZMOS = 6.2565837 + .017201977 * DAY;
|
---|
230 | ZMOS = fmod(ZMOS, TWOPI);
|
---|
231 | }
|
---|
232 |
|
---|
233 | /* DO SOLAR TERMS */
|
---|
234 |
|
---|
235 | SAVTSN = 1.0E20;
|
---|
236 | ZCOSG = ZCOSGS;
|
---|
237 | ZSING = ZSINGS;
|
---|
238 | ZCOSI = ZCOSIS;
|
---|
239 | ZSINI = ZSINIS;
|
---|
240 | ZCOSH = COSQ;
|
---|
241 | ZSINH = SINQ;
|
---|
242 | CC = C1SS;
|
---|
243 | ZN = ZNS;
|
---|
244 | ZE = ZES;
|
---|
245 | ZMO = ZMOS;
|
---|
246 | XNOI = 1.0 / XNQ;
|
---|
247 |
|
---|
248 | for(c = 0; c < 2; c++) {
|
---|
249 | A1 = ZCOSG * ZCOSH + ZSING * ZCOSI * ZSINH;
|
---|
250 | A3 = -ZSING * ZCOSH + ZCOSG * ZCOSI * ZSINH;
|
---|
251 | A7 = -ZCOSG * ZSINH + ZSING * ZCOSI * ZCOSH;
|
---|
252 | A8 = ZSING * ZSINI;
|
---|
253 | A9 = ZSING * ZSINH + ZCOSG * ZCOSI * ZCOSH;
|
---|
254 | A10 = ZCOSG * ZSINI;
|
---|
255 | A2 = COSIQ * A7 + SINIQ * A8;
|
---|
256 | A4 = COSIQ * A9 + SINIQ * A10;
|
---|
257 | A5 = - SINIQ * A7 + COSIQ * A8;
|
---|
258 | A6 = - SINIQ * A9 + COSIQ * A10;
|
---|
259 |
|
---|
260 | X1 = A1 * COSOMO + A2 * SINOMO;
|
---|
261 | X2 = A3 * COSOMO + A4 * SINOMO;
|
---|
262 | X3 = - A1 * SINOMO + A2 * COSOMO;
|
---|
263 | X4 = - A3 * SINOMO + A4 * COSOMO;
|
---|
264 | X5 = A5 * SINOMO;
|
---|
265 | X6 = A6 * SINOMO;
|
---|
266 | X7 = A5 * COSOMO;
|
---|
267 | X8 = A6 * COSOMO;
|
---|
268 |
|
---|
269 | Z31 = 12.0 * X1 * X1 -3.0 * X3 * X3;
|
---|
270 | Z32 = 24.0 * X1 * X2 -6.0 * X3 * X4;
|
---|
271 | Z33 = 12.0 * X2 * X2 -3.0 * X4 * X4;
|
---|
272 | Z1 = 3.0 * (A1 * A1 + A2 * A2) + Z31 * EQSQ;
|
---|
273 | Z2 = 6.0 * (A1 * A3 + A2 * A4) + Z32 * EQSQ;
|
---|
274 | Z3 = 3.0 * (A3 * A3 + A4 * A4) + Z33 * EQSQ;
|
---|
275 | Z11 = -6.0 * A1 * A5 + EQSQ * (-24.0 * X1 * X7 - 6.0 * X3 * X5);
|
---|
276 |
|
---|
277 | Z12 = -6.0 * (A1 * A6 + A3 * A5) +
|
---|
278 | EQSQ * (-24.0 * (X2 * X7 + X1 * X8) - 6.0 * (X3 * X6 + X4 * X5));
|
---|
279 |
|
---|
280 | Z13 = -6.0 * A3 * A6 + EQSQ * (-24.0 * X2 * X8 - 6.0 * X4 * X6);
|
---|
281 | Z21 = 6.0 * A2 * A5 + EQSQ * (24.0 * X1 * X5 - 6.0 * X3 * X7);
|
---|
282 |
|
---|
283 | Z22 = 6.0 * (A4 * A5 + A2 * A6) +
|
---|
284 | EQSQ * (24.0 * (X2 * X5 + X1 * X6) - 6.0 * (X4 * X7 + X3 * X8));
|
---|
285 |
|
---|
286 | Z23 = 6.0 * A4 * A6 + EQSQ * (24.0 * X2 * X6 - 6.0 * X4 * X8);
|
---|
287 | Z1 = Z1 + Z1 + BSQ * Z31;
|
---|
288 | Z2 = Z2 + Z2 + BSQ * Z32;
|
---|
289 | Z3 = Z3 + Z3 + BSQ * Z33;
|
---|
290 | S3 = CC * XNOI;
|
---|
291 | S2 = -.5 * S3 / RTEQSQ;
|
---|
292 | S4 = S3 * RTEQSQ;
|
---|
293 | S1 = -15.0 * EQ * S4;
|
---|
294 | S5 = X1 * X3 + X2 * X4;
|
---|
295 | S6 = X2 * X3 + X1 * X4;
|
---|
296 | S7 = X2 * X4 - X1 * X3;
|
---|
297 | SE = S1 * ZN * S5;
|
---|
298 | SI = S2 * ZN * (Z11 + Z13);
|
---|
299 | SL = -ZN * S3 * (Z1 + Z3 - 14.0 - 6.0 * EQSQ);
|
---|
300 | SGH = S4 * ZN * (Z31 + Z33 - 6.0);
|
---|
301 | SH = -ZN * S2 * (Z21 + Z23);
|
---|
302 |
|
---|
303 | if(XQNCL < 5.2359877E-2)
|
---|
304 | SH = 0.0;
|
---|
305 |
|
---|
306 | EE2 = 2.0 * S1 * S6;
|
---|
307 | E3 = 2.0 * S1 * S7;
|
---|
308 | XI2 = 2.0 * S2 * Z12;
|
---|
309 | XI3 = 2.0 * S2 * (Z13 - Z11);
|
---|
310 | XL2 = -2.0 * S3 * Z2;
|
---|
311 | XL3 = -2.0 * S3 * (Z3 - Z1);
|
---|
312 | XL4 = -2.0 * S3 * (-21.0 - 9.0 * EQSQ) * ZE;
|
---|
313 | XGH2 = 2.0 * S4 * Z32;
|
---|
314 | XGH3 = 2.0 * S4 * (Z33 - Z31);
|
---|
315 | XGH4 = -18.0 * S4 * ZE;
|
---|
316 | XH2 = -2.0 * S2 * Z22;
|
---|
317 | XH3 = -2.0 * S2 * (Z23 - Z21);
|
---|
318 |
|
---|
319 | if(c == 0) {
|
---|
320 | /* DO LUNAR TERMS */
|
---|
321 | SSE = SE;
|
---|
322 | SSI = SI;
|
---|
323 | SSL = SL;
|
---|
324 | SSH = SH / SINIQ;
|
---|
325 | SSG = SGH - COSIQ * SSH;
|
---|
326 | SE2 = EE2;
|
---|
327 | SI2 = XI2;
|
---|
328 | SL2 = XL2;
|
---|
329 | SGH2 = XGH2;
|
---|
330 | SH2 = XH2;
|
---|
331 | SE3 = E3;
|
---|
332 | SI3 = XI3;
|
---|
333 | SL3 = XL3;
|
---|
334 | SGH3 = XGH3;
|
---|
335 | SH3 = XH3;
|
---|
336 | SL4 = XL4;
|
---|
337 | SGH4 = XGH4;
|
---|
338 |
|
---|
339 | ZCOSG = ZCOSGL;
|
---|
340 | ZSING = ZSINGL;
|
---|
341 | ZCOSI = ZCOSIL;
|
---|
342 | ZSINI = ZSINIL;
|
---|
343 | ZCOSH = ZCOSHL * COSQ + ZSINHL * SINQ;
|
---|
344 | ZSINH = SINQ * ZCOSHL - COSQ * ZSINHL;
|
---|
345 | ZN = ZNL;
|
---|
346 | CC = C1L;
|
---|
347 | ZE = ZEL;
|
---|
348 | ZMO = ZMOL;
|
---|
349 | }
|
---|
350 | }
|
---|
351 |
|
---|
352 | SSE = SSE + SE;
|
---|
353 | SSI = SSI + SI;
|
---|
354 | SSL = SSL + SL;
|
---|
355 | SSG = SSG + SGH - COSIQ / SINIQ * SH;
|
---|
356 | SSH = SSH + SH / SINIQ;
|
---|
357 |
|
---|
358 | /* GEOPOTENTIAL RESONANCE INITIALIZATION FOR 12 HOUR ORBITS */
|
---|
359 |
|
---|
360 | IRESFL = 0;
|
---|
361 | ISYNFL = 0;
|
---|
362 |
|
---|
363 | if(XNQ <= .0034906585 || XNQ >= .0052359877) {
|
---|
364 |
|
---|
365 | if(XNQ < (8.26E-3) || XNQ > (9.24E-3))
|
---|
366 | return;
|
---|
367 |
|
---|
368 | if(EQ < 0.5)
|
---|
369 | return;
|
---|
370 |
|
---|
371 | IRESFL = 1;
|
---|
372 | EOC = EQ * EQSQ;
|
---|
373 | G201 = -.306 - (EQ - .64) * .440;
|
---|
374 |
|
---|
375 | if(EQ <= (.65)) {
|
---|
376 | G211 = 3.616 - 13.247 * EQ + 16.290 * EQSQ;
|
---|
377 | G310 = -19.302 + 117.390 * EQ - 228.419 * EQSQ + 156.591 * EOC;
|
---|
378 | G322 = -18.9068 + 109.7927 * EQ - 214.6334 * EQSQ + 146.5816 * EOC;
|
---|
379 | G410 = -41.122 + 242.694 * EQ - 471.094 * EQSQ + 313.953 * EOC;
|
---|
380 | G422 = -146.407 + 841.880 * EQ - 1629.014 * EQSQ + 1083.435 * EOC;
|
---|
381 | G520 = -532.114 + 3017.977 * EQ - 5740 * EQSQ + 3708.276 * EOC;
|
---|
382 | } else {
|
---|
383 | G211 = -72.099 + 331.819 * EQ - 508.738 * EQSQ + 266.724 * EOC;
|
---|
384 | G310 = -346.844 + 1582.851 * EQ - 2415.925 * EQSQ + 1246.113 * EOC;
|
---|
385 | G322 = -342.585 + 1554.908 * EQ - 2366.899 * EQSQ + 1215.972 * EOC;
|
---|
386 | G410 = -1052.797 + 4758.686 * EQ - 7193.992 * EQSQ +
|
---|
387 | 3651.957 * EOC;
|
---|
388 | G422 = -3581.69 + 16178.11 * EQ - 24462.77 * EQSQ + 12422.52 * EOC;
|
---|
389 |
|
---|
390 | if(EQ > (.715))
|
---|
391 | G520 = -5149.66 + 29936.92 * EQ - 54087.36 * EQSQ +
|
---|
392 | 31324.56 * EOC;
|
---|
393 |
|
---|
394 | G520 = 1464.74 - 4664.75 * EQ + 3763.64 * EQSQ;
|
---|
395 | }
|
---|
396 |
|
---|
397 | if(EQ < (.7)) {
|
---|
398 | G533 = -919.2277 + 4988.61 * EQ - 9064.77 * EQSQ + 5542.21 * EOC;
|
---|
399 |
|
---|
400 | G521 = -822.71072 + 4568.6173 * EQ - 8491.4146 * EQSQ +
|
---|
401 | 5337.524 * EOC;
|
---|
402 |
|
---|
403 | G532 = -853.666 + 4690.25 * EQ - 8624.77 * EQSQ + 5341.4 * EOC;
|
---|
404 | } else {
|
---|
405 | G533 = -37995.78 + 161616.52 * EQ - 229838.2 * EQSQ +
|
---|
406 | 109377.94 * EOC;
|
---|
407 |
|
---|
408 | G521 = -51752.104 + 218913.95 * EQ - 309468.16 * EQSQ +
|
---|
409 | 146349.42 * EOC;
|
---|
410 |
|
---|
411 | G532 = -40023.88 + 170470.89 * EQ - 242699.48 * EQSQ +
|
---|
412 | 115605.82 * EOC;
|
---|
413 | }
|
---|
414 |
|
---|
415 | SINI2 = SINIQ * SINIQ;
|
---|
416 | F220 = .75 * (1.0 + 2.0 * COSIQ + COSQ2);
|
---|
417 | F221 = 1.5 * SINI2;
|
---|
418 | F321 = 1.875 * SINIQ * (1.0 - 2.0 * COSIQ - 3.0 * COSQ2);
|
---|
419 | F322 = -1.875 * SINIQ * (1.0 + 2.0 * COSIQ - 3.0 * COSQ2);
|
---|
420 | F441 = 35.0 * SINI2 * F220;
|
---|
421 | F442 = 39.3750 * SINI2 * SINI2;
|
---|
422 |
|
---|
423 | F522 = 9.84375 * SINIQ * (SINI2 * (1.0 - 2.0 * COSIQ - 5.0 * COSQ2) +
|
---|
424 | .33333333 * (-2.0 + 4.0 * COSIQ +
|
---|
425 | 6.0 * COSQ2));
|
---|
426 |
|
---|
427 | F523 = SINIQ * (4.92187512 * SINI2 * (-2.0 - 4.0 * COSIQ +
|
---|
428 | 10.0 * COSQ2) +
|
---|
429 | 6.56250012 * (1.0 +
|
---|
430 | 2.0 * COSIQ -
|
---|
431 | 3.0 * COSQ2));
|
---|
432 |
|
---|
433 | F542 = 29.53125 * SINIQ * (2.0 - 8.0 * COSIQ +
|
---|
434 | COSQ2 * (-12.0 + 8.0 * COSIQ +
|
---|
435 | 10.0 * COSQ2));
|
---|
436 |
|
---|
437 | F543 = 29.53125 * SINIQ * (-2.0 - 8.0 * COSIQ +
|
---|
438 | COSQ2 * (12.0 + 8.0 * COSIQ -
|
---|
439 | 10.0 * COSQ2));
|
---|
440 |
|
---|
441 | XNO2 = XNQ * XNQ;
|
---|
442 | AINV2 = AQNV * AQNV;
|
---|
443 | TEMP1 = 3.0 * XNO2 * AINV2;
|
---|
444 | TEMP = TEMP1 * ROOT22;
|
---|
445 | D2201 = TEMP * F220 * G201;
|
---|
446 | D2211 = TEMP * F221 * G211;
|
---|
447 | TEMP1 = TEMP1 * AQNV;
|
---|
448 | TEMP = TEMP1 * ROOT32;
|
---|
449 | D3210 = TEMP * F321 * G310;
|
---|
450 | D3222 = TEMP * F322 * G322;
|
---|
451 | TEMP1 = TEMP1 * AQNV;
|
---|
452 | TEMP = 2.0 * TEMP1 * ROOT44;
|
---|
453 | D4410 = TEMP * F441 * G410;
|
---|
454 | D4422 = TEMP * F442 * G422;
|
---|
455 | TEMP1 = TEMP1 * AQNV;
|
---|
456 | TEMP = TEMP1 * ROOT52;
|
---|
457 | D5220 = TEMP * F522 * G520;
|
---|
458 | D5232 = TEMP * F523 * G532;
|
---|
459 | TEMP = 2.0 * TEMP1 * ROOT54;
|
---|
460 | D5421 = TEMP * F542* G521;
|
---|
461 | D5433 = TEMP * F543* G533;
|
---|
462 | XLAMO = XMAO + XNODEO + XNODEO - THGR - THGR;
|
---|
463 | BFACT = XLLDOT + XNODOT + XNODOT - THDT - THDT;
|
---|
464 | BFACT = BFACT + SSL + SSH + SSH;
|
---|
465 | } else {
|
---|
466 | /* SYNCHRONOUS RESONANCE TERMS INITIALIZATION */
|
---|
467 |
|
---|
468 | IRESFL = 1;
|
---|
469 | ISYNFL = 1;
|
---|
470 | G200 = 1.0 + EQSQ * (-2.5 + .8125 * EQSQ);
|
---|
471 | G310 = 1.0 + 2.0 * EQSQ;
|
---|
472 | G300 = 1.0 + EQSQ * (-6.0 + 6.60937 * EQSQ);
|
---|
473 | F220 = .75 * (1.0 + COSIQ) * (1.0 + COSIQ);
|
---|
474 | F311 = .9375 * SINIQ * SINIQ * (1.0 + 3.0 * COSIQ) -
|
---|
475 | .75 * (1.0 + COSIQ);
|
---|
476 | F330 = 1.0 + COSIQ;
|
---|
477 | F330 = 1.875 * F330 * F330 * F330;
|
---|
478 | DEL1 = 3.0 * XNQ * XNQ * AQNV * AQNV;
|
---|
479 | DEL2 = 2.0 * DEL1 * F220 * G200 * Q22;
|
---|
480 | DEL3 = 3.0 * DEL1 * F330 * G300 * Q33 * AQNV;
|
---|
481 | DEL1 = DEL1 * F311 * G310 * Q31 * AQNV;
|
---|
482 | FASX2 = .13130908;
|
---|
483 | FASX4 = 2.8843198;
|
---|
484 | FASX6 = .37448087;
|
---|
485 | XLAMO = XMAO + XNODEO + OMEGAO - THGR;
|
---|
486 | BFACT = XLLDOT + XPIDOT - THDT;
|
---|
487 | BFACT = BFACT + SSL + SSG + SSH;
|
---|
488 |
|
---|
489 | }
|
---|
490 |
|
---|
491 | XFACT = BFACT - XNQ;
|
---|
492 |
|
---|
493 | XLI = XLAMO;
|
---|
494 | XNI = XNQ;
|
---|
495 | ATIME = 0.0;
|
---|
496 | STEPP = 720.0;
|
---|
497 | STEPN = -720.0;
|
---|
498 | STEP2 = 259200.0;
|
---|
499 | }
|
---|
500 |
|
---|
501 | /* ENTRANCE FOR DEEP SPACE SECULAR EFFECTS */
|
---|
502 |
|
---|
503 | void
|
---|
504 | dpsec(SatData *sat, double *XLL, double *OMGASM, double *XNODES,
|
---|
505 | double *EM, double *XINC, double *XN, double T)
|
---|
506 | {
|
---|
507 | double DELT, XL, TEMP, XOMI, X2OMI, X2LI, XLDOT;
|
---|
508 | double XNDOT, XNDDT, FT;
|
---|
509 | int state, iret, iretn, done;
|
---|
510 |
|
---|
511 | DELT = XLDOT = XNDOT = XNDDT = FT = 0.0;
|
---|
512 | iret = iretn = 0;
|
---|
513 |
|
---|
514 | #if 0
|
---|
515 | DELT = XL = TEMP = XOMI = X2OMI = X2LI = XLDOT = signaling_nan();
|
---|
516 | XNDOT = XNDDT = FT = signaling_nan();
|
---|
517 | #endif
|
---|
518 |
|
---|
519 | *XLL = *XLL + SSL * T;
|
---|
520 | *OMGASM = *OMGASM + SSG * T;
|
---|
521 | *XNODES = *XNODES + SSH * T;
|
---|
522 | *EM = EO + SSE * T;
|
---|
523 | *XINC = XINCL + SSI * T;
|
---|
524 |
|
---|
525 | if(*XINC < 0.0) {
|
---|
526 | *XINC = -*XINC;
|
---|
527 | *XNODES = *XNODES + PI;
|
---|
528 | *OMGASM = *OMGASM - PI;
|
---|
529 | }
|
---|
530 |
|
---|
531 | if(IRESFL == 0)
|
---|
532 | return;
|
---|
533 |
|
---|
534 | state = 1;
|
---|
535 | done = 0;
|
---|
536 | while(!done) {
|
---|
537 | /* printf("state = %d\n", state); */
|
---|
538 | switch(state) {
|
---|
539 | case 1:
|
---|
540 | /*
|
---|
541 | * Chunk #1
|
---|
542 | */
|
---|
543 | if(ATIME == 0.0 || (T >= 0.0 && ATIME < 0.0) ||
|
---|
544 | (T < 0.0 && ATIME >= 0.0)) {
|
---|
545 | /*
|
---|
546 | * Chunk #10
|
---|
547 | */
|
---|
548 | if(T >= 0.0)
|
---|
549 | DELT = STEPP;
|
---|
550 | else
|
---|
551 | DELT = STEPN;
|
---|
552 |
|
---|
553 | ATIME = 0.0;
|
---|
554 | XNI = XNQ;
|
---|
555 | XLI = XLAMO;
|
---|
556 | state = 4;
|
---|
557 | break;
|
---|
558 | }
|
---|
559 |
|
---|
560 | /* Fall through */
|
---|
561 | case 2:
|
---|
562 | /*
|
---|
563 | * Chunk #2
|
---|
564 | */
|
---|
565 | if(fabs(T) < fabs(ATIME)) {
|
---|
566 | /*
|
---|
567 | * Chunk #2
|
---|
568 | */
|
---|
569 | if(T >= 0.0)
|
---|
570 | DELT = STEPN;
|
---|
571 | else
|
---|
572 | DELT = STEPP;
|
---|
573 |
|
---|
574 | iret = 1;
|
---|
575 | state = 8;
|
---|
576 | break;
|
---|
577 | }
|
---|
578 |
|
---|
579 | /*
|
---|
580 | * Chunk #3
|
---|
581 | */
|
---|
582 | if(T > 0.0)
|
---|
583 | DELT = STEPP;
|
---|
584 | else
|
---|
585 | DELT = STEPN;
|
---|
586 |
|
---|
587 | /* fall through */
|
---|
588 | case 4:
|
---|
589 | /*
|
---|
590 | * Chunk #4
|
---|
591 | */
|
---|
592 | if(fabs(T - ATIME) >= STEPP) {
|
---|
593 | iret = 4;
|
---|
594 | state = 8;
|
---|
595 | } else {
|
---|
596 | /*
|
---|
597 | * Chunk #5
|
---|
598 | */
|
---|
599 | FT = T - ATIME;
|
---|
600 | iretn = 6;
|
---|
601 | state = 7;
|
---|
602 | }
|
---|
603 |
|
---|
604 | break;
|
---|
605 |
|
---|
606 | case 6:
|
---|
607 | /*
|
---|
608 | * Chunk #6
|
---|
609 | */
|
---|
610 | *XN = XNI + XNDOT * FT + XNDDT * FT * FT * 0.5;
|
---|
611 | XL = XLI + XLDOT * FT + XNDOT * FT * FT * 0.5;
|
---|
612 | TEMP = -*XNODES + THGR + T * THDT;
|
---|
613 |
|
---|
614 | if(ISYNFL == 0)
|
---|
615 | *XLL = XL + 2.0 * TEMP;
|
---|
616 | else
|
---|
617 | *XLL = XL - *OMGASM + TEMP;
|
---|
618 |
|
---|
619 | done = 1;
|
---|
620 | break;
|
---|
621 |
|
---|
622 | case 7:
|
---|
623 | /* DOT TERMS CALCULATED */
|
---|
624 |
|
---|
625 | /*
|
---|
626 | * Chunk #7
|
---|
627 | */
|
---|
628 | if(ISYNFL != 0) {
|
---|
629 | XNDOT =
|
---|
630 | DEL1 * sin(XLI - FASX2) +
|
---|
631 | DEL2 * sin(2.0 * (XLI - FASX4)) +
|
---|
632 | DEL3 * sin(3.0 * (XLI - FASX6));
|
---|
633 |
|
---|
634 | XNDDT =
|
---|
635 | DEL1 * cos(XLI - FASX2) +
|
---|
636 | 2.0 * DEL2 * cos(2.0 * (XLI - FASX4)) +
|
---|
637 | 3.0 * DEL3 * cos(3.0 * (XLI - FASX6));
|
---|
638 | } else {
|
---|
639 | XOMI = OMEGAQ + s_OMGDT * ATIME;
|
---|
640 | X2OMI = XOMI + XOMI;
|
---|
641 | X2LI = XLI + XLI;
|
---|
642 | XNDOT = D2201 * sin(X2OMI + XLI - G22) +
|
---|
643 | D2211 * sin(XLI - G22) +
|
---|
644 | D3210 * sin(XOMI + XLI - G32) +
|
---|
645 | D3222 * sin(- XOMI + XLI - G32) +
|
---|
646 | D4410 * sin(X2OMI + X2LI - G44) +
|
---|
647 | D4422 * sin(X2LI - G44) +
|
---|
648 | D5220 * sin(XOMI + XLI - G52) +
|
---|
649 | D5232 * sin(- XOMI + XLI - G52) +
|
---|
650 | D5421 * sin(XOMI + X2LI - G54) +
|
---|
651 | D5433 * sin(- XOMI + X2LI - G54);
|
---|
652 |
|
---|
653 | XNDDT = D2201 * cos(X2OMI + XLI - G22) +
|
---|
654 | D2211 * cos(XLI - G22) +
|
---|
655 | D3210 * cos(XOMI + XLI - G32) +
|
---|
656 | D3222 * cos(- XOMI + XLI - G32) +
|
---|
657 | D5220 * cos(XOMI + XLI - G52) +
|
---|
658 | D5232 * cos(- XOMI + XLI - G52) +
|
---|
659 | 2.*(D4410 * cos(X2OMI + X2LI - G44) +
|
---|
660 | D4422 * cos(X2LI - G44) +
|
---|
661 | D5421 * cos(XOMI + X2LI - G54) +
|
---|
662 | D5433 * cos(- XOMI + X2LI - G54));
|
---|
663 | }
|
---|
664 |
|
---|
665 | XLDOT = XNI + XFACT;
|
---|
666 | XNDDT = XNDDT * XLDOT;
|
---|
667 |
|
---|
668 | state = iretn;
|
---|
669 | break;
|
---|
670 |
|
---|
671 | case 8:
|
---|
672 | /*
|
---|
673 | * Chunk #8
|
---|
674 | */
|
---|
675 |
|
---|
676 | /* INTEGRATOR */
|
---|
677 | iretn = 9;
|
---|
678 | state = 7;
|
---|
679 | break;
|
---|
680 |
|
---|
681 | case 9:
|
---|
682 | XLI = XLI + XLDOT * DELT + XNDOT * STEP2;
|
---|
683 | XNI = XNI + XNDOT * DELT + XNDDT * STEP2;
|
---|
684 | ATIME = ATIME + DELT;
|
---|
685 |
|
---|
686 | state = iret;
|
---|
687 | break;
|
---|
688 | }
|
---|
689 | }
|
---|
690 | }
|
---|
691 |
|
---|
692 | /* local */
|
---|
693 |
|
---|
694 | /* C */
|
---|
695 | /* C ENTRANCES FOR LUNAR-SOLAR PERIODICS */
|
---|
696 | /* C */
|
---|
697 | /* C */
|
---|
698 | /* ENTRY DPPER(EM,XINC,OMGASM,XNODES,XLL) */
|
---|
699 | void
|
---|
700 | dpper(SatData *sat, double *EM, double *XINC, double *OMGASM,
|
---|
701 | double *XNODES, double *XLL, double T)
|
---|
702 | {
|
---|
703 | double SINIS, COSIS, ZM, ZF, SINZF, F2, F3, SES, SIS, SLS, SEL, SIL, SLL, PGH, PH, SINOK, COSOK, ALFDP, BETDP, DALF, DBET, XLS, DLS;
|
---|
704 |
|
---|
705 | #if 0
|
---|
706 | SINIS = COSIS = ZM = ZF = SINZF = F2 = F3 = SES = SIS = signaling_nan();
|
---|
707 | SLS = SEL = SIL = SLL = PGH = signaling_nan();
|
---|
708 | PH = SINOK = COSOK = ALFDP = BETDP = DALF = DBET = XLS = signaling_nan();
|
---|
709 | DLS = signaling_nan();;
|
---|
710 | #endif
|
---|
711 | SINIS = sin(*XINC);
|
---|
712 | COSIS = cos(*XINC);
|
---|
713 |
|
---|
714 |
|
---|
715 | /* IF (DABS(SAVTSN-T).LT.(30.D0)) GO TO 210 */
|
---|
716 | if(fabs(SAVTSN - T) >= (30.0)) {
|
---|
717 | SAVTSN = T;
|
---|
718 | ZM = ZMOS + ZNS * T;
|
---|
719 | /* 205 ZF = ZM + 2.0 * ZES * sin(ZM) */
|
---|
720 | ZF = ZM + 2.0 * ZES * sin(ZM);
|
---|
721 | SINZF = sin(ZF);
|
---|
722 | F2 = .5 * SINZF * SINZF - .25;
|
---|
723 | F3 = -.5 * SINZF * cos(ZF);
|
---|
724 | SES = SE2 * F2 + SE3 * F3;
|
---|
725 | SIS = SI2 * F2 + SI3 * F3;
|
---|
726 | SLS = SL2 * F2 + SL3 * F3 + SL4 * SINZF;
|
---|
727 | SGHS = SGH2 * F2 + SGH3 * F3 + SGH4 * SINZF;
|
---|
728 | SHS = SH2 * F2 + SH3 * F3;
|
---|
729 | ZM = ZMOL + ZNL * T;
|
---|
730 | ZF = ZM + 2.0 * ZEL * sin(ZM);
|
---|
731 | SINZF = sin(ZF);
|
---|
732 | F2 = .5 * SINZF * SINZF -.25;
|
---|
733 | F3 = -.5 * SINZF * cos(ZF);
|
---|
734 | SEL = EE2 * F2 + E3 * F3;
|
---|
735 | SIL = XI2 * F2 + XI3 * F3;
|
---|
736 | SLL = XL2 * F2 + XL3 * F3 + XL4 * SINZF;
|
---|
737 | SGHL = XGH2 * F2 + XGH3 * F3 + XGH4 * SINZF;
|
---|
738 | SHL = XH2 * F2 + XH3 * F3;
|
---|
739 | PE = SES + SEL;
|
---|
740 | PINC = SIS + SIL;
|
---|
741 | PL = SLS + SLL;
|
---|
742 | }
|
---|
743 |
|
---|
744 | /* 210 PGH=SGHS+SGHL */
|
---|
745 | PGH = SGHS + SGHL;
|
---|
746 | PH = SHS + SHL;
|
---|
747 | *XINC = *XINC + PINC;
|
---|
748 | *EM = *EM + PE;
|
---|
749 |
|
---|
750 | /* IF(XQNCL.LT.(.2)) GO TO 220 */
|
---|
751 | if(XQNCL >= (.2)) {
|
---|
752 | /* GO TO 218 */
|
---|
753 | /* C */
|
---|
754 | /* C APPLY PERIODICS DIRECTLY */
|
---|
755 | /* C */
|
---|
756 | /* 218 PH=PH/SINIQ */
|
---|
757 | PH = PH / s_SINIQ;
|
---|
758 | PGH = PGH - s_COSIQ * PH;
|
---|
759 | *OMGASM = *OMGASM + PGH;
|
---|
760 | *XNODES = *XNODES + PH;
|
---|
761 | *XLL = *XLL + PL;
|
---|
762 | /* GO TO 230 */
|
---|
763 | } else {
|
---|
764 | /* C */
|
---|
765 | /* C APPLY PERIODICS WITH LYDDANE MODIFICATION */
|
---|
766 | /* C */
|
---|
767 | /* 220 SINOK=sin(XNODES) */
|
---|
768 | SINOK = sin(*XNODES);
|
---|
769 | COSOK = cos(*XNODES);
|
---|
770 | ALFDP = SINIS * SINOK;
|
---|
771 | BETDP = SINIS * COSOK;
|
---|
772 | DALF = PH * COSOK + PINC * COSIS * SINOK;
|
---|
773 | DBET = -PH * SINOK + PINC * COSIS * COSOK;
|
---|
774 | ALFDP = ALFDP + DALF;
|
---|
775 | BETDP = BETDP + DBET;
|
---|
776 | XLS = *XLL + *OMGASM + COSIS * *XNODES;
|
---|
777 | DLS = PL + PGH - PINC * *XNODES * SINIS;
|
---|
778 | XLS = XLS + DLS;
|
---|
779 | *XNODES = actan(ALFDP, BETDP);
|
---|
780 | *XLL = *XLL + PL;
|
---|
781 | *OMGASM = XLS - *XLL - cos(*XINC) * *XNODES;
|
---|
782 | }
|
---|
783 | /* 230 CONTINUE */
|
---|
784 | /* RETURN */
|
---|
785 |
|
---|
786 | }
|
---|
787 | /* END */
|
---|
788 |
|
---|
789 | /* For RCS Only -- Do Not Edit */
|
---|
790 | static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: deep.c,v $ $Date: 2005-08-21 10:02:37 $ $Revision: 1.5 $ $Name: not supported by cvs2svn $"};
|
---|