Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: ea4a7bd0a793
Choose a base ref
...
head repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: c4766d10dd5e
Choose a head ref
  • 2 commits
  • 1 file changed
  • 1 contributor

Commits on Jun 6, 2020

  1. Copy the full SHA
    c7e227e View commit details
  2. Merge pull request #2601 from pleroy/SolarSystemTest

    Change the solar system test to use the integrator we use in real life
    pleroy authored Jun 6, 2020
    Copy the full SHA
    c4766d1 View commit details
Showing with 66 additions and 62 deletions.
  1. +66 −62 astronomy/solar_system_dynamics_test.cpp
128 changes: 66 additions & 62 deletions astronomy/solar_system_dynamics_test.cpp
Original file line number Diff line number Diff line change
@@ -273,13 +273,15 @@ TEST_F(SolarSystemDynamicsTest, DISABLED_TenYearsFromJ2000) {
SOLUTION_DIR / "astronomy" /
"sol_initial_state_jd_2455200_500000000.proto.txt");

// NOTE(phl): Keep these parameters aligned with
// sol_numerics_blueprint.proto.txt.
auto const ephemeris = solar_system_at_j2000.MakeEphemeris(
/*accuracy_parameters=*/{/*fitting_tolerance=*/5 * Milli(Metre),
/*accuracy_parameters=*/{/*fitting_tolerance=*/1 * Milli(Metre),
/*geopotential_tolerance=*/0x1p-24},
Ephemeris<ICRS>::FixedStepParameters(
SymplecticRungeKuttaNyströmIntegrator<BlanesMoan2002SRKN14A,
Position<ICRS>>(),
/*step=*/45 * Minute));
SymmetricLinearMultistepIntegrator<QuinlanTremaine1990Order12,
Position<ICRS>>(),
/*step=*/10 * Minute));
ephemeris->Prolong(ten_years_later.epoch());

// NOTE(phl):
@@ -298,18 +300,18 @@ TEST_F(SolarSystemDynamicsTest, DISABLED_TenYearsFromJ2000) {
{SolarSystemFactory::Saturn,
{.separation_per_orbit = 0.017580_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000850_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.070550_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.168477_⑴ * ArcSecond}},
.longitude_of_ascending_node_drift_per_orbit = 0.070520_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.168439_⑴ * ArcSecond}},
{SolarSystemFactory::Neptune,
{.separation_per_orbit = 0.000356_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000403_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.028660_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.363661_⑴ * ArcSecond}},
.inclination_drift_per_orbit = 0.000392_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.027661_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.465338_⑴ * ArcSecond}},
{SolarSystemFactory::Uranus,
{.separation_per_orbit = 0.000137_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000175_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.019311_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.015473_⑴ * ArcSecond}},
.inclination_drift_per_orbit = 0.000171_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.019118_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.007208_⑴ * ArcSecond}},
{SolarSystemFactory::Earth,
{.separation_per_orbit = 0.085351_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.0000034_⑴ * ArcSecond,
@@ -332,14 +334,14 @@ TEST_F(SolarSystemDynamicsTest, DISABLED_TenYearsFromJ2000) {
.argument_of_periapsis_drift_per_orbit = 0.102786_⑴ * ArcSecond}},
{SolarSystemFactory::Eris,
{.separation_per_orbit = 0.000120_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.011906_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.005384_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.037147_⑴ * ArcSecond}},
.inclination_drift_per_orbit = 0.011912_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.005387_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.035167_⑴ * ArcSecond}},
{SolarSystemFactory::Pluto,
{.separation_per_orbit = 26.521661_⑴ * ArcSecond,
.inclination_drift_per_orbit = 7.661058_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 42.38994_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 807.007802_⑴ * ArcSecond}},
.inclination_drift_per_orbit = 7.66074_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 42.3903_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 807.008_⑴ * ArcSecond}},
{SolarSystemFactory::Ceres,
{.separation_per_orbit = 0.033067_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000039_⑴ * ArcSecond,
@@ -349,7 +351,7 @@ TEST_F(SolarSystemDynamicsTest, DISABLED_TenYearsFromJ2000) {
{.separation_per_orbit = 0.042217_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000034_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.000103_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.021532_⑴ * ArcSecond}},
.argument_of_periapsis_drift_per_orbit = 0.021530_⑴ * ArcSecond}},
};

for (int const planet_or_minor_planet :
@@ -392,22 +394,22 @@ TEST_F(SolarSystemDynamicsTest, DISABLED_TenYearsFromJ2000) {

std::map<int, ExpectedOrbitError> const expected_moon_orbit_errors{
{SolarSystemFactory::Ganymede,
{.separation_per_orbit = 0.039264_⑴ * ArcSecond,
{.separation_per_orbit = 0.039263_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.001664_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.609354_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.63778_⑴ * ArcSecond}},
{SolarSystemFactory::Callisto,
{.separation_per_orbit = 0.000271_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000449_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.161789_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.161792_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.16000_⑴ * ArcSecond}},
{SolarSystemFactory::Io,
{.separation_per_orbit = 0.076859_⑴ * ArcSecond,
{.separation_per_orbit = 0.076865_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000715_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 3.63026_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 3.6136_⑴ * ArcSecond}},
{SolarSystemFactory::Europa,
{.separation_per_orbit = 0.065995_⑴ * ArcSecond,
{.separation_per_orbit = 0.065998_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.004845_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.100670_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.07751_⑴ * ArcSecond}},
@@ -416,92 +418,92 @@ TEST_F(SolarSystemDynamicsTest, DISABLED_TenYearsFromJ2000) {
{.separation_per_orbit = 0.159615_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000111_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.231945_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.123316_⑴ * ArcSecond}},
.argument_of_periapsis_drift_per_orbit = 0.123311_⑴ * ArcSecond}},
{SolarSystemFactory::Rhea,
{.separation_per_orbit = 0.012814_⑴ * ArcSecond,
{.separation_per_orbit = 0.012813_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.004425_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.513725_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.496270_⑴ * ArcSecond}},
.argument_of_periapsis_drift_per_orbit = 0.496266_⑴ * ArcSecond}},
{SolarSystemFactory::Iapetus,
{.separation_per_orbit = 0.039661_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000035_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.001990_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.012208_⑴ * ArcSecond}},
.argument_of_periapsis_drift_per_orbit = 0.012217_⑴ * ArcSecond}},
{SolarSystemFactory::Dione,
{.separation_per_orbit = 0.019164_⑴ * ArcSecond,
{.separation_per_orbit = 0.019140_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000095_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.104560_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.117174_⑴ * ArcSecond}},
{SolarSystemFactory::Tethys,
{.separation_per_orbit = 0.033548_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000368_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.076115_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.045715_⑴ * ArcSecond}},
.argument_of_periapsis_drift_per_orbit = 0.045729_⑴ * ArcSecond}},
{SolarSystemFactory::Enceladus,
{.separation_per_orbit = 0.029558_⑴ * ArcSecond,
{.separation_per_orbit = 0.029591_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.002010_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 6.849883_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 6.873282_⑴ * ArcSecond}},
.longitude_of_ascending_node_drift_per_orbit = 6.84988_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 6.87334_⑴ * ArcSecond}},
{SolarSystemFactory::Mimas,
{.separation_per_orbit = 0.021225_⑴ * ArcSecond,
{.separation_per_orbit = 0.021714_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.001474_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.113612_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.234833_⑴ * ArcSecond}},
.longitude_of_ascending_node_drift_per_orbit = 0.113614_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.236115_⑴ * ArcSecond}},

{SolarSystemFactory::Triton,
{.separation_per_orbit = 0.837069_⑴ * ArcSecond,
{.separation_per_orbit = 0.837046_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.038544_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.532907_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.52176_⑴ * ArcSecond}},
.argument_of_periapsis_drift_per_orbit = 0.52463_⑴ * ArcSecond}},

{SolarSystemFactory::Titania,
{.separation_per_orbit = 0.070049_⑴ * ArcSecond,
{.separation_per_orbit = 0.070052_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000030_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.716652_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.775146_⑴ * ArcSecond}},
.longitude_of_ascending_node_drift_per_orbit = 0.716624_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.775136_⑴ * ArcSecond}},
{SolarSystemFactory::Oberon,
{.separation_per_orbit = 0.008151_⑴ * ArcSecond,
{.separation_per_orbit = 0.008150_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000407_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.130778_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.037016_⑴ * ArcSecond}},
.longitude_of_ascending_node_drift_per_orbit = 0.130781_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.037069_⑴ * ArcSecond}},
{SolarSystemFactory::Ariel,
{.separation_per_orbit = 0.004590_⑴ * ArcSecond,
{.separation_per_orbit = 0.004591_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.002529_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 20.130554_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 20.133889_⑴ * ArcSecond}},
.longitude_of_ascending_node_drift_per_orbit = 20.1305_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 20.1339_⑴ * ArcSecond}},
{SolarSystemFactory::Umbriel,
{.separation_per_orbit = 0.002270_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000293_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 4.059379_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 4.069775_⑴ * ArcSecond}},
.longitude_of_ascending_node_drift_per_orbit = 4.05936_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 4.06979_⑴ * ArcSecond}},
{SolarSystemFactory::Miranda,
{.separation_per_orbit = 0.005682_⑴ * ArcSecond,
{.separation_per_orbit = 0.005774_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.001982_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.075552_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.078943_⑴ * ArcSecond}},
.longitude_of_ascending_node_drift_per_orbit = 0.075551_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.078908_⑴ * ArcSecond}},

{SolarSystemFactory::Moon,
{.separation_per_orbit = 0.167318_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000776_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.000584_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.022413_⑴ * ArcSecond}},
.argument_of_periapsis_drift_per_orbit = 0.022414_⑴ * ArcSecond}},

{SolarSystemFactory::Phobos,
{.separation_per_orbit = 1.352_⑴ * ArcSecond,
{.separation_per_orbit = 1.023_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.0015_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.133_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.349_⑴ * ArcSecond}},
.argument_of_periapsis_drift_per_orbit = 0.494_⑴ * ArcSecond}},
{SolarSystemFactory::Deimos,
{.separation_per_orbit = 0.0068_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.002945_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.21581_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 0.213_⑴ * ArcSecond}},

{SolarSystemFactory::Charon,
{.separation_per_orbit = 254.946459_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000086_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.1132_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 512.625_⑴ * ArcSecond}},
{.separation_per_orbit = 254.947_⑴ * ArcSecond,
.inclination_drift_per_orbit = 0.000085_⑴ * ArcSecond,
.longitude_of_ascending_node_drift_per_orbit = 0.1131_⑴ * ArcSecond,
.argument_of_periapsis_drift_per_orbit = 512.615_⑴ * ArcSecond}},
};

for (int const planet_or_minor_planet :
@@ -557,13 +559,15 @@ TEST(MarsTest, Phobos) {
SOLUTION_DIR / "astronomy" / "sol_gravity_model.proto.txt",
SOLUTION_DIR / "astronomy" /
"sol_initial_state_jd_2451545_000000000.proto.txt");
// NOTE(phl): Keep these parameters aligned with
// sol_numerics_blueprint.proto.txt.
auto const ephemeris = solar_system_at_j2000.MakeEphemeris(
/*accuracy_parameters=*/{/*fitting_tolerance=*/5 * Milli(Metre),
/*accuracy_parameters=*/{/*fitting_tolerance=*/1 * Milli(Metre),
/*geopotential_tolerance=*/0x1p-24},
Ephemeris<ICRS>::FixedStepParameters(
SymplecticRungeKuttaNyströmIntegrator<BlanesMoan2002SRKN14A,
Position<ICRS>>(),
/*step=*/45 * Minute));
SymmetricLinearMultistepIntegrator<QuinlanTremaine1990Order12,
Position<ICRS>>(),
/*step=*/10 * Minute));
ephemeris->Prolong(J2000 + 1 * JulianYear);

ContinuousTrajectory<ICRS> const& mars_trajectory =