Combined integrator parameters into a struct

feature/19
Daniel Warner 2011-08-24 12:07:35 +00:00
parent 3d0c49bf87
commit b6b610be3b
2 changed files with 31 additions and 30 deletions

View File

@ -859,7 +859,7 @@ void SGP4::DeepSpaceInitialize(const double& eosq, const double& sinio, const do
/* /*
* precompute dot terms for epoch * precompute dot terms for epoch
*/ */
DeepSpaceCalcDotTerms(&integrator_consts_.xndot_0, &integrator_consts_.xnddt_0, &integrator_consts_.xldot_0); DeepSpaceCalcDotTerms(&integrator_consts_.values_0);
} }
} }
@ -1045,9 +1045,7 @@ void SGP4::DeepSpaceSecular(const double& t, double* xll, double* omgasm,
/* /*
* restore precomputed values for epoch * restore precomputed values for epoch
*/ */
integrator_params_.xndot_t = integrator_consts_.xndot_0; integrator_params_.values_t = integrator_consts_.values_0;
integrator_params_.xnddt_t = integrator_consts_.xnddt_0;
integrator_params_.xldot_t = integrator_consts_.xldot_0;
} }
double ft = t - integrator_params_.atime; double ft = t - integrator_params_.atime;
@ -1070,12 +1068,12 @@ void SGP4::DeepSpaceSecular(const double& t, double* xll, double* omgasm,
/* /*
* integrate using current dot terms * integrate using current dot terms
*/ */
DeepSpaceIntegrator(delt, STEP2, integrator_params_.xndot_t, integrator_params_.xnddt_t, integrator_params_.xldot_t); DeepSpaceIntegrator(delt, STEP2, integrator_params_.values_t);
/* /*
* calculate dot terms for next integration * calculate dot terms for next integration
*/ */
DeepSpaceCalcDotTerms(&integrator_params_.xndot_t, &integrator_params_.xnddt_t, &integrator_params_.xldot_t); DeepSpaceCalcDotTerms(&integrator_params_.values_t);
ft = t - integrator_params_.atime; ft = t - integrator_params_.atime;
} while (fabs(ft) >= STEP); } while (fabs(ft) >= STEP);
@ -1084,8 +1082,8 @@ void SGP4::DeepSpaceSecular(const double& t, double* xll, double* omgasm,
/* /*
* integrator * integrator
*/ */
(*xn) = integrator_params_.xni + integrator_params_.xndot_t * ft + integrator_params_.xnddt_t * ft * ft * 0.5; (*xn) = integrator_params_.xni + integrator_params_.values_t.xndot * ft + integrator_params_.values_t.xnddt * ft * ft * 0.5;
const double xl = integrator_params_.xli + integrator_params_.xldot_t * ft + integrator_params_.xndot_t * ft * ft * 0.5; const double xl = integrator_params_.xli + integrator_params_.values_t.xldot * ft + integrator_params_.values_t.xndot * ft * ft * 0.5;
const double temp = -(*xnodes) + deepspace_consts_.gsto + t * kTHDT; const double temp = -(*xnodes) + deepspace_consts_.gsto + t * kTHDT;
if (deepspace_consts_.synchronous_flag) if (deepspace_consts_.synchronous_flag)
@ -1097,7 +1095,7 @@ void SGP4::DeepSpaceSecular(const double& t, double* xll, double* omgasm,
/* /*
* calculate dot terms * calculate dot terms
*/ */
void SGP4::DeepSpaceCalcDotTerms(double* xndot, double* xnddt, double* xldot) const { void SGP4::DeepSpaceCalcDotTerms(struct IntegratorValues *values) const {
static const double G22 = 5.7686396; static const double G22 = 5.7686396;
static const double G32 = 0.95240898; static const double G32 = 0.95240898;
@ -1110,10 +1108,10 @@ void SGP4::DeepSpaceCalcDotTerms(double* xndot, double* xnddt, double* xldot) co
if (deepspace_consts_.synchronous_flag) { if (deepspace_consts_.synchronous_flag) {
(*xndot) = deepspace_consts_.del1 * sin(integrator_params_.xli - FASX2) + values->xndot = deepspace_consts_.del1 * sin(integrator_params_.xli - FASX2) +
deepspace_consts_.del2 * sin(2.0 * (integrator_params_.xli - FASX4)) + deepspace_consts_.del2 * sin(2.0 * (integrator_params_.xli - FASX4)) +
deepspace_consts_.del3 * sin(3.0 * (integrator_params_.xli - FASX6)); deepspace_consts_.del3 * sin(3.0 * (integrator_params_.xli - FASX6));
(*xnddt) = deepspace_consts_.del1 * cos(integrator_params_.xli - FASX2) + 2.0 * values->xnddt = deepspace_consts_.del1 * cos(integrator_params_.xli - FASX2) + 2.0 *
deepspace_consts_.del2 * cos(2.0 * (integrator_params_.xli - FASX4)) + 3.0 * deepspace_consts_.del2 * cos(2.0 * (integrator_params_.xli - FASX4)) + 3.0 *
deepspace_consts_.del3 * cos(3.0 * (integrator_params_.xli - FASX6)); deepspace_consts_.del3 * cos(3.0 * (integrator_params_.xli - FASX6));
@ -1123,7 +1121,7 @@ void SGP4::DeepSpaceCalcDotTerms(double* xndot, double* xnddt, double* xldot) co
const double x2omi = xomi + xomi; const double x2omi = xomi + xomi;
const double x2li = integrator_params_.xli + integrator_params_.xli; const double x2li = integrator_params_.xli + integrator_params_.xli;
(*xndot) = deepspace_consts_.d2201 * sin(x2omi + integrator_params_.xli - G22) values->xndot = deepspace_consts_.d2201 * sin(x2omi + integrator_params_.xli - G22)
+ deepspace_consts_.d2211 * sin(integrator_params_.xli - G22) + deepspace_consts_.d2211 * sin(integrator_params_.xli - G22)
+ deepspace_consts_.d3210 * sin(xomi + integrator_params_.xli - G32) + deepspace_consts_.d3210 * sin(xomi + integrator_params_.xli - G32)
+ deepspace_consts_.d3222 * sin(-xomi + integrator_params_.xli - G32) + deepspace_consts_.d3222 * sin(-xomi + integrator_params_.xli - G32)
@ -1133,7 +1131,7 @@ void SGP4::DeepSpaceCalcDotTerms(double* xndot, double* xnddt, double* xldot) co
+ deepspace_consts_.d5232 * sin(-xomi + integrator_params_.xli - G52) + deepspace_consts_.d5232 * sin(-xomi + integrator_params_.xli - G52)
+ deepspace_consts_.d5421 * sin(xomi + x2li - G54) + deepspace_consts_.d5421 * sin(xomi + x2li - G54)
+ deepspace_consts_.d5433 * sin(-xomi + x2li - G54); + deepspace_consts_.d5433 * sin(-xomi + x2li - G54);
(*xnddt) = deepspace_consts_.d2201 * cos(x2omi + integrator_params_.xli - G22) values->xnddt = deepspace_consts_.d2201 * cos(x2omi + integrator_params_.xli - G22)
+ deepspace_consts_.d2211 * cos(integrator_params_.xli - G22) + deepspace_consts_.d2211 * cos(integrator_params_.xli - G22)
+ deepspace_consts_.d3210 * cos(xomi + integrator_params_.xli - G32) + deepspace_consts_.d3210 * cos(xomi + integrator_params_.xli - G32)
+ deepspace_consts_.d3222 * cos(-xomi + integrator_params_.xli - G32) + deepspace_consts_.d3222 * cos(-xomi + integrator_params_.xli - G32)
@ -1145,21 +1143,21 @@ void SGP4::DeepSpaceCalcDotTerms(double* xndot, double* xnddt, double* xldot) co
+ deepspace_consts_.d5433 * cos(-xomi + x2li - G54)); + deepspace_consts_.d5433 * cos(-xomi + x2li - G54));
} }
(*xldot) = integrator_params_.xni + integrator_consts_.xfact; values->xldot = integrator_params_.xni + integrator_consts_.xfact;
(*xnddt) *= (*xldot); values->xnddt *= values->xldot;
} }
/* /*
* deep space integrator for time period of delt * deep space integrator for time period of delt
*/ */
void SGP4::DeepSpaceIntegrator(const double delt, const double step2, void SGP4::DeepSpaceIntegrator(const double delt, const double step2,
const double xndot, const double xnddt, const double xldot) const { const struct IntegratorValues &values) const {
/* /*
* integrator * integrator
*/ */
integrator_params_.xli += xldot * delt + xndot * step2; integrator_params_.xli += values.xldot * delt + values.xndot * step2;
integrator_params_.xni += xndot * delt + xnddt * step2; integrator_params_.xni += values.xndot * delt + values.xnddt * step2;
/* /*
* increment integrator time * increment integrator time

27
SGP4.h
View File

@ -142,10 +142,18 @@ public:
double del3; double del3;
}; };
struct IntegratorValues {
IntegratorValues() : xndot(0.0), xnddt(0.0), xldot(0.0) {
}
double xndot;
double xnddt;
double xldot;
};
struct IntegratorConstants { struct IntegratorConstants {
IntegratorConstants() : xfact(0.0), xlamo(0.0), xndot_0(0.0), IntegratorConstants() : xfact(0.0), xlamo(0.0) {
xnddt_0(0.0), xldot_0(0.0) {
} }
/* /*
@ -157,15 +165,12 @@ public:
/* /*
* integrator values for epoch * integrator values for epoch
*/ */
double xndot_0; struct IntegratorValues values_0;
double xnddt_0;
double xldot_0;
}; };
struct IntegratorParams { struct IntegratorParams {
IntegratorParams() : xli(0.0), xni(0.0), atime(0.0), IntegratorParams() : xli(0.0), xni(0.0), atime(0.0) {
xndot_t(0.0), xnddt_t(0.0), xldot_t(0.0) {
} }
/* /*
@ -177,9 +182,7 @@ public:
/* /*
* itegrator values for current d_atime_ * itegrator values for current d_atime_
*/ */
double xndot_t; struct IntegratorValues values_t;
double xnddt_t;
double xldot_t;
}; };
private: private:
@ -200,9 +203,9 @@ private:
const double& xincl, const double& xlcof, const double& aycof, const double& xincl, const double& xlcof, const double& aycof,
const double& x3thm1, const double& x1mth2, const double& x7thm1, const double& x3thm1, const double& x1mth2, const double& x7thm1,
const double& cosio, const double& sinio) const; const double& cosio, const double& sinio) const;
void DeepSpaceCalcDotTerms(double* xndot, double* xnddt, double* xldot) const; void DeepSpaceCalcDotTerms(struct IntegratorValues *values) const;
void DeepSpaceIntegrator(const double delt, const double step2, void DeepSpaceIntegrator(const double delt, const double step2,
const double xndot, const double xnddt, const double xldot)const; const struct IntegratorValues& values)const;
void Reset(); void Reset();
/* /*