Program Listing for File analytical_orbit_dynamics.h¶
↰ Return to documentation for file (dynamics/analytical_orbit_dynamics.h)
#pragma once
#include "lupnt/dynamics/dynamics.h"
#include "lupnt/states/state.h"
namespace lupnt {
class AnalyticalDynamics : public Dynamics {
public:
virtual ~AnalyticalDynamics() = default;
using Dynamics::Propagate;
State Propagate(const State &x0, Real t0, Real tf, const State *u = nullptr) override;
MatX Propagate(const State &x0, const VecX &tfs, const State *u = nullptr) override;
virtual State Propagate(const State &x0, Real t0, Real tf, const State *u, MatXd *stm) override
= 0;
};
template <typename T = ClassicalOE> class KeplerianDynamics : public AnalyticalDynamics {
private:
Real GM_;
public:
KeplerianDynamics(Real GM) : GM_(GM) {}
using AnalyticalDynamics::Propagate;
State Propagate(const State &state, Real t0, Real tf, const State *u, MatXd *stm) override;
StateType GetStateType() const override { return T::TYPE; }
};
class ClohessyWiltshireDynamics : public AnalyticalDynamics {
private:
Real a_, n_;
VecX K_;
Real t0_;
public:
ClohessyWiltshireDynamics(Real a, Real n);
Mat6 ComputeMat(Real tf);
using AnalyticalDynamics::Propagate;
State Propagate(const State &state, Real t0, Real tf, const State *u, MatXd *stm) override;
StateType GetStateType() const override { return RelCart6::TYPE; }
};
class YamanakaAnkersenDynamics : public AnalyticalDynamics {
private:
Real a_, n_, e_, M0_;
VecX K_;
Real t0_;
VecX rv_rtn_;
public:
YamanakaAnkersenDynamics(const ClassicalOE &coe_c, const Cart6 &rv_rtn, Real GM_);
MatX ComputeMat(Real t);
MatX ComputeInverseMat(Real t);
using AnalyticalDynamics::Propagate;
State Propagate(const State &state, Real t0, Real tf, const State *u, MatXd *stm) override;
StateType GetStateType() const override { return ClassicalOE::TYPE; }
};
class RoeGeometricMappingDynamics : public AnalyticalDynamics {
private:
Real a_, e_, i_, w_, M0_;
Real ex_, ey_, n_;
VecX K_;
Real t0_;
public:
RoeGeometricMappingDynamics(const ClassicalOE coe_c, const QuasiNonsingROE &roe, Real GM);
MatX ComputeMat(Real t);
using AnalyticalDynamics::Propagate;
State Propagate(const State &state, Real t0, Real tf, const State *u, MatXd *stm) override;
StateType GetStateType() const override { return QuasiNonsingROE::TYPE; }
};
} // namespace lupnt