void principia__InsertCelestialAbsoluteCartesian( Plugin* const plugin, int const celestial_index, int const* const parent_index, BodyParameters const body_parameters, char const* const x, char const* const y, char const* const z, char const* const vx, char const* const vy, char const* const vz) { journal::Method<journal::InsertCelestialAbsoluteCartesian> m( {plugin, celestial_index, parent_index, body_parameters, x, y, z, vx, vy, vz}); CHECK_NOTNULL(plugin); serialization::InitialState::Body initial_state; initial_state.set_x(x); initial_state.set_y(y); initial_state.set_z(z); initial_state.set_vx(vx); initial_state.set_vy(vy); initial_state.set_vz(vz); plugin->InsertCelestialAbsoluteCartesian( celestial_index, parent_index == nullptr ? std::experimental::nullopt : std::experimental::make_optional(*parent_index), SolarSystem<Barycentric>::MakeDegreesOfFreedom(initial_state), MakeMassiveBody(body_parameters)); return m.Return(); }
std::vector<not_null<std::unique_ptr<MassiveBody const>>> SolarSystem<Frame>::MakeAllMassiveBodies() { std::vector<not_null<std::unique_ptr<MassiveBody const>>> bodies; for (auto const& pair : gravity_model_map_) { serialization::GravityModel::Body const* const body = pair.second; CHECK(body->has_gravitational_parameter()); CHECK_EQ(body->has_j2(), body->has_reference_radius()); CHECK_EQ(body->has_axis_declination(), body->has_axis_right_ascension()); bodies.emplace_back(MakeMassiveBody(*body)); } return bodies; }
void principia__InsertCelestialJacobiKeplerian( Plugin* const plugin, int const celestial_index, int const* const parent_index, BodyParameters const body_parameters, KeplerianElements const* const keplerian_elements) { journal::Method<journal::InsertCelestialJacobiKeplerian> m( {plugin, celestial_index, parent_index, body_parameters, keplerian_elements}); CHECK_NOTNULL(plugin); plugin->InsertCelestialJacobiKeplerian( celestial_index, parent_index == nullptr ? std::experimental::nullopt : std::experimental::make_optional(*parent_index), keplerian_elements == nullptr ? std::experimental::nullopt : std::experimental::make_optional( FromKeplerianElements(*keplerian_elements)), MakeMassiveBody(body_parameters)); return m.Return(); }
GravitationalParameter SolarSystem<Frame>::gravitational_parameter( std::string const& name) const { return MakeMassiveBody(*gravity_model_map_.at(name))-> gravitational_parameter(); }