Skip to content

Commit 4b094a9

Browse files
authored
Merge pull request #3170 from pleroy/Redo
Convert mathematica, physics, astronomy and testing_utilities to DiscreteTraject0ry
2 parents a26020a + b2203ed commit 4b094a9

24 files changed

+251
-232
lines changed

astronomy/geodesy_test.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "gmock/gmock.h"
88
#include "gtest/gtest.h"
99
#include "physics/body_surface_dynamic_frame.hpp"
10+
#include "physics/discrete_traject0ry.hpp"
1011
#include "physics/solar_system.hpp"
1112
#include "quantities/si.hpp"
1213
#include "testing_utilities/approximate_quantity.hpp"
@@ -32,7 +33,7 @@ using integrators::methods::QuinlanTremaine1990Order12;
3233
using physics::BodySurfaceDynamicFrame;
3334
using physics::ContinuousTrajectory;
3435
using physics::DegreesOfFreedom;
35-
using physics::DiscreteTrajectory;
36+
using physics::DiscreteTraject0ry;
3637
using physics::Ephemeris;
3738
using physics::KeplerianElements;
3839
using physics::KeplerOrbit;
@@ -125,15 +126,15 @@ TEST_F(GeodesyTest, DISABLED_LAGEOS2) {
125126

126127
ephemeris_->Prolong(final_time);
127128

128-
DiscreteTrajectory<ICRS> primary_lageos2_trajectory;
129+
DiscreteTraject0ry<ICRS> primary_lageos2_trajectory;
129130
primary_lageos2_trajectory.Append(
130131
initial_time, itrs_.FromThisFrameAtTime(initial_time)(initial_dof_ilrsa));
131-
DiscreteTrajectory<ICRS> secondary_lageos2_trajectory;
132+
DiscreteTraject0ry<ICRS> secondary_lageos2_trajectory;
132133
secondary_lageos2_trajectory.Append(
133134
initial_time, itrs_.FromThisFrameAtTime(initial_time)(initial_dof_ilrsb));
134135
auto flow_lageos2 =
135136
[this, final_time](
136-
DiscreteTrajectory<ICRS>& lageos2_trajectory) -> absl::Status {
137+
DiscreteTraject0ry<ICRS>& lageos2_trajectory) -> absl::Status {
137138
return ephemeris_->FlowWithAdaptiveStep(
138139
&lageos2_trajectory,
139140
Ephemeris<ICRS>::NoIntrinsicAcceleration,

astronomy/lunar_orbit_test.cpp

+14-12
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#include "mathematica/mathematica.hpp"
1919
#include "physics/apsides.hpp"
2020
#include "physics/body_surface_dynamic_frame.hpp"
21-
#include "physics/discrete_trajectory.hpp"
21+
#include "physics/discrete_traject0ry.hpp"
2222
#include "physics/kepler_orbit.hpp"
2323
#include "physics/massless_body.hpp"
2424
#include "physics/oblate_body.hpp"
@@ -57,7 +57,7 @@ using physics::BodySurfaceDynamicFrame;
5757
using physics::ComputeApsides;
5858
using physics::ComputeNodes;
5959
using physics::DegreesOfFreedom;
60-
using physics::DiscreteTrajectory;
60+
using physics::DiscreteTraject0ry;
6161
using physics::Ephemeris;
6262
using physics::KeplerianElements;
6363
using physics::KeplerOrbit;
@@ -363,7 +363,7 @@ TEST_P(LunarOrbitTest, NearCircularRepeatGroundTrackOrbit) {
363363
IsNear(4.7e-13_⑴));
364364
}
365365

366-
DiscreteTrajectory<ICRS> trajectory;
366+
DiscreteTraject0ry<ICRS> trajectory;
367367
trajectory.Append(J2000, initial_state);
368368
auto const instance = ephemeris_->NewInstance(
369369
{&trajectory},
@@ -377,7 +377,7 @@ TEST_P(LunarOrbitTest, NearCircularRepeatGroundTrackOrbit) {
377377

378378
// To find the nodes, we need to convert the trajectory to a reference frame
379379
// whose xy plane is the Moon's equator.
380-
DiscreteTrajectory<LunarSurface> surface_trajectory;
380+
DiscreteTraject0ry<LunarSurface> surface_trajectory;
381381
for (auto const& [time, degrees_of_freedom] : trajectory) {
382382
surface_trajectory.Append(
383383
time, lunar_frame_.ToThisFrameAtTime(time)(degrees_of_freedom));
@@ -413,18 +413,20 @@ TEST_P(LunarOrbitTest, NearCircularRepeatGroundTrackOrbit) {
413413
mathematica::ExpressIn(Metre));
414414
}
415415

416-
DiscreteTrajectory<LunarSurface> ascending_nodes;
417-
DiscreteTrajectory<LunarSurface> descending_nodes;
418-
ComputeNodes(surface_trajectory.begin(),
416+
DiscreteTraject0ry<LunarSurface> ascending_nodes;
417+
DiscreteTraject0ry<LunarSurface> descending_nodes;
418+
ComputeNodes(surface_trajectory,
419+
surface_trajectory.begin(),
419420
surface_trajectory.end(),
420421
/*north=*/Vector<double, LunarSurface>({0, 0, 1}),
421422
/*max_points=*/std::numeric_limits<int>::max(),
422423
ascending_nodes,
423424
descending_nodes);
424425

425-
DiscreteTrajectory<ICRS> apoapsides;
426-
DiscreteTrajectory<ICRS> periapsides;
426+
DiscreteTraject0ry<ICRS> apoapsides;
427+
DiscreteTraject0ry<ICRS> periapsides;
427428
ComputeApsides(*ephemeris_->trajectory(moon_),
429+
trajectory,
428430
trajectory.begin(),
429431
trajectory.end(),
430432
/*max_points=*/std::numeric_limits<int>::max(),
@@ -433,12 +435,12 @@ TEST_P(LunarOrbitTest, NearCircularRepeatGroundTrackOrbit) {
433435

434436
struct Nodes {
435437
std::string_view const name;
436-
DiscreteTrajectory<LunarSurface> const& trajectory;
438+
DiscreteTraject0ry<LunarSurface> const& trajectory;
437439
};
438440

439441
struct Apsides {
440442
std::string_view const name;
441-
DiscreteTrajectory<ICRS> const& trajectory;
443+
DiscreteTraject0ry<ICRS> const& trajectory;
442444
};
443445

444446
std::vector<double> descending_node_eccentricities;
@@ -530,7 +532,7 @@ TEST_P(LunarOrbitTest, NearCircularRepeatGroundTrackOrbit) {
530532
{
531533
EccentricityVectorRange actual_period_ends;
532534
for (int orbit = 0;
533-
orbit < descending_nodes.Size();
535+
orbit < descending_nodes.size();
534536
orbit += orbits_per_period) {
535537
auto& actual = actual_period_ends;
536538
auto const e = descending_node_eccentricities[orbit];

astronomy/mercury_perihelion_test.cpp

-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include "integrators/symmetric_linear_multistep_integrator.hpp"
1313
#include "mathematica/mathematica.hpp"
1414
#include "physics/degrees_of_freedom.hpp"
15-
#include "physics/discrete_trajectory.hpp"
1615
#include "physics/ephemeris.hpp"
1716
#include "physics/kepler_orbit.hpp"
1817
#include "physics/massive_body.hpp"
@@ -33,7 +32,6 @@ using geometry::Position;
3332
using integrators::SymmetricLinearMultistepIntegrator;
3433
using integrators::methods::QuinlanTremaine1990Order12;
3534
using physics::ContinuousTrajectory;
36-
using physics::DiscreteTrajectory;
3735
using physics::Ephemeris;
3836
using physics::KeplerianElements;
3937
using physics::KeplerOrbit;

astronomy/orbit_analysis_test.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "mathematica/mathematica.hpp"
1515
#include "numerics/polynomial.hpp"
1616
#include "physics/body_centred_non_rotating_dynamic_frame.hpp"
17+
#include "physics/discrete_traject0ry.hpp"
1718
#include "physics/ephemeris.hpp"
1819
#include "physics/solar_system.hpp"
1920
#include "testing_utilities/approximate_quantity.hpp"
@@ -35,7 +36,7 @@ using numerics::EstrinEvaluator;
3536
using numerics::PolynomialInMonomialBasis;
3637
using physics::BodyCentredNonRotatingDynamicFrame;
3738
using physics::BodySurfaceDynamicFrame;
38-
using physics::DiscreteTrajectory;
39+
using physics::DiscreteTraject0ry;
3940
using physics::Ephemeris;
4041
using physics::MasslessBody;
4142
using physics::RotatingBody;
@@ -143,18 +144,18 @@ class OrbitAnalysisTest : public ::testing::Test {
143144

144145
// Returns a GCRS trajectory obtained by stitching together the trajectories
145146
// of |sp3_orbit.satellites| in |sp3_orbit.files|.
146-
not_null<std::unique_ptr<DiscreteTrajectory<GCRS>>> EarthCentredTrajectory(
147+
not_null<std::unique_ptr<DiscreteTraject0ry<GCRS>>> EarthCentredTrajectory(
147148
SP3Orbit const& sp3_orbit) {
148149
BodyCentredNonRotatingDynamicFrame<ICRS, GCRS> gcrs{ephemeris_.get(),
149150
&earth_};
150151
BodySurfaceDynamicFrame<ICRS, ITRS> itrs{ephemeris_.get(), &earth_};
151152

152-
auto result = make_not_null_unique<DiscreteTrajectory<GCRS>>();
153+
auto result = make_not_null_unique<DiscreteTraject0ry<GCRS>>();
153154
for (auto const& file : sp3_orbit.files.names) {
154155
StandardProduct3 sp3(
155156
SOLUTION_DIR / "astronomy" / "standard_product_3" / file,
156157
sp3_orbit.files.dialect);
157-
std::vector<not_null<DiscreteTrajectory<ITRS> const*>> const& orbit =
158+
std::vector<not_null<DiscreteTraject0ry<ITRS> const*>> const& orbit =
158159
sp3.orbit(sp3_orbit.satellite);
159160
CHECK_EQ(orbit.size(), 1);
160161
auto const& arc = *orbit.front();

astronomy/orbit_ground_track.hpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include "astronomy/orbit_recurrence.hpp"
88
#include "astronomy/orbital_elements.hpp"
99
#include "geometry/interval.hpp"
10-
#include "physics/discrete_trajectory.hpp"
10+
#include "physics/discrete_traject0ry.hpp"
1111
#include "physics/rotating_body.hpp"
1212

1313
namespace principia {
@@ -16,7 +16,7 @@ namespace internal_orbit_ground_track {
1616

1717
using geometry::Instant;
1818
using geometry::Interval;
19-
using physics::DiscreteTrajectory;
19+
using physics::DiscreteTraject0ry;
2020
using physics::RotatingBody;
2121
using quantities::Angle;
2222
using quantities::AngularFrequency;
@@ -67,7 +67,7 @@ class OrbitGroundTrack {
6767
// sun-synchronicity is analysed.
6868
template<typename PrimaryCentred, typename Inertial>
6969
static absl::StatusOr<OrbitGroundTrack> ForTrajectory(
70-
DiscreteTrajectory<PrimaryCentred> const& trajectory,
70+
DiscreteTraject0ry<PrimaryCentred> const& trajectory,
7171
RotatingBody<Inertial> const& primary,
7272
std::optional<MeanSun> const& mean_sun);
7373

astronomy/orbit_ground_track_body.hpp

+14-13
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ Angle CelestialLongitude(Position<PrimaryCentred> const& q) {
3131
// The resulting angles are neither normalized nor unwound.
3232
template<typename PrimaryCentred, typename Inertial>
3333
std::vector<Angle> PlanetocentricLongitudes(
34-
DiscreteTrajectory<PrimaryCentred> const& nodes,
34+
DiscreteTraject0ry<PrimaryCentred> const& nodes,
3535
RotatingBody<Inertial> const& primary) {
3636
std::vector<Angle> longitudes;
37-
longitudes.reserve(nodes.Size());
38-
for (auto const& node : nodes) {
37+
longitudes.reserve(nodes.size());
38+
for (auto const& [time, degrees_of_freedom] : nodes) {
3939
longitudes.push_back(
40-
CelestialLongitude(node.degrees_of_freedom.position()) -
41-
primary.AngleAt(node.time) - π / 2 * Radian);
40+
CelestialLongitude(degrees_of_freedom.position()) -
41+
primary.AngleAt(time) - π / 2 * Radian);
4242
}
4343
return longitudes;
4444
}
@@ -55,7 +55,7 @@ Angle MeanSolarTime(Iterator const& it,
5555

5656
template<typename PrimaryCentred>
5757
Interval<Angle> MeanSolarTimesOfNodes(
58-
DiscreteTrajectory<PrimaryCentred> const& nodes,
58+
DiscreteTraject0ry<PrimaryCentred> const& nodes,
5959
OrbitGroundTrack::MeanSun const& mean_sun) {
6060
Interval<Angle> mean_solar_times;
6161
std::optional<Angle> mean_solar_time;
@@ -120,24 +120,25 @@ inline OrbitGroundTrack::EquatorCrossingLongitudes::EquatorCrossingLongitudes(
120120

121121
template<typename PrimaryCentred, typename Inertial>
122122
absl::StatusOr<OrbitGroundTrack> OrbitGroundTrack::ForTrajectory(
123-
DiscreteTrajectory<PrimaryCentred> const& trajectory,
123+
DiscreteTraject0ry<PrimaryCentred> const& trajectory,
124124
RotatingBody<Inertial> const& primary,
125125
std::optional<MeanSun> const& mean_sun) {
126-
DiscreteTrajectory<PrimaryCentred> ascending_nodes;
127-
DiscreteTrajectory<PrimaryCentred> descending_nodes;
126+
DiscreteTraject0ry<PrimaryCentred> ascending_nodes;
127+
DiscreteTraject0ry<PrimaryCentred> descending_nodes;
128128
OrbitGroundTrack ground_track;
129-
RETURN_IF_ERROR(ComputeNodes(trajectory.begin(),
129+
RETURN_IF_ERROR(ComputeNodes(trajectory,
130+
trajectory.begin(),
130131
trajectory.end(),
131132
Vector<double, PrimaryCentred>({0, 0, 1}),
132133
/*max_points=*/std::numeric_limits<int>::max(),
133134
ascending_nodes,
134135
descending_nodes));
135136
if (mean_sun.has_value()) {
136-
if (!ascending_nodes.Empty()) {
137+
if (!ascending_nodes.empty()) {
137138
ground_track.mean_solar_times_of_ascending_nodes_ =
138139
MeanSolarTimesOfNodes(ascending_nodes, *mean_sun);
139140
}
140-
if (!descending_nodes.Empty()) {
141+
if (!descending_nodes.empty()) {
141142
ground_track.mean_solar_times_of_descending_nodes_ =
142143
MeanSolarTimesOfNodes(descending_nodes, *mean_sun);
143144
}
@@ -147,7 +148,7 @@ absl::StatusOr<OrbitGroundTrack> OrbitGroundTrack::ForTrajectory(
147148
ground_track.longitudes_of_equator_crossings_of_descending_passes_ =
148149
PlanetocentricLongitudes(descending_nodes, primary);
149150
ground_track.first_descending_pass_before_first_ascending_pass_ =
150-
!ascending_nodes.Empty() && !descending_nodes.Empty() &&
151+
!ascending_nodes.empty() && !descending_nodes.empty() &&
151152
descending_nodes.front().time < ascending_nodes.front().time;
152153
return ground_track;
153154
}

astronomy/orbital_elements.hpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include "geometry/interval.hpp"
77
#include "geometry/named_quantities.hpp"
88
#include "physics/body.hpp"
9-
#include "physics/discrete_trajectory.hpp"
9+
#include "physics/discrete_traject0ry.hpp"
1010
#include "physics/massive_body.hpp"
1111
#include "quantities/named_quantities.hpp"
1212
#include "quantities/quantities.hpp"
@@ -18,7 +18,7 @@ namespace internal_orbital_elements {
1818
using geometry::Instant;
1919
using geometry::Interval;
2020
using physics::Body;
21-
using physics::DiscreteTrajectory;
21+
using physics::DiscreteTraject0ry;
2222
using physics::MassiveBody;
2323
using quantities::Angle;
2424
using quantities::AngularFrequency;
@@ -37,7 +37,7 @@ class OrbitalElements {
3737

3838
template<typename PrimaryCentred>
3939
static absl::StatusOr<OrbitalElements> ForTrajectory(
40-
DiscreteTrajectory<PrimaryCentred> const& trajectory,
40+
DiscreteTraject0ry<PrimaryCentred> const& trajectory,
4141
MassiveBody const& primary,
4242
Body const& secondary);
4343

@@ -146,13 +146,13 @@ class OrbitalElements {
146146

147147
template<typename PrimaryCentred>
148148
static std::vector<EquinoctialElements> OsculatingEquinoctialElements(
149-
DiscreteTrajectory<PrimaryCentred> const& trajectory,
149+
DiscreteTraject0ry<PrimaryCentred> const& trajectory,
150150
MassiveBody const& primary,
151151
Body const& secondary);
152152

153153
template<typename PrimaryCentred>
154154
static std::vector<Length> RadialDistances(
155-
DiscreteTrajectory<PrimaryCentred> const& trajectory);
155+
DiscreteTraject0ry<PrimaryCentred> const& trajectory);
156156

157157
// |equinoctial_elements| must contain at least 2 elements.
158158
static absl::StatusOr<Time> SiderealPeriod(

astronomy/orbital_elements_body.hpp

+8-7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <algorithm>
66
#include <vector>
77

8+
#include "absl/strings/str_cat.h"
89
#include "base/jthread.hpp"
910
#include "base/status_utilities.hpp"
1011
#include "physics/kepler_orbit.hpp"
@@ -32,13 +33,13 @@ using quantities::si::Radian;
3233

3334
template<typename PrimaryCentred>
3435
absl::StatusOr<OrbitalElements> OrbitalElements::ForTrajectory(
35-
DiscreteTrajectory<PrimaryCentred> const& trajectory,
36+
DiscreteTraject0ry<PrimaryCentred> const& trajectory,
3637
MassiveBody const& primary,
3738
Body const& secondary) {
3839
OrbitalElements orbital_elements;
39-
if (trajectory.Size() < 2) {
40+
if (trajectory.size() < 2) {
4041
return absl::InvalidArgumentError(
41-
"trajectory.Size() is " + std::to_string(trajectory.Size()));
42+
absl::StrCat("trajectory.Size() is ", trajectory.size()));
4243
}
4344
orbital_elements.osculating_equinoctial_elements_ =
4445
OsculatingEquinoctialElements(trajectory, primary, secondary);
@@ -138,13 +139,13 @@ inline Interval<Length> OrbitalElements::radial_distance_interval() const {
138139
template<typename PrimaryCentred>
139140
std::vector<OrbitalElements::EquinoctialElements>
140141
OrbitalElements::OsculatingEquinoctialElements(
141-
DiscreteTrajectory<PrimaryCentred> const& trajectory,
142+
DiscreteTraject0ry<PrimaryCentred> const& trajectory,
142143
MassiveBody const& primary,
143144
Body const& secondary) {
144145
DegreesOfFreedom<PrimaryCentred> const primary_dof{
145146
PrimaryCentred::origin, PrimaryCentred::unmoving};
146147
std::vector<EquinoctialElements> result;
147-
result.reserve(trajectory.Size());
148+
result.reserve(trajectory.size());
148149
for (auto const& [time, degrees_of_freedom] : trajectory) {
149150
auto const osculating_elements =
150151
KeplerOrbit<PrimaryCentred>(primary,
@@ -175,9 +176,9 @@ OrbitalElements::OsculatingEquinoctialElements(
175176

176177
template<typename PrimaryCentred>
177178
std::vector<Length> OrbitalElements::RadialDistances(
178-
DiscreteTrajectory<PrimaryCentred> const& trajectory) {
179+
DiscreteTraject0ry<PrimaryCentred> const& trajectory) {
179180
std::vector<Length> radial_distances;
180-
radial_distances.reserve(trajectory.Size());
181+
radial_distances.reserve(trajectory.size());
181182
DegreesOfFreedom<PrimaryCentred> const primary_dof{PrimaryCentred::origin,
182183
PrimaryCentred::unmoving};
183184
for (auto const& [time, degrees_of_freedom] : trajectory) {

0 commit comments

Comments
 (0)