Skip to content

Commit b488863

Browse files
Merge pull request #369 from gregjesl/harmonics
Consolidated accel and sum into Vector4
2 parents 505e820 + db8722f commit b488863

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

src/dynamics/sph_harmonics.rs

+13-18
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use snafu::ResultExt;
2323
use crate::cosmic::{AstroPhysicsSnafu, Frame, Orbit};
2424
use crate::dynamics::AccelModel;
2525
use crate::io::gravity::HarmonicsMem;
26-
use crate::linalg::{DMatrix, Matrix3, Vector3, U7};
26+
use crate::linalg::{DMatrix, Matrix3, Vector3, Vector4, U7};
2727
use hyperdual::linalg::norm;
2828
use hyperdual::{hyperspace_from_vector, Float, OHyperdual};
2929
use std::cmp::min;
@@ -208,16 +208,10 @@ impl AccelModel for Harmonics {
208208

209209
let rho = eq_radius_km / r_;
210210
let mut rho_np1 = mu_km3_s2 / r_ * rho;
211-
let mut a0 = 0.0;
212-
let mut a1 = 0.0;
213-
let mut a2 = 0.0;
214-
let mut a3 = 0.0;
211+
let mut accel4: Vector4<f64> = Vector4::zeros();
215212

216213
for n in 1..max_degree {
217-
let mut sum0 = 0.0;
218-
let mut sum1 = 0.0;
219-
let mut sum2 = 0.0;
220-
let mut sum3 = 0.0;
214+
let mut sum: Vector4<f64> = Vector4::zeros();
221215
rho_np1 *= rho;
222216

223217
for m in 0..=min(n, max_order) {
@@ -234,18 +228,19 @@ impl AccelModel for Harmonics {
234228
(s_val * r_m[m - 1] - c_val * i_m[m - 1]) * 2.0.sqrt()
235229
};
236230

237-
sum0 += (m as f64) * a_nm[(n, m)] * e_;
238-
sum1 += (m as f64) * a_nm[(n, m)] * f_;
239-
sum2 += self.vr01[(n, m)] * a_nm[(n, m + 1)] * d_;
240-
sum3 += self.vr11[(n, m)] * a_nm[(n + 1, m + 1)] * d_;
231+
sum.x += (m as f64) * a_nm[(n, m)] * e_;
232+
sum.y += (m as f64) * a_nm[(n, m)] * f_;
233+
sum.z += self.vr01[(n, m)] * a_nm[(n, m + 1)] * d_;
234+
sum.w -= self.vr11[(n, m)] * a_nm[(n + 1, m + 1)] * d_;
241235
}
242236
let rr = rho_np1 / eq_radius_km;
243-
a0 += rr * sum0;
244-
a1 += rr * sum1;
245-
a2 += rr * sum2;
246-
a3 -= rr * sum3;
237+
accel4 += rr * sum;
247238
}
248-
let accel = Vector3::new(a0 + a3 * s_, a1 + a3 * t_, a2 + a3 * u_);
239+
let accel = Vector3::new(
240+
accel4.x + accel4.w * s_,
241+
accel4.y + accel4.w * t_,
242+
accel4.z + accel4.w * u_,
243+
);
249244
// Rotate this acceleration vector back into the integration frame (no center change needed, it's just a vector)
250245
// As discussed with Sai, if the Earth was spinning faster, would the acceleration due to the harmonics be any different?
251246
// No. Therefore, we do not need to account for the transport theorem here.

0 commit comments

Comments
 (0)