Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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();
}
Ejemplo n.º 4
0
GravitationalParameter SolarSystem<Frame>::gravitational_parameter(
    std::string const& name) const {
  return MakeMassiveBody(*gravity_model_map_.at(name))->
             gravitational_parameter();
}