Program Listing for File forces.h

Return to documentation for file (environment/forces.h)

#pragma once

// C++ includes
#include <string>
#include <vector>

// lupnt includes
#include "lupnt/core/constants.h"
#include "lupnt/core/file.h"
#include "lupnt/environment/body.h"
#include "lupnt/numerics/math_utils.h"

template <typename T> using Vector3 = Eigen::Vector3<T>;
template <typename T> using Matrix3 = Eigen::Matrix<T, 3, 3>;
template <typename T> using MatrixX = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>;

namespace lupnt {

  template <typename T> Vector3<T> AccelarationGravityField(const Vector3<T>& r, T GM, T R_ref,
                                                            const MatrixX<T>& CS, int n_max,
                                                            int m_max);

  Vec3 AccelerationPointMass(const Vec3& r, const Vec3& s, Real GM);

  Vec3 AccelerationSolarRadiation(const Vec3& r, const Vec3& r_sun, Real bcoeff_srp, Real P0,
                                  Real AU);

  Vec3 AccelerationRelativisticCorrection(const Vec3& r, const Vec3& v, Real GM, Real c_light = C);

  Vec3 AccelerationDrag(Real mjd_tt, const Vec6& rv, const Mat3& T, Real bcoeff_drag);

  Real ShadowFunction(const Vec3& r, const Vec3& r_sun, Real R_body, Real R_sun = R_SUN);

  Real Illumination(const Vec3& r, const Vec3& r_sun, Real R_body);

  Real DensityHarrisPriester(Real mjd_tt, const Vec3& r_tod);

  Vec3 AccelerationEarthSpacecraft(Real mjd_tt, const Vec6& rv, Real bcoeff_srp, Real bcoeff_drag,
                                   GravityField<Real> grav);

}  // namespace lupnt