35 const Scalar x = r_ecef(0);
36 const Scalar y = r_ecef(1);
37 const Scalar z = r_ecef(2);
39 const Scalar r2 = x * x + y * y + z * z;
40 const Scalar r = janus::sqrt(r2);
41 const Scalar r3 = r2 * r;
44 const Scalar z_r = z / r;
45 const Scalar z_r2 = z_r * z_r;
46 const Scalar z_r3 = z_r2 * z_r;
47 const Scalar z_r4 = z_r2 * z_r2;
50 const Scalar Re_r = R_eq / r;
51 const Scalar Re_r2 = Re_r * Re_r;
52 const Scalar Re_r3 = Re_r2 * Re_r;
53 const Scalar Re_r4 = Re_r2 * Re_r2;
56 const Scalar base = -mu / r3;
61 const Scalar J2_xy = -1.5 * J2_coeff * Re_r2 * (5.0 * z_r2 - 1.0);
62 const Scalar J2_z = -1.5 * J2_coeff * Re_r2 * (5.0 * z_r2 - 3.0);
68 const Scalar J3_xy = 2.5 * J3_coeff * Re_r3 * z_r * (7.0 * z_r2 - 3.0);
69 const Scalar J3_z = 2.5 * J3_coeff * Re_r3 * (7.0 * z_r3 - 3.0 * z_r);
75 (15.0 / 8.0) * J4_coeff * Re_r4 * (1.0 - 14.0 * z_r2 + 21.0 * z_r4);
76 const Scalar J4_z = (15.0 / 8.0) * J4_coeff * Re_r4 *
77 (5.0 - 70.0 / 3.0 * z_r2 + 21.0 * z_r4);
82 const Scalar factor_xy = 1.0 + J2_xy + J3_xy + J4_xy;
83 const Scalar factor_z = 1.0 + J2_z + J3_z + J4_z;
86 accel(0) = base * x * factor_xy;
87 accel(1) = base * y * factor_xy;
88 accel(2) = base * z * factor_z;
113 const Scalar x = r_ecef(0);
114 const Scalar y = r_ecef(1);
115 const Scalar z = r_ecef(2);
117 const Scalar r2 = x * x + y * y + z * z;
118 const Scalar r = janus::sqrt(r2);
121 const Scalar sin_phi = z / r;
122 const Scalar sin_phi2 = sin_phi * sin_phi;
123 const Scalar sin_phi3 = sin_phi2 * sin_phi;
124 const Scalar sin_phi4 = sin_phi2 * sin_phi2;
127 const Scalar Re_r = R_eq / r;
128 const Scalar Re_r2 = Re_r * Re_r;
129 const Scalar Re_r3 = Re_r2 * Re_r;
130 const Scalar Re_r4 = Re_r2 * Re_r2;
133 const Scalar P2 = (3.0 * sin_phi2 - 1.0) / 2.0;
134 const Scalar P3 = (5.0 * sin_phi3 - 3.0 * sin_phi) / 2.0;
135 const Scalar P4 = (35.0 * sin_phi4 - 30.0 * sin_phi2 + 3.0) / 8.0;
138 const Scalar correction =
139 J2_coeff * Re_r2 * P2 + J3_coeff * Re_r3 * P3 + J4_coeff * Re_r4 * P4;
141 return -mu / r * (1.0 - correction);