Skip to content

File KeplerianVop.hpp

File List > astrea > astro > astro > propagation > equations_of_motion > KeplerianVop.hpp

Go to the documentation of this file

#pragma once

#include <units/units.hpp>

#include <astro/astro.fwd.hpp>
#include <astro/propagation/equations_of_motion/EquationsOfMotion.hpp>
#include <astro/propagation/force_models/ForceModel.hpp>
#include <astro/state/orbital_elements/OrbitalElements.hpp>

namespace astrea {
namespace astro {

class KeplerianVop : public EquationsOfMotion {

  public:
    KeplerianVop(const ForceModel& forces, const bool doWarn = true);

    ~KeplerianVop() = default;

    OrbitalElementPartials operator()(const State& state, const Vehicle& vehicle) const override;

    StateTransitionMatrix compute_stm(const State& state, const Vehicle& vehicle) const override;

    constexpr std::size_t get_expected_set_id() const override { return OrbitalElements::get_set_id<Keplerian>(); };

  private:
    Unitless checkTol = 1e-10 * mp_units::one; 

    const ForceModel* forces; 
    GravParam mu;             
    bool doWarn;              

    void check_degenerate(const Unitless& ecc, const Angle& inc) const;
};

} // namespace astro
} // namespace astrea