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: ab43def73863
Choose a base ref
...
head repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 3ce154a6d5b7
Choose a head ref
Loading
11 changes: 11 additions & 0 deletions astronomy/astronomy.vcxproj
Original file line number Diff line number Diff line change
@@ -16,6 +16,16 @@
<None Include="sol_gravity_model.cfg" />
<None Include="sol_initial_state_jd_2433282_500000000.cfg" />
<None Include="sol_numerics_blueprint.cfg" />
<None Include="standard_product_3\asi.orb.etalon2.171209.v70.sp3" />
<None Include="standard_product_3\COD0MGXFIN_20181260000_01D_05M_ORB.SP3" />
<None Include="standard_product_3\COD0MGXFIN_20183640000_01D_05M_ORB.SP3" />
<None Include="standard_product_3\esa11802.eph" />
<None Include="standard_product_3\ilrsa.orb.lageos2.160319.v35.sp3" />
<None Include="standard_product_3\ilrsa.orb.lageos2.180804.v70.sp3" />
<None Include="standard_product_3\ilrsb.orb.lageos2.160319.v35.sp3" />
<None Include="standard_product_3\mcc14000.sp3" />
<None Include="standard_product_3\nga20342.eph" />
<None Include="standard_product_3\README.md" />
<None Include="trappist_gravity_model.cfg" />
<None Include="trappist_gravity_model_slippist1.cfg" />
<None Include="trappist_initial_state_jd_2457000_000000000.cfg" />
@@ -73,6 +83,7 @@
<ClCompile Include="lunar_orbit_test.cpp" />
<ClCompile Include="solar_system_dynamics_test.cpp" />
<ClCompile Include="standard_product_3.cpp" />
<ClCompile Include="standard_product_3_test.cpp" />
<ClCompile Include="time_scales_test.cpp" />
<ClCompile Include="lunar_eclipse_test.cpp" />
<ClCompile Include="mercury_perihelion_test.cpp" />
36 changes: 36 additions & 0 deletions astronomy/astronomy.vcxproj.filters
Original file line number Diff line number Diff line change
@@ -15,6 +15,9 @@
<Filter Include="Source Files">
<UniqueIdentifier>{2f348d01-8c8d-4e0d-8ad2-c4e1d1a62595}</UniqueIdentifier>
</Filter>
<Filter Include="Resource Files\Standard Product 3">
<UniqueIdentifier>{5013cac9-94fd-404a-9590-be599c20b5ab}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="query.f">
@@ -59,6 +62,36 @@
<None Include="trappist_rss_time_formatter.cfg">
<Filter>Resource Files</Filter>
</None>
<None Include="standard_product_3\asi.orb.etalon2.171209.v70.sp3">
<Filter>Resource Files\Standard Product 3</Filter>
</None>
<None Include="standard_product_3\COD0MGXFIN_20181260000_01D_05M_ORB.SP3">
<Filter>Resource Files\Standard Product 3</Filter>
</None>
<None Include="standard_product_3\COD0MGXFIN_20183640000_01D_05M_ORB.SP3">
<Filter>Resource Files\Standard Product 3</Filter>
</None>
<None Include="standard_product_3\esa11802.eph">
<Filter>Resource Files\Standard Product 3</Filter>
</None>
<None Include="standard_product_3\ilrsa.orb.lageos2.160319.v35.sp3">
<Filter>Resource Files\Standard Product 3</Filter>
</None>
<None Include="standard_product_3\ilrsa.orb.lageos2.180804.v70.sp3">
<Filter>Resource Files\Standard Product 3</Filter>
</None>
<None Include="standard_product_3\ilrsb.orb.lageos2.160319.v35.sp3">
<Filter>Resource Files\Standard Product 3</Filter>
</None>
<None Include="standard_product_3\mcc14000.sp3">
<Filter>Resource Files\Standard Product 3</Filter>
</None>
<None Include="standard_product_3\nga20342.eph">
<Filter>Resource Files\Standard Product 3</Filter>
</None>
<None Include="standard_product_3\README.md">
<Filter>Resource Files\Standard Product 3</Filter>
</None>
</ItemGroup>
<ItemGroup>
<Text Include="sol_initial_state_jd_2433282_500000000.proto.txt">
@@ -218,5 +251,8 @@
<ClCompile Include="standard_product_3.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="standard_product_3_test.cpp">
<Filter>Test Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
29 changes: 12 additions & 17 deletions astronomy/geodesy_test.cpp
Original file line number Diff line number Diff line change
@@ -90,23 +90,18 @@ class GeodesyTest : public ::testing::Test {
TEST_F(GeodesyTest, LAGEOS2) {
MasslessBody lageos2;

// ilrsa.orb.lageos2.160319.v35.sp3, from
// ftp://cddis.gsfc.nasa.gov/pub/slr/products/orbits/lageos2/160319/.
StandardProduct3 initial_ilrsa(
SOLUTION_DIR / "astronomy" / "ilrsa.orb.lageos2.160319.v35.sp3",
StandardProduct3::Dialect::ILRSA);

// ilrsb.orb.lageos2.160319.v35.sp3, from
// ftp://cddis.gsfc.nasa.gov/pub/slr/products/orbits/lageos2/160319/.
StandardProduct3 initial_ilrsb(
SOLUTION_DIR / "astronomy" / "ilrsb.orb.lageos2.160319.v35.sp3",
StandardProduct3::Dialect::ILRSB);

// ilrsa.orb.lageos2.180804.v70.sp3, from
// ftp://cddis.gsfc.nasa.gov/pub/slr/products/orbits/lageos2/180804/.
StandardProduct3 final_ilrsa(
SOLUTION_DIR / "astronomy" / "ilrsa.orb.lageos2.180804.v70.sp3",
StandardProduct3::Dialect::ILRSA);
StandardProduct3 initial_ilrsa(SOLUTION_DIR / "astronomy" /
"standard_product_3" /
"ilrsa.orb.lageos2.160319.v35.sp3",
StandardProduct3::Dialect::ILRSA);
StandardProduct3 initial_ilrsb(SOLUTION_DIR / "astronomy" /
"standard_product_3" /
"ilrsb.orb.lageos2.160319.v35.sp3",
StandardProduct3::Dialect::ILRSB);
StandardProduct3 final_ilrsa(SOLUTION_DIR / "astronomy" /
"standard_product_3" /
"ilrsa.orb.lageos2.180804.v70.sp3",
StandardProduct3::Dialect::ILRSA);

StandardProduct3::SatelliteIdentifier const lageos2_id{
StandardProduct3::SatelliteGroup::General, 52};
43 changes: 36 additions & 7 deletions astronomy/standard_product_3.cpp
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@
#include <fstream>
#include <optional>
#include <string>
#include <vector>

#include "absl/strings/numbers.h"
#include "absl/strings/str_cat.h"
@@ -140,6 +141,7 @@ StandardProduct3::StandardProduct3(
std::forward_as_tuple());
CHECK(inserted) << "Duplicate satellite identifier " << id << ": "
<< full_location;
satellites_.push_back(id);
} else {
CHECK_EQ(columns(c, c + 2), " 0") << full_location;
}
@@ -256,6 +258,18 @@ StandardProduct3::StandardProduct3(
auto const it = orbits_.find(id);
CHECK(it != orbits_.end()) << "Unknown satellite identifier "
<< id << ": " << location;

// The SP3-c and SP3-d specification require that the satellite order of
// the P, EP, V, and EV records be the same as the order of the satellite
// ID records.
// This wording was added to the SP3-c specification by the 2006-09-27
// amendment, which describes it as a “clarification”, so the intent seems
// to be that this was required from the start for SP3-c, and perhaps for
// earlier versions as well.
// If this breaks for SP3-a or SP3-b, consider exempting these versions
// from the check.
CHECK_EQ(id, satellites_[i]) << location;

DiscreteTrajectory<ITRS>& orbit = it->second;

Position<ITRS> const position =
@@ -285,13 +299,14 @@ StandardProduct3::StandardProduct3(
Velocity<ITRS>({float_columns(5, 18) * (Deci(Metre) / Second),
float_columns(19, 32) * (Deci(Metre) / Second),
float_columns(33, 46) * (Deci(Metre) / Second)});
}

read_line();
if (version_ >= Version::C && line.has_value() && columns(1, 2) == "EV") {
// Ignore the optional EV record (the velocity and clock rate-of-change
// correlation record).
read_line();
if (version_ >= Version::C && line.has_value() &&
columns(1, 2) == "EV") {
// Ignore the optional EV record (the velocity and clock
// rate-of-change correlation record).
read_line();
}
}

orbit.Append(epoch, {position, velocity});
@@ -304,11 +319,25 @@ StandardProduct3::StandardProduct3(
CHECK(!line.has_value()) << location;
}

std::vector<StandardProduct3::SatelliteIdentifier> const&
StandardProduct3::satellites() const {
return satellites_;
}

DiscreteTrajectory<ITRS> const& StandardProduct3::orbit(
SatelliteIdentifier const& id) const {
return FindOrDie(orbits_, id);
}

StandardProduct3::Version StandardProduct3::version() const {
return version_;
}

bool operator==(StandardProduct3::SatelliteIdentifier const& left,
StandardProduct3::SatelliteIdentifier const& right) {
return left.group == right.group && left.index == right.index;
}

bool operator<(StandardProduct3::SatelliteIdentifier const& left,
StandardProduct3::SatelliteIdentifier const& right) {
return left.group < right.group ||
@@ -317,12 +346,12 @@ bool operator<(StandardProduct3::SatelliteIdentifier const& left,

std::ostream& operator<<(std::ostream& out,
StandardProduct3::Version const& version) {
return out << std::string(static_cast<char>(version), 1);
return out << std::string(1, static_cast<char>(version));
}

std::ostream& operator<<(std::ostream& out,
StandardProduct3::SatelliteGroup const& group) {
return out << std::string(static_cast<char>(group), 1);
return out << std::string(1, static_cast<char>(group));
}

std::ostream& operator<<(std::ostream& out,
11 changes: 11 additions & 0 deletions astronomy/standard_product_3.hpp
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@
#include <map>
#include <optional>
#include <string>
#include <vector>

#include "astronomy/frames.hpp"
#include "geometry/named_quantities.hpp"
@@ -75,15 +76,25 @@ class StandardProduct3 {

StandardProduct3(std::filesystem::path const& filename, Dialect dialect);

// The satellite identifiers in the order in which they appear in the file
// (that order is the same in the satellite ID records and within each epoch).
std::vector<SatelliteIdentifier> const& satellites() const;

DiscreteTrajectory<ITRS> const& orbit(SatelliteIdentifier const& id) const;

Version version() const;

private:
std::vector<SatelliteIdentifier> satellites_;
std::map<SatelliteIdentifier, DiscreteTrajectory<ITRS>> orbits_;
Version version_;

bool has_velocities_;
};

bool operator==(StandardProduct3::SatelliteIdentifier const& left,
StandardProduct3::SatelliteIdentifier const& right);

bool operator<(StandardProduct3::SatelliteIdentifier const& left,
StandardProduct3::SatelliteIdentifier const& right);

Loading