qtty-cpp 0.4.5
Header-only C++ wrapper for qtty
Loading...
Searching...
No Matches
satellite.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-3-Clause
2// Copyright (C) 2026 Vallés Puig, Ramon
3
4#pragma once
5
21#include <array>
22#include <string_view>
23
24#include "ffi_core.hpp"
26#include "units/length.hpp"
27#include "units/time.hpp"
28#include "units/velocity.hpp"
29
30namespace qtty {
31namespace satellite {
32
33// ── Compound kinematic unit aliases ─────────────────────────────────────────
34
37
38// ── Gravitational parameter μ = G·M (km³/s²) ────────────────────────────────
39
41
44
45// Canonical μ values (km³/s²), matching qtty::dynamics.
46inline const GravitationalParameter GM_EARTH{398600.4418};
47inline const GravitationalParameter GM_SUN{1.32712440018e11};
48inline const GravitationalParameter GM_MOON{4.902800066e3};
49inline const GravitationalParameter GM_MERCURY{2.2031878328e4};
50inline const GravitationalParameter GM_VENUS{3.24858592e5};
51inline const GravitationalParameter GM_MARS{4.2828375816e4};
52inline const GravitationalParameter GM_JUPITER{1.267127648e8};
53inline const GravitationalParameter GM_SATURN{3.79405852e7};
54inline const GravitationalParameter GM_URANUS{5.7945486e6};
55inline const GravitationalParameter GM_NEPTUNE{6.8365271005e6};
56inline const GravitationalParameter GM_PLUTO{9.770e2};
57
58// ── Dimensionless astrodynamics coefficients ────────────────────────────────
59
62public:
63 constexpr explicit DragCoefficient(double value) : m_value(value) {}
64 constexpr double value() const { return m_value; }
65
66private:
67 double m_value;
68};
69
72public:
73 constexpr explicit SrpCoefficient(double value) : m_value(value) {}
74 constexpr double value() const { return m_value; }
75
76private:
77 double m_value;
78};
79
82public:
83 constexpr explicit J2Coefficient(double value) : m_value(value) {}
84 constexpr double value() const { return m_value; }
85
86private:
87 double m_value;
88};
89
92public:
93 constexpr explicit StokesCoefficient(double value) : m_value(value) {}
94 constexpr double value() const { return m_value; }
95
96private:
97 double m_value;
98};
99
100// ── Integrator tolerances ───────────────────────────────────────────────────
101
104public:
105 constexpr explicit RelativeTolerance(double value) : m_value(value) {}
106 constexpr double value() const { return m_value; }
107
108private:
109 double m_value;
110};
111
114public:
115 constexpr explicit AbsoluteTolerancePosition(Kilometer quantity) : m_value(quantity) {}
119 double value() const { return m_value.value(); }
120
121private:
122 Kilometer m_value;
123};
124
127public:
128 constexpr explicit AbsoluteToleranceVelocity(KmPerSeconds quantity) : m_value(quantity) {}
132 double value() const { return m_value.value(); }
133
134private:
135 KmPerSeconds m_value;
136};
137
141 std::array<AbsoluteTolerancePosition, 3> abs_pos;
142 std::array<AbsoluteToleranceVelocity, 3> abs_vel;
143
150};
151
152} // namespace satellite
153} // namespace qtty
constexpr double value() const
Definition ffi_core.hpp:193
Absolute position tolerance, stored in kilometres.
constexpr AbsoluteTolerancePosition(Kilometer quantity)
static AbsoluteTolerancePosition new_km(double value)
Absolute velocity tolerance, stored in kilometres per second.
constexpr AbsoluteToleranceVelocity(KmPerSeconds quantity)
static AbsoluteToleranceVelocity new_km_s(double value)
Aerodynamic drag coefficient C_D (dimensionless).
Definition satellite.hpp:61
constexpr double value() const
Definition satellite.hpp:64
constexpr DragCoefficient(double value)
Definition satellite.hpp:63
Gravitational zonal harmonic J₂ coefficient (dimensionless).
Definition satellite.hpp:81
constexpr double value() const
Definition satellite.hpp:84
constexpr J2Coefficient(double value)
Definition satellite.hpp:83
Relative tolerance (dimensionless) for adaptive ODE integration.
constexpr RelativeTolerance(double value)
constexpr double value() const
Solar radiation pressure coefficient C_R (dimensionless).
Definition satellite.hpp:71
constexpr double value() const
Definition satellite.hpp:74
constexpr SrpCoefficient(double value)
Definition satellite.hpp:73
Fully-normalised Stokes geopotential coefficient C_nm / S_nm (dimensionless).
Definition satellite.hpp:91
constexpr StokesCoefficient(double value)
Definition satellite.hpp:93
constexpr double value() const
Definition satellite.hpp:94
Core quantity template and error translation utilities.
const GravitationalParameter GM_PLUTO
Definition satellite.hpp:56
const GravitationalParameter GM_MARS
Definition satellite.hpp:51
const GravitationalParameter GM_JUPITER
Definition satellite.hpp:52
const GravitationalParameter GM_SATURN
Definition satellite.hpp:53
const GravitationalParameter GM_URANUS
Definition satellite.hpp:54
Quantity< CompoundTag< KilometerTag, SecondTag > > KmPerSeconds
Kilometre per second (km/s) — orbital speed scale.
Definition satellite.hpp:36
const GravitationalParameter GM_MERCURY
Definition satellite.hpp:49
const GravitationalParameter GM_NEPTUNE
Definition satellite.hpp:55
const GravitationalParameter GM_SUN
Definition satellite.hpp:47
const GravitationalParameter GM_VENUS
Definition satellite.hpp:50
const GravitationalParameter GM_EARTH
Definition satellite.hpp:46
const GravitationalParameter GM_MOON
Definition satellite.hpp:48
constexpr bool is_angular_v
Definition angles.hpp:49
Quantity< KilometerTag > Kilometer
Definition length.hpp:326
Per-axis integrator tolerances for state propagation.
static IntegratorTolerances uniform(double rel, double abs_pos_km, double abs_vel_km_s)
Builds tolerances with the same value applied to every axis.
std::array< AbsoluteToleranceVelocity, 3 > abs_vel
std::array< AbsoluteTolerancePosition, 3 > abs_pos