[1457] | 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 */
|
---|
[4017] | 790 | static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: deep.c,v $ $Date: 2011-09-21 16:17:48 $ $Revision: 1.9 $ $Name: not supported by cvs2svn $"};
|
---|