Creating variables for DeepInitialize

feature/19
Daniel Warner 2011-03-26 22:06:39 +00:00
parent 216f7e4524
commit 4ececbff56
2 changed files with 170 additions and 80 deletions

178
SGDP4.cpp
View File

@ -477,6 +477,11 @@ void SGDP4::DeepSpaceInitialize() {
double s6; double s6;
double s7; double s7;
double se;
double si;
double sl;
double sgh;
double ZNS = 1.19459E-5; double ZNS = 1.19459E-5;
double C1SS = 2.9864797E-6; double C1SS = 2.9864797E-6;
double ZES = 0.01675; double ZES = 0.01675;
@ -509,38 +514,38 @@ void SGDP4::DeepSpaceInitialize() {
double aqnv = 1.0 / RecoveredSemiMajorAxis(); double aqnv = 1.0 / RecoveredSemiMajorAxis();
double xpidot = omgdt_ + xnodot_; double xpidot = omgdt + xnodot_;
double sinq = sin(AscendingNode()); double sinq = sin(AscendingNode());
double cosq = cos(AscendingNode()); double cosq = cos(AscendingNode());
/* /*
* initialize lunar solar terms * initialize lunar solar terms
*/ */
double day = Epoch().FromJan1_12h_1900(); d_day_ = Epoch().FromJan1_12h_1900();
double xnodce = 4.5236020 - 9.2422029e-4 * day; double xnodce = 4.5236020 - 9.2422029e-4 * d_day_;
double stem = sin(xnodce); double stem = sin(xnodce);
double ctem = cos(xnodce); double ctem = cos(xnodce);
double zcosil = 0.91375164 - 0.03568096 * ctem; double zcosil = 0.91375164 - 0.03568096 * ctem;
double zsinil = sqrt(1.0 - zcosil * zcosil); double zsinil = sqrt(1.0 - zcosil * zcosil);
double zsinhl = 0.089683511 * stem / zsinil; double zsinhl = 0.089683511 * stem / zsinil;
double zcoshl = sqrt(1.0 - zsinhl * zsinhl); double zcoshl = sqrt(1.0 - zsinhl * zsinhl);
double c = 4.7199672 + 0.22997150 * day; double c = 4.7199672 + 0.22997150 * d_day_;
double gam = 5.8351514 + 0.0019443680 * day; double gam = 5.8351514 + 0.0019443680 * d_day_;
double zmol = fmod2p(c - gam); double zmol = fmod2p(c - gam);
double zx = 0.39785416 * stem / zsinil; double zx = 0.39785416 * stem / zsinil;
double zy = zcoshl * ctem + 0.91744867 * zsinhl * stem; double zy = zcoshl * ctem + 0.91744867 * zsinhl * stem;
double zx = atan2(zx, zy); zx = atan2(zx, zy);
double zx = gam + zx - xnodce; zx = gam + zx - xnodce;
double zcosgl = cos(zx); double zcosgl = cos(zx);
double zsingl = sin(zx); double zsingl = sin(zx);
double zmos = 6.2565837 + 0.017201977 * day; double zmos = 6.2565837 + 0.017201977 * d_day_;
double zmos = fmod2p(zmos); zmos = fmod2p(zmos);
/* /*
* do solar terms * do solar terms
*/ */
double savtsn = 1e20; d_savtsn_ = 1.0e20;
double zcosg = ZCOSGS; double zcosg = ZCOSGS;
double zsing = ZSINGS; double zsing = ZSINGS;
double zcosi = ZCOSIS; double zcosi = ZCOSIS;
@ -550,7 +555,7 @@ void SGDP4::DeepSpaceInitialize() {
double cc = C1SS; double cc = C1SS;
double zn = ZNS; double zn = ZNS;
double ze = ZES; double ze = ZES;
double zmo = zmos; double zmo = d_zmos_;
double xnoi = 1.0 / RecoveredMeanMotion(); double xnoi = 1.0 / RecoveredMeanMotion();
for (int cnt = 0; cnt < 2; cnt++) { for (int cnt = 0; cnt < 2; cnt++) {
@ -614,41 +619,41 @@ void SGDP4::DeepSpaceInitialize() {
shdq = (-zn * s2 * (z21 + z23)) / siniq; shdq = (-zn * s2 * (z21 + z23)) / siniq;
} }
ee2 = 2.0 * s1 * s6; d_ee2_ = 2.0 * s1 * s6;
e3 = 2.0 * s1 * s7; d_e3_ = 2.0 * s1 * s7;
xi2 = 2.0 * s2 * z12; d_xi2_ = 2.0 * s2 * z12;
xi3 = 2.0 * s2 * (z13 - z11); d_xi3_ = 2.0 * s2 * (z13 - z11);
xl2 = -2.0 * s3 * z2; d_xl2_ = -2.0 * s3 * z2;
xl3 = -2.0 * s3 * (z3 - z1); d_xl3_ = -2.0 * s3 * (z3 - z1);
xl4 = -2.0 * s3 * (-21.0 - 9.0 * eqsq) * ze; d_xl4_ = -2.0 * s3 * (-21.0 - 9.0 * eqsq) * ze;
xgh2 = 2.0 * s4 * z32; d_xgh2_ = 2.0 * s4 * z32;
xgh3 = 2.0 * s4 * (z33 - z31); d_xgh3_ = 2.0 * s4 * (z33 - z31);
xgh4 = -18.0 * s4 * ze; d_xgh4_ = -18.0 * s4 * ze;
xh2 = -2.0 * s2 * z22; d_xh2_ = -2.0 * s2 * z22;
xh3 = -2.0 * s2 * (z23 - z21); d_xh3_ = -2.0 * s2 * (z23 - z21);
if (cnt == 1) if (cnt == 1)
break; break;
/* /*
* do lunar terms * do lunar terms
*/ */
sse = se; d_sse_ = se;
ssi = si; d_ssi_ = si;
ssl = sl; d_ssl_ = sl;
ssh = shdq; d_ssh_ = shdq;
ssg = sgh - cosiq * ssh; d_ssg_ = sgh - cosiq * d_ssh_;
se2 = ee2; d_se2_ = d_ee2_;
si2 = xi2; d_si2_ = d_xi2_;
sl2 = xl2; d_sl2_ = d_xl2_;
sgh2 = xgh2; d_sgh2_ = d_xgh2_;
sh2 = xh2; d_sh2_ = d_xh2_;
se3 = e3; d_se3_ = d_e3_;
si3 = xi3; d_si3_ = d_xi3_;
sl3 = xl3; d_sl3_ = d_xl3_;
sgh3 = xgh3; d_sgh3_ = d_xgh3_;
sh3 = xh3; d_sh3_ = d_xh3_;
sl4 = xl4; d_sl4_ = d_xl4_;
sgh4 = xgh4; d_sgh4_ = d_xgh4_;
zcosg = zcosgl; zcosg = zcosgl;
zsing = zsingl; zsing = zsingl;
zcosi = zcosil; zcosi = zcosil;
@ -661,11 +666,11 @@ void SGDP4::DeepSpaceInitialize() {
zmo = zmol; zmo = zmol;
} }
sse += se; d_sse_ += se;
ssi += si; d_ssi_ += si;
ssl += sl; d_ssl_ += sl;
ssg += sgh - cosiq * shdq; d_ssg_ += sgh - cosiq * shdq;
ssh += shdq; d_ssh_ += shdq;
/* /*
* geopotential resonance initialization for 12 hour orbits * geopotential resonance initialization for 12 hour orbits
@ -685,7 +690,15 @@ void SGDP4::DeepSpaceInitialize() {
resonance_flag = true; resonance_flag = true;
double eoc = Eccentricity() * eqsq; double eoc = Eccentricity() * eqsq;
g201 = -0.306 - (Eccentricity() - 0.64) * 0.440;
double g211;
double g310;
double g322;
double g410;
double g422;
double g520;
double g201 = -0.306 - (Eccentricity() - 0.64) * 0.440;
if (Eccentricity() <= 0.65) { if (Eccentricity() <= 0.65) {
g211 = 3.616 - 13.247 * Eccentricity() + 16.290 * eqsq; g211 = 3.616 - 13.247 * Eccentricity() + 16.290 * eqsq;
@ -708,6 +721,10 @@ void SGDP4::DeepSpaceInitialize() {
} }
} }
double g533;
double g521;
double g532;
if (Eccentricity() < 0.7) { if (Eccentricity() < 0.7) {
g533 = -919.2277 + 4988.61 * Eccentricity() - 9064.77 * eqsq + 5542.21 * eoc; g533 = -919.2277 + 4988.61 * Eccentricity() - 9064.77 * eqsq + 5542.21 * eoc;
g521 = -822.71072 + 4568.6173 * Eccentricity() - 8491.4146 * eqsq + 5337.524 * eoc; g521 = -822.71072 + 4568.6173 * Eccentricity() - 8491.4146 * eqsq + 5337.524 * eoc;
@ -717,20 +734,21 @@ void SGDP4::DeepSpaceInitialize() {
g521 = -51752.104 + 218913.95 * Eccentricity() - 309468.16 * eqsq + 146349.42 * eoc; g521 = -51752.104 + 218913.95 * Eccentricity() - 309468.16 * eqsq + 146349.42 * eoc;
g532 = -40023.88 + 170470.89 * Eccentricity() - 242699.48 * eqsq + 115605.82 * eoc; g532 = -40023.88 + 170470.89 * Eccentricity() - 242699.48 * eqsq + 115605.82 * eoc;
} }
sini2 = siniq * siniq;
f220 = 0.75 * (1.0 + 2.0 * cosiq + cosq2); double sini2 = siniq * siniq;
f221 = 1.5 * sini2; double f220 = 0.75 * (1.0 + 2.0 * cosiq + cosq2);
f321 = 1.875 * siniq * (1.0 - 2.0 * cosiq - 3.0 * cosq2); double f221 = 1.5 * sini2;
f322 = -1.875 * siniq * (1.0 + 2.0 * cosiq - 3.0 * cosq2); double f321 = 1.875 * siniq * (1.0 - 2.0 * cosiq - 3.0 * cosq2);
f441 = 35.0 * sini2 * f220; double f322 = -1.875 * siniq * (1.0 + 2.0 * cosiq - 3.0 * cosq2);
f442 = 39.3750 * sini2 * sini2; double f441 = 35.0 * sini2 * f220;
f522 = 9.84375 * siniq * (sini2 * (1.0 - 2.0 * cosiq - 5.0 * cosq2) double f442 = 39.3750 * sini2 * sini2;
double f522 = 9.84375 * siniq * (sini2 * (1.0 - 2.0 * cosiq - 5.0 * cosq2)
+ 0.33333333 * (-2.0 + 4.0 * cosiq + 6.0 * cosq2)); + 0.33333333 * (-2.0 + 4.0 * cosiq + 6.0 * cosq2));
f523 = siniq * (4.92187512 * sini2 * (-2.0 - 4.0 * cosiq + 10.0 * cosq2) double f523 = siniq * (4.92187512 * sini2 * (-2.0 - 4.0 * cosiq + 10.0 * cosq2)
+ 6.56250012 * (1.0 + 2.0 * cosiq - 3.0 * cosq2)); + 6.56250012 * (1.0 + 2.0 * cosiq - 3.0 * cosq2));
f542 = 29.53125 * siniq * (2.0 - 8.0 * cosiq + cosq2 * double f542 = 29.53125 * siniq * (2.0 - 8.0 * cosiq + cosq2 *
(-12.0 + 8.0 * cosiq + 10.0 * cosq2)); (-12.0 + 8.0 * cosiq + 10.0 * cosq2));
f543 = 29.53125 * siniq * (-2.0 - 8.0 * cosiq + cosq2 * double f543 = 29.53125 * siniq * (-2.0 - 8.0 * cosiq + cosq2 *
(12.0 + 8.0 * cosiq - 10.0 * cosq2)); (12.0 + 8.0 * cosiq - 10.0 * cosq2));
xno2 = RecoveredMeanMotion() * RecoveredMeanMotion(); xno2 = RecoveredMeanMotion() * RecoveredMeanMotion();
ainv2 = aqnv * aqnv; ainv2 = aqnv * aqnv;
@ -764,36 +782,36 @@ void SGDP4::DeepSpaceInitialize() {
resonance_flag = true; resonance_flag = true;
synchronous_flag = true; synchronous_flag = true;
g200 = 1.0 + eqsq * (-2.5 + 0.8125 * eqsq); double g200 = 1.0 + eqsq * (-2.5 + 0.8125 * eqsq);
g310 = 1.0 + 2.0 * eqsq; double g310 = 1.0 + 2.0 * eqsq;
g300 = 1.0 + eqsq * (-6.0 + 6.60937 * eqsq); double g300 = 1.0 + eqsq * (-6.0 + 6.60937 * eqsq);
f220 = 0.75 * (1.0 + cosiq) * (1.0 + cosiq); double f220 = 0.75 * (1.0 + cosiq) * (1.0 + cosiq);
f311 = 0.9375 * siniq * siniq * (1.0 + 3.0 * cosiq) - 0.75 * (1.0 + cosiq); double f311 = 0.9375 * siniq * siniq * (1.0 + 3.0 * cosiq) - 0.75 * (1.0 + cosiq);
f330 = 1.0 + cosiq; double f330 = 1.0 + cosiq;
f330 = 1.875 * f330 * f330 * f330; f330 = 1.875 * f330 * f330 * f330;
del1 = 3.0 * RecoveredMeanMotion() * RecoveredMeanMotion() * aqnv * aqnv; d_del1_ = 3.0 * RecoveredMeanMotion() * RecoveredMeanMotion() * aqnv * aqnv;
del2 = 2.0 * del1 * f220 * g200 * Q22; d_del2_ = 2.0 * del1 * f220 * g200 * Q22;
del3 = 3.0 * del1 * f330 * g300 * Q33 * aqnv; d_del3_ = 3.0 * del1 * f330 * g300 * Q33 * aqnv;
del1 = del1 * f311 * g310 * Q31 * aqnv; d_del1_ = del1 * f311 * g310 * Q31 * aqnv;
fasx2 = 0.13130908; d_fasx2_ = 0.13130908;
fasx4 = 2.8843198; d_fasx4_ = 2.8843198;
fasx6 = 0.37448087; d_fasx6_ = 0.37448087;
xlamo = MeanAnomoly() + AscendingNode() + ArgumentPerigee() - gsto_; d_xlamo_ = MeanAnomoly() + AscendingNode() + ArgumentPerigee() - gsto_;
bfact = xlldot + xpidot - THDT; d_bfact_ = xlldot + xpidot - THDT;
bfact = bfact + ssl + ssg + ssh; d_bfact_ = bfact + ssl + ssg + ssh;
xfact = bfact - RecoveredMeanMotion(); d_xfact_ = bfact - RecoveredMeanMotion();
} }
if (initialize_integrator) { if (initialize_integrator) {
/* /*
* initialize integrator * initialize integrator
*/ */
xli = xlamo; d_xli_ = d_xlamo_;
xni = RecoveredMeanMotion(); d_xni_ = RecoveredMeanMotion();
atime = 0.0; d_atime_ = 0.0;
stepp = 720.0; d_stepp_ = 720.0;
stepn = -720.0; d_stepn_ = -720.0;
step2 = 259200.0; d_step2_ = 259200.0;
} }
} }

72
SGDP4.h
View File

@ -160,6 +160,78 @@ private:
double period_; double period_;
Julian epoch_; Julian epoch_;
double d_day_;
double d_xnodce_;
double d_stem_;
double d_ctem_;
double d_zcosil_;
double d_zsinil_;
double d_zsinhl_;
double d_zcoshl_;
double d_c_;
double d_gam_;
double d_zx_;
double d_zy_;
double d_zcosgl_;
double d_zsingl_;
double d_zmol_;
double d_zmos_;
double d_savtsn_;
double d_sse_;
double d_ssi_;
double d_ssl_;
double d_ssg_;
double d_ssh_;
double d_se2_;
double d_si2_;
double d_sl2_;
double d_sgh2_;
double d_sh2_;
double d_se3_;
double d_si3_;
double d_sl3_;
double d_sgh3_;
double d_sh3_;
double d_sl4_;
double d_sgh4_;
double d_ee2_;
double d_e3_;
double d_xi2_;
double d_xi3_;
double d_xl2_;
double d_xl3_;
double d_xl4_;
double d_xgh2_;
double d_xgh3_;
double d_xgh4_;
double d_xh2_;
double d_xh3_;
double d_xlamo_;
double d_xli_;
double d_xni_;
double d_atime_;
double d_stepp_;
double d_stepn_;
double d_step2_;
}; };
#endif #endif