dynamics
cosmica.dynamics
__all__
module-attribute
__all__ = [
"CircularSatelliteOrbit",
"CircularSatelliteOrbitPropagator",
"EllipticalSatelliteOrbit",
"EllipticalSatelliteOrbitPropagator",
"MOPCSatelliteKey",
"MultiOrbitalPlaneConstellation",
"SatelliteConstellation",
"SatelliteOrbit",
"SatelliteOrbitState",
"get_sun_direction_eci",
"make_satellite_orbit",
]
CircularSatelliteOrbit
dataclass
CircularSatelliteOrbit(
*,
semi_major_axis: float,
inclination: float,
raan: float,
phase_at_epoch: float,
epoch: datetime64
)
Bases: SatelliteOrbit
dcm_orbit_to_eci
cached
property
dcm_orbit_to_eci: NDArray[floating]
epoch
instance-attribute
epoch: datetime64
inclination
instance-attribute
inclination: float
mean_motion
cached
property
mean_motion: float
phase_at_epoch
instance-attribute
phase_at_epoch: float
raan
instance-attribute
raan: float
semi_major_axis
instance-attribute
semi_major_axis: float
__post_init__
__post_init__() -> None
Source code in src/cosmica/dynamics/orbit.py
188 189 190 191 192 193 194 195 196 197 198 199 200 | |
propagate
propagate(time: NDArray[datetime64]) -> SatelliteOrbitState
Source code in src/cosmica/dynamics/orbit.py
210 211 | |
propagate_from_epoch
propagate_from_epoch(
time_from_epoch: NDArray[timedelta64],
) -> SatelliteOrbitState
Source code in src/cosmica/dynamics/orbit.py
213 214 | |
CircularSatelliteOrbitPropagator
CircularSatelliteOrbitPropagator(
model: CircularSatelliteOrbitModel,
)
Bases: SatelliteOrbitPropagator
Source code in src/cosmica/dynamics/orbit.py
67 68 | |
dcm_orbit_to_eci
cached
property
dcm_orbit_to_eci: NDArray[floating]
mean_motion
cached
property
mean_motion: float
propagate
propagate(time: NDArray[datetime64]) -> SatelliteOrbitState
Source code in src/cosmica/dynamics/orbit.py
92 93 94 | |
propagate_from_epoch
propagate_from_epoch(
time_from_epoch: NDArray[timedelta64],
) -> SatelliteOrbitState
Source code in src/cosmica/dynamics/orbit.py
96 97 98 99 100 101 102 103 104 105 106 107 108 109 | |
EllipticalSatelliteOrbit
dataclass
EllipticalSatelliteOrbit(
*,
semi_major_axis: float,
inclination: float,
raan: float,
phase_at_epoch: float,
epoch: datetime64,
satnum: int,
gravity_model: GravityModel = WGS84,
drag_coeff: float,
eccentricity: float,
argpo: float
)
Bases: SatelliteOrbit
argpo
instance-attribute
argpo: float
drag_coeff
instance-attribute
drag_coeff: float
eccentricity
instance-attribute
eccentricity: float
epoch
instance-attribute
epoch: datetime64
inclination
instance-attribute
inclination: float
mean_motion
cached
property
mean_motion: float
phase_at_epoch
instance-attribute
phase_at_epoch: float
raan
instance-attribute
raan: float
satellite
cached
property
satellite: EarthSatellite
satnum
instance-attribute
satnum: int
semi_major_axis
instance-attribute
semi_major_axis: float
ts
cached
property
ts: Timescale
__post_init__
__post_init__() -> None
Source code in src/cosmica/dynamics/orbit.py
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | |
datetime64_utc_to_skytime
datetime64_utc_to_skytime(
t_datetime64: NDArray[datetime64],
) -> Time
Source code in src/cosmica/dynamics/orbit.py
263 264 | |
propagate
propagate(time: NDArray[datetime64]) -> SatelliteOrbitState
Source code in src/cosmica/dynamics/orbit.py
270 271 | |
EllipticalSatelliteOrbitPropagator
EllipticalSatelliteOrbitPropagator(
model: EllipticalSatelliteOrbitModel,
reference_frame: ReferenceFrame = "gcrs",
)
Bases: SatelliteOrbitPropagator
Source code in src/cosmica/dynamics/orbit.py
113 114 115 116 117 118 119 120 | |
mean_motion
cached
property
mean_motion: float
reference_frame
instance-attribute
reference_frame = rf
satellite
cached
property
satellite: EarthSatellite
ts
cached
property
ts: Timescale
datetime64_utc_to_skytime
datetime64_utc_to_skytime(
t_datetime64: NDArray[datetime64],
) -> Time
Source code in src/cosmica/dynamics/orbit.py
130 131 132 | |
propagate
propagate(time: NDArray[datetime64]) -> SatelliteOrbitState
Source code in src/cosmica/dynamics/orbit.py
157 158 159 160 161 162 163 164 165 166 167 | |
MOPCSatelliteKey
Bases: NamedTuple
plane_id
instance-attribute
plane_id: int
satellite_id
instance-attribute
satellite_id: int
__str__
__str__() -> str
Source code in src/cosmica/dynamics/constellation.py
50 51 | |
MultiOrbitalPlaneConstellation
MultiOrbitalPlaneConstellation(
satellite_orbits: Mapping[
ConstellationSatellite[MOPCSatelliteKey], TOrbit
],
)
Bases: SatelliteConstellation[MOPCSatelliteKey, TOrbit]
A constellation of satellites in multiple orbital planes.
The satellite key is a tuple of the plane ID and the satellite ID.
Source code in src/cosmica/dynamics/constellation.py
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | |
n_satellites_per_plane
property
n_satellites_per_plane: int
Number of satellites per orbital plane.
It is assumed that all planes have the same number of satellites. Otherwise, it will raise an exception.
plane_id_to_satellites
instance-attribute
plane_id_to_satellites: dict[
int, list[ConstellationSatellite[MOPCSatelliteKey]]
] = {
plane_id: [
sat for sat in (satellites) if plane_id == plane_id
]
for plane_id in (plane_ids)
}
plane_ids
instance-attribute
plane_ids = sorted({(plane_id) for sat in (satellites)})
satellite_ids
instance-attribute
satellite_ids = sorted(
{(satellite_id) for sat in (satellites)}
)
satellite_orbits
instance-attribute
satellite_orbits = satellite_orbits
satellites
instance-attribute
satellites = tuple(keys())
from_toml_file
classmethod
from_toml_file(
toml_file_path: Path | str,
) -> MultiOrbitalPlaneConstellation
Source code in src/cosmica/dynamics/constellation.py
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | |
propagate
propagate(
time: NDArray[datetime64],
) -> dict[ConstellationSatellite[T], SatelliteOrbitState]
Source code in src/cosmica/dynamics/constellation.py
42 43 | |
SatelliteConstellation
Bases: ABC
A constellation of satellites.
satellite_orbits is a dictionary mapping satellite keys to satellite orbits.
propagate
propagate(
time: NDArray[datetime64],
) -> dict[ConstellationSatellite[T], SatelliteOrbitState]
Source code in src/cosmica/dynamics/constellation.py
42 43 | |
SatelliteOrbit
Bases: ABC
propagate
abstractmethod
propagate(time: NDArray[datetime64]) -> SatelliteOrbitState
Source code in src/cosmica/dynamics/orbit.py
172 173 | |
SatelliteOrbitState
dataclass
SatelliteOrbitState(
*,
position_eci: NDArray[floating],
velocity_eci: NDArray[floating]
)
position_eci
instance-attribute
position_eci: NDArray[floating]
velocity_eci
instance-attribute
velocity_eci: NDArray[floating]
__getitem__
__getitem__(item: int | slice) -> SatelliteOrbitState
Source code in src/cosmica/dynamics/orbit.py
51 52 53 54 55 | |
__post_init__
__post_init__() -> None
Source code in src/cosmica/dynamics/orbit.py
43 44 45 46 47 48 49 | |
calc_position_ecef
calc_position_ecef(
dcm_eci_to_ecef: NDArray[floating],
) -> NDArray[floating]
Source code in src/cosmica/dynamics/orbit.py
57 58 | |
get_sun_direction_eci
get_sun_direction_eci(
time: NDArray[datetime64],
) -> NDArray[float64]
get_sun_direction_eci(time: datetime64) -> NDArray[float64]
get_sun_direction_eci(
time: datetime64 | NDArray[datetime64],
) -> NDArray[float64]
Sun direction approximation function.
The approximation considers an unperturbed motion of the Earth around the Sun with mean orbital elements that approximate the Sun's elliptic orbit wrt Earth around the year 2000. The algorithm is based on Oliver Montenbruck, Eberhard Grill; "Satellite Orbits: Models, Methods and Applications"; Springer-Verlag Berlin. The alterations to the original model follow JAXA's Attitude Control Handbook JERG-2-510-HB001.
| PARAMETER | DESCRIPTION |
|---|---|
time
|
single element or array of UTC time values in np.datetime64 format.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
NDArray[float64]
|
Corresponding Sun direction vector(s) (x,y,z) in eci. If the input is a single element, the output is a 1D array. If the input is an array, the output is a 2D array with the shape (len(time), 3). |
Source code in src/cosmica/dynamics/sun_dynamics.py
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | |
make_satellite_orbit
make_satellite_orbit(
orbit_type: Literal["circular"],
*args: Any,
**kwargs: Any
) -> SatelliteOrbit
Source code in src/cosmica/dynamics/orbit.py
274 275 276 277 278 279 280 281 282 283 | |