NRLMSISE-00¶
NRLMSISE-00 atmospheric density model.
See the Drag User Guide for concepts and usage.
NRLMSISE-00 atmospheric density model in pure JAX.
Provides temperature and density profiles of the Earth's atmosphere from
ground to thermospheric heights using the NRLMSISE-00 empirical model.
All functions are JIT-compatible and work with jax.jit, jax.vmap,
and jax.grad.
This implementation is based on Dominik Brodowski's C implementation (https://www.brodo.de/space/nrlmsise/), translated through SatelliteDynamics.jl and the brahe Rust crate to pure JAX.
Typical usage::
from astrojax.space_weather import load_default_sw
from astrojax.orbit_dynamics.nrlmsise00 import density_nrlmsise00
from astrojax.epoch import Epoch
sw = load_default_sw()
epc = Epoch.from_datetime(2020, 6, 1, 12, 0, 0.0)
r_ecef = jnp.array([6778137.0, 0.0, 0.0])
rho = density_nrlmsise00(sw, epc, r_ecef)
density_nrlmsise00(sw, epc, r_ecef)
¶
Atmospheric density [kg/m^3] from ECEF position using NRLMSISE-00.
Functional interface: space weather data is passed as an argument (not global state), enabling use in Monte Carlo simulations where each sample may use different space weather conditions.
Uses gtd7d which includes the contribution of anomalous oxygen
in total density (important above ~500 km).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
sw
|
SpaceWeatherData
|
Space weather data (loaded via
:func: |
required |
epc
|
Epoch
|
Epoch of computation. |
required |
r_ecef
|
ArrayLike
|
Satellite position in ECEF frame [m], shape |
required |
Returns:
| Type | Description |
|---|---|
Array
|
Atmospheric density [kg/m^3] (scalar). |
Examples:
import jax.numpy as jnp
from astrojax.space_weather import load_default_sw
from astrojax.orbit_dynamics.nrlmsise00 import density_nrlmsise00
from astrojax.epoch import Epoch
sw = load_default_sw()
epc = Epoch.from_datetime(2020, 6, 1, 12, 0, 0.0)
r_ecef = jnp.array([6778137.0, 0.0, 0.0])
rho = density_nrlmsise00(sw, epc, r_ecef)
density_nrlmsise00_geod(sw, epc, geod)
¶
Atmospheric density [kg/m^3] from geodetic coordinates using NRLMSISE-00.
Functional interface: space weather data is passed as an argument.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
sw
|
SpaceWeatherData
|
Space weather data. |
required |
epc
|
Epoch
|
Epoch of computation. |
required |
geod
|
ArrayLike
|
Geodetic position as |
required |
Returns:
| Type | Description |
|---|---|
Array
|
Atmospheric density [kg/m^3] (scalar). |
Examples:
import jax.numpy as jnp
from astrojax.space_weather import load_default_sw
from astrojax.orbit_dynamics.nrlmsise00 import density_nrlmsise00_geod
from astrojax.epoch import Epoch
sw = load_default_sw()
epc = Epoch.from_datetime(2020, 6, 1, 12, 0, 0.0)
geod = jnp.array([-74.0, 40.7, 400e3])
rho = density_nrlmsise00_geod(sw, epc, geod)
gtd7(doy, sec, alt, g_lat, g_lon, lst, f107a, f107, ap, ap_array, use_ap_array=True)
¶
NRLMSISE-00 main driver (thermosphere + lower atmosphere).
Computes atmospheric density and temperature at a given location and time. For altitudes above 72.5 km the thermospheric model is used directly; below that, mesospheric/stratospheric/tropospheric profiles are blended in.
All model switches are set to 1 (full model), with switch[0]=1 (SI units) and switch[9]=-1 (use AP array).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
doy
|
ArrayLike
|
Day of year (1-366). |
required |
sec
|
ArrayLike
|
Seconds in day (UT). |
required |
alt
|
ArrayLike
|
Altitude [km]. |
required |
g_lat
|
ArrayLike
|
Geodetic latitude [degrees]. |
required |
g_lon
|
ArrayLike
|
Geodetic longitude [degrees]. |
required |
lst
|
ArrayLike
|
Local apparent solar time [hours]. |
required |
f107a
|
ArrayLike
|
81-day average F10.7 flux. |
required |
f107
|
ArrayLike
|
Daily F10.7 flux. |
required |
ap
|
ArrayLike
|
Daily Ap magnetic index. |
required |
ap_array
|
Array
|
7-element Ap array for NRLMSISE-00. |
required |
Returns:
| Type | Description |
|---|---|
tuple[Array, Array]
|
Tuple of (temperatures [2], densities [9]) where: - temperatures[0]: Exospheric temperature [K] - temperatures[1]: Temperature at altitude [K] - densities[0]: He number density [m^-3] - densities[1]: O number density [m^-3] - densities[2]: N2 number density [m^-3] - densities[3]: O2 number density [m^-3] - densities[4]: Ar number density [m^-3] - densities[5]: Total mass density [kg/m^3] - densities[6]: H number density [m^-3] - densities[7]: N number density [m^-3] - densities[8]: Anomalous O number density [m^-3] |
gtd7d(doy, sec, alt, g_lat, g_lon, lst, f107a, f107, ap, ap_array, use_ap_array=True)
¶
NRLMSISE-00 driver with anomalous oxygen in total density.
Same as :func:gtd7 but recalculates total mass density d[5]
to include the contribution from anomalous oxygen d[8], which
is important above ~500 km.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
doy
|
ArrayLike
|
Day of year (1-366). |
required |
sec
|
ArrayLike
|
Seconds in day (UT). |
required |
alt
|
ArrayLike
|
Altitude [km]. |
required |
g_lat
|
ArrayLike
|
Geodetic latitude [degrees]. |
required |
g_lon
|
ArrayLike
|
Geodetic longitude [degrees]. |
required |
lst
|
ArrayLike
|
Local apparent solar time [hours]. |
required |
f107a
|
ArrayLike
|
81-day average F10.7 flux. |
required |
f107
|
ArrayLike
|
Daily F10.7 flux. |
required |
ap
|
ArrayLike
|
Daily Ap magnetic index. |
required |
ap_array
|
Array
|
7-element Ap array for NRLMSISE-00. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
Array
|
Tuple of (temperatures [2], densities [9]). |
|
See |
Array
|
func: |