Skip to content

Force Model Configuration

Configuration classes for numerical orbit propagation force models. ForceModelConfig provides factory methods for common configurations and allows customization of gravity, atmospheric drag, solar radiation pressure, third-body perturbations, and solid Earth and ocean tides.

Note

For conceptual explanations and usage examples, see Force Models in the User Guide. For CentralBody, lunar_default()/cislunar_default()/mars_default(), and state_in_frame, see Cislunar and Lunar Propagation and Propagation Around Other Central Bodies.

ForceModelConfig

ForceModelConfig

ForceModelConfig(gravity: GravityConfiguration = None, drag: DragConfiguration = None, srp: SolarRadiationPressureConfiguration = None, third_body: ThirdBodyConfiguration | ThirdBody | list = None, relativity: bool = False, mass: ParameterSource = None, frame_transform: FrameTransformationModel = None, tides: Any = None)

Force model configuration for numerical orbit propagation.

Defines all perturbation forces to be included: gravity, drag, SRP, third-body, relativity.

Parameters:

Name Type Description Default
gravity GravityConfiguration

Gravity model configuration. Default is point mass gravity.

None
drag DragConfiguration

Atmospheric drag configuration. Default is None (disabled).

None
srp SolarRadiationPressureConfiguration

Solar radiation pressure configuration. Default is None (disabled).

None
third_body ThirdBodyConfiguration | ThirdBody | list

Third-body perturbation entries; a single entry or a list mixing ThirdBody and ThirdBodyConfiguration values. Default is None (disabled).

None
relativity bool

Enable relativistic corrections. Default is False.

False
mass ParameterSource

Spacecraft mass source. Default is None.

None
frame_transform FrameTransformationModel

ECI-to-body-fixed rotation used by every body-fixed force term. Defaults to FULL_EARTH_ROTATION.

None

Attributes:

Name Type Description
gravity GravityConfiguration

Gravity model configuration

drag DragConfiguration or None

Atmospheric drag configuration

srp SolarRadiationPressureConfiguration or None

Solar radiation pressure configuration

third_body list[ThirdBodyConfiguration] or None

Third-body perturbation entries

relativity bool

Enable relativistic corrections

mass ParameterSource or None

Spacecraft mass source

frame_transform FrameTransformationModel

ECI-to-body-fixed rotation model

Example
import brahe as bh

# Create with explicit parameters
config = bh.ForceModelConfig(
    gravity=bh.GravityConfiguration(degree=20, order=20),
    relativity=True,
)

# Or use convenience class methods
config = bh.ForceModelConfig.default()
config = bh.ForceModelConfig.two_body()

Initialize instance.

central_body property

central_body: Any

Get the central body this configuration propagates relative to.

drag property

drag: Any

Get the drag configuration (None if disabled).

frame_transform property

frame_transform: Any

Get the ECI-to-body-fixed frame transformation model.

gravity property

gravity: Any

Get the gravity configuration.

mass property

mass: Any

Get the mass parameter source (None if not required).

relativity property

relativity: Any

Get whether relativistic corrections are enabled.

srp property

srp: Any

Get the solar radiation pressure configuration (None if disabled).

third_body property

third_body: Any

Get the third-body perturbation entries (None if disabled).

tides property

tides: Any

Get the tidal correction configuration (None if disabled).

cislunar_default builtin

cislunar_default() -> ForceModelConfig

Create a configuration suitable for cislunar propagation about the Earth-Moon barycenter.

Uses point mass gravity (the barycenter has no mass of its own), no drag, SRP occulted by Earth and the Moon, and Earth/Moon/Sun third-body perturbations (DE440s ephemerides). Requires parameter vector: [mass, , , srp_area, Cr]

Returns:

Name Type Description
ForceModelConfig ForceModelConfig

Configuration with the Earth-Moon barycenter as the central body.

conservative_forces builtin

conservative_forces() -> ForceModelConfig

Create a conservative forces configuration (gravity + third-body + relativity, no drag/SRP).

default builtin

default() -> ForceModelConfig

Create a default force model configuration.

Includes: - 20x20 EGM2008 gravity - Harris-Priester atmospheric drag - Solar radiation pressure with conical eclipse - Sun and Moon third-body perturbations

Requires parameter vector: [mass, drag_area, Cd, srp_area, Cr]

earth_gravity builtin

earth_gravity() -> ForceModelConfig

Create an Earth gravity-only configuration (no drag, SRP, or third-body).

Uses 20x20 EGM2008 gravity. No parameter vector required.

for_body builtin

for_body(central_body: CentralBody, gravity: GravityConfiguration, drag: DragConfiguration = None, srp: SolarRadiationPressureConfiguration = None, third_body: ThirdBodyConfiguration | ThirdBody | list = None, relativity: bool = False, mass: ParameterSource = None) -> ForceModelConfig

Create a force model configuration for a specific central body.

Convenience constructor that fills in frame_transform with its default (FrameTransformationModel.FULL_EARTH_ROTATION) so callers only need to specify the options that vary per central body. Does not validate the resulting configuration -- call validate() to check that the chosen options are compatible with central_body.

Parameters:

Name Type Description Default
central_body CentralBody

Body the orbit is propagated relative to.

required
gravity GravityConfiguration

Gravity model configuration.

required
drag DragConfiguration

Atmospheric drag configuration.

None
srp SolarRadiationPressureConfiguration

Solar radiation pressure configuration.

None
third_body ThirdBodyConfiguration | ThirdBody | list

Third-body perturbation entries; a single entry or a list mixing ThirdBody and ThirdBodyConfiguration values.

None
relativity bool

Enable relativistic corrections. Default is False.

False
mass ParameterSource

Spacecraft mass source.

None

Returns:

Name Type Description
ForceModelConfig ForceModelConfig

A force model configuration for central_body.

geo_default builtin

geo_default() -> ForceModelConfig

Create a configuration suitable for GEO satellites.

Includes SRP and third-body perturbations, omits drag. Requires parameter vector: [mass, , , srp_area, Cr]

high_fidelity builtin

high_fidelity() -> ForceModelConfig

Create a high-fidelity force model configuration.

Includes: - 120x120 EGM2008 gravity - NRLMSISE-00 atmospheric model - SRP with conical eclipse - Sun, Moon, and all planets (DE440s ephemerides) - Relativistic corrections - Solid Earth tides with frequency-dependent corrections and the solid pole tide - Ocean tides (FES2004, 30x30) with admittance and the ocean pole tide; requires a one-time cached download of the IERS FES2004 coefficient file

Requires parameter vector: [mass, drag_area, Cd, srp_area, Cr]

leo_default builtin

leo_default() -> ForceModelConfig

Create a configuration suitable for LEO satellites.

Includes drag and higher-order gravity, plus SRP and third-body. Requires parameter vector: [mass, drag_area, Cd, srp_area, Cr]

lunar_default builtin

lunar_default() -> ForceModelConfig

Create a configuration suitable for propagation about the Moon.

Uses 50x50 GRGM660PRIM lunar gravity, no drag, SRP occulted by the Moon and Earth, and Earth/Sun third-body perturbations (DE440s ephemerides). Requires parameter vector: [mass, , , srp_area, Cr]

Returns:

Name Type Description
ForceModelConfig ForceModelConfig

Configuration with the Moon as the central body.

mars_default builtin

mars_default() -> ForceModelConfig

Create a configuration suitable for propagation about Mars.

Uses 50x50 GMM-2B Mars gravity, exponential atmospheric drag, SRP occulted by Mars, and Sun third-body perturbations (DE440s ephemerides). Requires parameter vector: [mass, drag_area, Cd, srp_area, Cr]

Returns:

Name Type Description
ForceModelConfig ForceModelConfig

Configuration with Mars as the central body.

requires_params method descriptor

requires_params() -> Any

Check if this configuration requires a parameter vector.

two_body builtin

two_body() -> ForceModelConfig

Create a two-body (point mass) gravity configuration.

Uses only central body gravity with no perturbations. Produces results equivalent to Keplerian propagation. No parameter vector required.

validate method descriptor

validate() -> None

Validate that this configuration's options are compatible with its central body.

This method is called automatically at propagator construction; it may also be called explicitly ahead of time on a standalone configuration for early feedback.

Returns:

Name Type Description
None None

If the configuration is internally consistent.

Raises:

Type Description
RuntimeError

If the configuration is internally inconsistent (naming both the offending option and the central body).

Central Body

CentralBody

CentralBody()

The central body an orbit is propagated relative to.

Earth, Moon, and Mars are built in because they have dedicated named inertial/fixed frame pairs elsewhere in brahe (GCRF/ITRF, LCI/LFPA, MCI/MCMF). EMB and SSB are the Earth-Moon and Solar System barycenters -- useful as propagation origins for heliocentric or cislunar trajectories, but they have no physical radius, spin, or fixed frame. Any other body is constructed via CentralBody.Custom(...) or CentralBody.from_naif_id(...).

Example
1
2
3
4
5
import brahe as bh

earth = bh.CentralBody.Earth
moon = bh.CentralBody.Moon
enceladus = bh.CentralBody.from_naif_id(602)

Initialize instance.

EMB class-attribute

EMB: Any = CentralBody.EMB

The central body an orbit is propagated relative to.

Earth, Moon, and Mars are built in because they have dedicated named inertial/fixed frame pairs elsewhere in brahe (GCRF/ITRF, LCI/LFPA, MCI/MCMF). EMB and SSB are the Earth-Moon and Solar System barycenters -- useful as propagation origins for heliocentric or cislunar trajectories, but they have no physical radius, spin, or fixed frame. Any other body is constructed via CentralBody.Custom(...) or CentralBody.from_naif_id(...).

Example
1
2
3
4
5
import brahe as bh

earth = bh.CentralBody.Earth
moon = bh.CentralBody.Moon
enceladus = bh.CentralBody.from_naif_id(602)

Earth class-attribute

Earth: Any = CentralBody.Earth

The central body an orbit is propagated relative to.

Earth, Moon, and Mars are built in because they have dedicated named inertial/fixed frame pairs elsewhere in brahe (GCRF/ITRF, LCI/LFPA, MCI/MCMF). EMB and SSB are the Earth-Moon and Solar System barycenters -- useful as propagation origins for heliocentric or cislunar trajectories, but they have no physical radius, spin, or fixed frame. Any other body is constructed via CentralBody.Custom(...) or CentralBody.from_naif_id(...).

Example
1
2
3
4
5
import brahe as bh

earth = bh.CentralBody.Earth
moon = bh.CentralBody.Moon
enceladus = bh.CentralBody.from_naif_id(602)

Mars class-attribute

Mars: Any = CentralBody.Mars

The central body an orbit is propagated relative to.

Earth, Moon, and Mars are built in because they have dedicated named inertial/fixed frame pairs elsewhere in brahe (GCRF/ITRF, LCI/LFPA, MCI/MCMF). EMB and SSB are the Earth-Moon and Solar System barycenters -- useful as propagation origins for heliocentric or cislunar trajectories, but they have no physical radius, spin, or fixed frame. Any other body is constructed via CentralBody.Custom(...) or CentralBody.from_naif_id(...).

Example
1
2
3
4
5
import brahe as bh

earth = bh.CentralBody.Earth
moon = bh.CentralBody.Moon
enceladus = bh.CentralBody.from_naif_id(602)

Moon class-attribute

Moon: Any = CentralBody.Moon

The central body an orbit is propagated relative to.

Earth, Moon, and Mars are built in because they have dedicated named inertial/fixed frame pairs elsewhere in brahe (GCRF/ITRF, LCI/LFPA, MCI/MCMF). EMB and SSB are the Earth-Moon and Solar System barycenters -- useful as propagation origins for heliocentric or cislunar trajectories, but they have no physical radius, spin, or fixed frame. Any other body is constructed via CentralBody.Custom(...) or CentralBody.from_naif_id(...).

Example
1
2
3
4
5
import brahe as bh

earth = bh.CentralBody.Earth
moon = bh.CentralBody.Moon
enceladus = bh.CentralBody.from_naif_id(602)

SSB class-attribute

SSB: Any = CentralBody.SSB

The central body an orbit is propagated relative to.

Earth, Moon, and Mars are built in because they have dedicated named inertial/fixed frame pairs elsewhere in brahe (GCRF/ITRF, LCI/LFPA, MCI/MCMF). EMB and SSB are the Earth-Moon and Solar System barycenters -- useful as propagation origins for heliocentric or cislunar trajectories, but they have no physical radius, spin, or fixed frame. Any other body is constructed via CentralBody.Custom(...) or CentralBody.from_naif_id(...).

Example
1
2
3
4
5
import brahe as bh

earth = bh.CentralBody.Earth
moon = bh.CentralBody.Moon
enceladus = bh.CentralBody.from_naif_id(602)

Custom staticmethod

Custom(name: str, naif_id: int, gm: float, radius: float = None, omega: Union[ndarray, Sequence] = None, fixed_frame: ReferenceFrame = None) -> CentralBody

Construct a user-defined central body.

Parameters:

Name Type Description Default
name str

Human-readable name (e.g. "Enceladus").

required
naif_id int

NAIF ID of the body.

required
gm float

Gravitational parameter. Units: (m^3/s^2)

required
radius float

Mean or equatorial radius, if known. Units: (m)

None
omega ndarray or list

Body-fixed axial spin vector, if known. Units: (rad/s)

None
fixed_frame ReferenceFrame

Body-fixed reference frame, required for spherical-harmonic gravity and body-fixed rotations.

None

Returns:

Name Type Description
CentralBody CentralBody

A user-defined central body.

fixed_frame method descriptor

fixed_frame() -> ReferenceFrame

Body-fixed reference frame of this body, if one is defined.

Returns:

Type Description
ReferenceFrame

ReferenceFrame or None: ITRF for Earth, LFPA for Moon, MCMF for Mars,

ReferenceFrame

None for EMB/SSB, and custom.fixed_frame for Custom bodies.

from_naif_id staticmethod

from_naif_id(naif_id: int) -> CentralBody

Construct a CentralBody from a NAIF ID.

399, 301, 4/499, 3, and 0 map to the built-in Earth, Moon, Mars, EMB, and SSB variants respectively. A fixed table of other commonly used bodies maps to a pre-populated Custom variant.

Parameters:

Name Type Description Default
naif_id int

NAIF ID of the body.

required

Returns:

Name Type Description
CentralBody CentralBody

The corresponding central body.

Raises:

Type Description
ValueError

If naif_id is not a built-in body or in the embedded table.

gm method descriptor

gm() -> float

Gravitational parameter of the central body.

Returns:

Name Type Description
float float

Gravitational parameter. Units: (m^3/s^2). 0.0 for the EMB and SSB barycenters.

inertial_frame method descriptor

inertial_frame() -> ReferenceFrame

ICRF-aligned inertial reference frame centered on this body.

Returns:

Name Type Description
ReferenceFrame ReferenceFrame

GCRF for Earth, LCI for Moon, MCI for Mars, EMBI

ReferenceFrame

for EMB, SSBI for SSB, and BodyCenteredICRF(naif_id) for Custom bodies.

is_barycenter method descriptor

is_barycenter() -> bool

Whether this central body is a barycenter (EMB or SSB).

Returns:

Name Type Description
bool bool

True for EMB/SSB, False otherwise.

naif_id method descriptor

naif_id() -> int

NAIF ID of the central body.

Returns:

Name Type Description
int int

NAIF ID.

omega_vector method descriptor

omega_vector() -> ndarray

Body-fixed axial spin vector of the central body.

Returns:

Type Description
ndarray

numpy.ndarray or None: Spin vector expressed in the body's inertial frame, if

ndarray

known. Units: (rad/s). None for the EMB/SSB barycenters and for Custom

ndarray

bodies unless omega was set explicitly.

radius method descriptor

radius() -> float

Mean or equatorial radius of the central body.

Returns:

Type Description
float

float or None: Radius, if known. Units: (m). None for the EMB and SSB barycenters.

Configuration Components

GravityConfiguration

GravityConfiguration(degree: int = None, order: int = None, model_type: GravityModelType = None, use_global: bool = False, parallel: ParallelMode = None)

Gravity model configuration.

Specifies the gravity model: point mass or spherical harmonic expansion.

Parameters:

Name Type Description Default
degree int

Maximum degree of spherical harmonic expansion. If None, uses point mass gravity.

None
order int

Maximum order of spherical harmonic expansion. If None, uses point mass gravity.

None
model_type GravityModelType

Gravity model to use. Defaults to EGM2008_120.

None
use_global bool

If True, use global gravity model. Defaults to False.

False
parallel ParallelMode

Parallelization mode for the spherical-harmonic acceleration computation. Defaults to Auto.

None
Example
import brahe as bh

# Simple two-body point mass gravity (default)
gravity = bh.GravityConfiguration()

# Spherical harmonic with 20x20 degree/order
gravity = bh.GravityConfiguration(degree=20, order=20)

# Spherical harmonic with specific model
gravity = bh.GravityConfiguration(
    degree=20, order=20, model_type=bh.GravityModelType.GGM05S
)

# Alternative: use class methods
gravity = bh.GravityConfiguration.point_mass()
gravity = bh.GravityConfiguration.spherical_harmonic(degree=20, order=20)
gravity = bh.GravityConfiguration.earth_zonal(bh.ZonalHarmonicsDegree.J6)

Initialize instance.

earth_zonal builtin

earth_zonal(degree: ZonalHarmonicsDegree) -> GravityConfiguration

Create an Earth zonal-only gravity configuration (J_2..=J_n, m=0).

Equivalent to spherical_harmonic with m = 0 against the packaged Earth gravity model, but evaluated via an explicit closed-form expansion that the compiler can vectorise — ~50% faster for the same axially-symmetric expansion. Earth-specific because the J_n coefficients and reference radius are baked into the implementation.

Parameters:

Name Type Description Default
degree ZonalHarmonicsDegree

Maximum zonal degree (J_2 through J_6).

required

Returns:

Name Type Description
GravityConfiguration GravityConfiguration

Earth zonal gravity.

Example
1
2
3
import brahe as bh

gravity = bh.GravityConfiguration.earth_zonal(bh.ZonalHarmonicsDegree.J6)

get_degree method descriptor

get_degree() -> int

Get the degree (for spherical harmonic).

Returns:

Type Description
int

int or None: Degree if spherical harmonic, None otherwise.

get_earth_zonal_degree method descriptor

get_earth_zonal_degree() -> ZonalHarmonicsDegree

Get the zonal degree (for Earth zonal gravity).

Returns:

Type Description
ZonalHarmonicsDegree

ZonalHarmonicsDegree or None: Zonal degree if Earth zonal gravity, None otherwise.

get_order method descriptor

get_order() -> int

Get the order (for spherical harmonic).

Returns:

Type Description
int

int or None: Order if spherical harmonic, None otherwise.

get_parallel method descriptor

get_parallel() -> ParallelMode

Get the parallel mode (for spherical harmonic).

Returns:

Type Description
ParallelMode

ParallelMode or None: Parallel mode if spherical harmonic, None otherwise.

is_earth_zonal method descriptor

is_earth_zonal() -> Any

Check if this is Earth zonal gravity.

is_point_mass method descriptor

is_point_mass() -> Any

Check if this is point mass gravity.

is_spherical_harmonic method descriptor

is_spherical_harmonic() -> Any

Check if this is spherical harmonic gravity.

point_mass builtin

point_mass() -> GravityConfiguration

Create a point mass gravity configuration.

Returns:

Name Type Description
GravityConfiguration GravityConfiguration

Point mass (two-body) gravity.

spherical_harmonic builtin

spherical_harmonic(degree: int, order: int, model_type: GravityModelType = None, use_global: bool = False, parallel: ParallelMode = None) -> GravityConfiguration

Create a spherical harmonic gravity configuration.

Parameters:

Name Type Description Default
degree int

Maximum degree of expansion.

required
order int

Maximum order of expansion.

required
model_type GravityModelType

Gravity model to use. Defaults to EGM2008_120.

None
use_global bool

If True, use global gravity model. Defaults to False.

False
parallel ParallelMode

Parallelization mode for the spherical-harmonic acceleration computation. Defaults to Auto.

None

Returns:

Name Type Description
GravityConfiguration GravityConfiguration

Spherical harmonic gravity.

Example
1
2
3
4
5
6
7
8
9
import brahe as bh

# Default (EGM2008)
gravity = bh.GravityConfiguration.spherical_harmonic(degree=20, order=20)

# With specific model
gravity = bh.GravityConfiguration.spherical_harmonic(
    degree=20, order=20, model_type=bh.GravityModelType.GGM05S
)

zero builtin

Create a configuration with no gravity term from the propagation center. For barycentric propagation centers (CentralBody.EMB, CentralBody.SSB), which have no mass of their own: every gravitational force enters through the third-body entries.

Returns:

Name Type Description
GravityConfiguration GravityConfiguration

No central gravity term.

DragConfiguration

DragConfiguration(model: AtmosphericModel, area: ParameterSource, cd: ParameterSource, body: CentralBody = None)

Atmospheric drag configuration.

Defines the atmospheric model and drag parameters. The optional body attributes the drag to a body other than the propagation's central body: density and relative wind are then evaluated at the object's state relative to that body (e.g. Earth drag on an EMB-centered cislunar trajectory).

Parameters:

Name Type Description Default
model AtmosphericModel

Atmospheric density model.

required
area ParameterSource

Drag cross-sectional area source [m²].

required
cd ParameterSource

Drag coefficient source (dimensionless).

required
body CentralBody

Body whose atmosphere produces the drag. Defaults to None, meaning the propagation's central body.

None

Attributes:

Name Type Description
model AtmosphericModel

Atmospheric density model

area ParameterSource

Drag area source

cd ParameterSource

Drag coefficient source

body CentralBody or None

Attributed drag body

Example
import brahe as bh

drag = bh.DragConfiguration(
    model=bh.AtmosphericModel.HARRIS_PRIESTER,
    area=bh.ParameterSource.parameter_index(1),
    cd=bh.ParameterSource.value(2.2)
)

# Earth-attributed drag for an EMB-centered propagation
cislunar_drag = bh.DragConfiguration(
    model=bh.AtmosphericModel.NRLMSISE00,
    area=bh.ParameterSource.value(10.0),
    cd=bh.ParameterSource.value(2.2),
    body=bh.CentralBody.Earth,
)

Initialize instance.

area property

area: Any

Get the drag area parameter source.

body property

body: Any

Get the attributed drag body (None = the propagation's central body).

cd property

cd: Any

Get the drag coefficient parameter source.

model property

model: Any

Get the atmospheric model.

SolarRadiationPressureConfiguration

SolarRadiationPressureConfiguration(area: ParameterSource, cr: ParameterSource, eclipse_model: EclipseModel, occulting_bodies: list[OccultingBody] = None)

Solar radiation pressure configuration.

Defines the SRP parameters and eclipse model.

Parameters:

Name Type Description Default
area ParameterSource

SRP cross-sectional area source [m²].

required
cr ParameterSource

Coefficient of reflectivity source (dimensionless).

required
eclipse_model EclipseModel

Eclipse model for shadow effects.

required
occulting_bodies list[OccultingBody]

Bodies whose shadow may occult the sun. Defaults to [OccultingBody.Earth].

None

Attributes:

Name Type Description
area ParameterSource

SRP area source

cr ParameterSource

Reflectivity coefficient source

eclipse_model EclipseModel

Eclipse model

occulting_bodies list[OccultingBody]

Bodies whose shadow may occult the sun

Example
1
2
3
4
5
6
7
import brahe as bh

srp = bh.SolarRadiationPressureConfiguration(
    area=bh.ParameterSource.parameter_index(3),
    cr=bh.ParameterSource.parameter_index(4),
    eclipse_model=bh.EclipseModel.CONICAL
)

Initialize instance.

area property

area: Any

Get the SRP area parameter source.

cr property

cr: Any

Get the coefficient of reflectivity parameter source.

eclipse_model property

eclipse_model: Any

Get the eclipse model.

occulting_bodies property

occulting_bodies: Any

Get the bodies whose shadow may occult the sun.

ThirdBodyConfiguration

ThirdBodyConfiguration(body: ThirdBody, ephemeris_source: EphemerisSource = None, gravity: GravityConfiguration = None)

Configuration for a single third-body perturber.

Pairs a perturbing body with its ephemeris source and the gravity model used for its perturbation (point-mass by default; a spherical-harmonic or Earth-zonal field evaluates at the object's position relative to the body).

Parameters:

Name Type Description Default
body ThirdBody

The perturbing body.

required
ephemeris_source EphemerisSource

Source for the body's position. Defaults to EphemerisSource.DE440s.

None
gravity GravityConfiguration

Gravity model for this perturber. Defaults to point-mass.

None

Attributes:

Name Type Description
body ThirdBody

The perturbing body

ephemeris_source EphemerisSource

Ephemeris source

gravity GravityConfiguration

Gravity model for this perturber

Example
import brahe as bh

# Point-mass Moon from DE440s
moon = bh.ThirdBodyConfiguration(bh.ThirdBody.MOON)

# Earth as an 8x8 spherical-harmonic perturber (for an EMB-centered
# propagation)
earth = bh.ThirdBodyConfiguration(
    bh.ThirdBody.EARTH,
    gravity=bh.GravityConfiguration.spherical_harmonic(degree=8, order=8),
)

Initialize instance.

body property

body: Any

Get the perturbing body.

ephemeris_source property

ephemeris_source: Any

Get the ephemeris source.

gravity property

gravity: Any

Get the gravity model for this perturber.

TidesConfiguration

TidesConfiguration(permanent: PermanentTideConfig, solid: SolidTideConfig = None, ocean: OceanTideConfig = None, ephemeris_source: EphemerisSource = Ellipsis)

Tidal correction configuration for ForceModelConfig.

Parameters:

Name Type Description Default
permanent PermanentTideConfig

Permanent-tide / tide-system handling.

required
solid SolidTideConfig

Solid Earth tide configuration. None disables solid tides. Default is None.

None
ocean OceanTideConfig

Ocean tide configuration. None disables ocean tides. Default is None.

None
ephemeris_source EphemerisSource

Source for the Sun and Moon positions the tidal corrections are computed from. Defaults to EphemerisSource.LowPrecision (the analytic geocentric ephemerides), which is accurate enough for the ~1e-7 m/s^2 tidal perturbation. Set to a high-precision source to share positions with a third-body perturbation configured against the same source.

Ellipsis
Example
1
2
3
4
import brahe as bh

solid = bh.SolidTideConfig(frequency_dependent=True)
tides = bh.TidesConfiguration(permanent=bh.PermanentTideConfig.AUTO, solid=solid)

Initialize instance.

ephemeris_source property

ephemeris_source: Any

Get the ephemeris source for the tidal Sun and Moon positions.

ocean property

ocean: Any

Get the ocean tide configuration (None if disabled).

permanent property

permanent: Any

Get the permanent tide configuration.

solid property

solid: Any

Get the solid Earth tide configuration (None if disabled).

SolidTideConfig

SolidTideConfig(frequency_dependent: bool = False, pole_tide: bool = False)

Solid Earth tide settings.

Controls whether Step 2 (frequency-dependent) IERS corrections are applied, and whether the solid Earth pole tide is applied.

Parameters:

Name Type Description Default
frequency_dependent bool

Apply IERS Step 2 frequency-dependent corrections. Default is False.

False
pole_tide bool

Apply the solid Earth pole tide ΔC̄21/ΔS̄21 (IERS TN36 Section 6.4). Requires EOP initialization. Default is False.

False
Example
1
2
3
4
5
import brahe as bh

solid = bh.SolidTideConfig(frequency_dependent=True, pole_tide=True)
assert solid.frequency_dependent is True
assert solid.pole_tide is True

Initialize instance.

frequency_dependent property

frequency_dependent: Any

Whether Step 2 frequency-dependent corrections are enabled.

pole_tide property

pole_tide: Any

Whether the solid Earth pole tide is enabled.

OceanTideConfig

OceanTideConfig(degree: int = 20, order: int = 20, include_admittance: bool = True, pole_tide: bool = False)

FES2004 ocean tide configuration (IERS TN36 Section 6.3) plus the ocean pole tide (Section 6.5).

Requires a one-time download of the IERS FES2004 coefficient file into the brahe cache on first use.

Parameters:

Name Type Description Default
degree int

Truncation degree, 2-100. Defaults to 20.

20
order int

Truncation order, <= degree. Defaults to 20.

20
include_admittance bool

Add secondary waves by admittance interpolation (TN36 Table 6.7). Defaults to True.

True
pole_tide bool

Apply the ocean pole tide (2,1) term (TN36 Eq. 6.24). Requires EOP initialization. Defaults to False.

False
Example
1
2
3
4
5
6
7
8
import brahe as bh

ocean = bh.OceanTideConfig(degree=30, order=30)
tides = bh.TidesConfiguration(
    permanent=bh.PermanentTideConfig.AUTO,
    solid=bh.SolidTideConfig(frequency_dependent=True, pole_tide=True),
    ocean=ocean,
)

Initialize instance.

degree property

degree: Any

Truncation degree of the ocean tide expansion.

include_admittance property

include_admittance: Any

Whether secondary waves are added by admittance interpolation.

order property

order: Any

Truncation order of the ocean tide expansion.

pole_tide property

pole_tide: Any

Whether the ocean pole tide is enabled.

PermanentTideConfig

PermanentTideConfig()

Permanent (zero-frequency) tide handling for the static gravity field.

Controls how the loaded model's C̄20 is reconciled with the solid-tide model.

Use the class attributes AUTO and OFF for the unit variants, or PermanentTideConfig.convert_to(system) to force a specific tide system.

Example
import brahe as bh

# Auto-detect from model flag (default)
perm = bh.PermanentTideConfig.AUTO

# Disable permanent-tide correction
perm = bh.PermanentTideConfig.OFF

# Force convert to a specific system
perm = bh.PermanentTideConfig.convert_to(bh.GravityModelTideSystem.ZeroTide)

Initialize instance.

AUTO class-attribute

AUTO: Any = PermanentTideConfig.AUTO

Permanent (zero-frequency) tide handling for the static gravity field.

Controls how the loaded model's C̄20 is reconciled with the solid-tide model.

Use the class attributes AUTO and OFF for the unit variants, or PermanentTideConfig.convert_to(system) to force a specific tide system.

Example
import brahe as bh

# Auto-detect from model flag (default)
perm = bh.PermanentTideConfig.AUTO

# Disable permanent-tide correction
perm = bh.PermanentTideConfig.OFF

# Force convert to a specific system
perm = bh.PermanentTideConfig.convert_to(bh.GravityModelTideSystem.ZeroTide)

OFF class-attribute

OFF: Any = PermanentTideConfig.OFF

Permanent (zero-frequency) tide handling for the static gravity field.

Controls how the loaded model's C̄20 is reconciled with the solid-tide model.

Use the class attributes AUTO and OFF for the unit variants, or PermanentTideConfig.convert_to(system) to force a specific tide system.

Example
import brahe as bh

# Auto-detect from model flag (default)
perm = bh.PermanentTideConfig.AUTO

# Disable permanent-tide correction
perm = bh.PermanentTideConfig.OFF

# Force convert to a specific system
perm = bh.PermanentTideConfig.convert_to(bh.GravityModelTideSystem.ZeroTide)

convert_to staticmethod

convert_to(system: GravityModelTideSystem) -> PermanentTideConfig

Force the gravity field into the given tide system.

Parameters:

Name Type Description Default
system GravityModelTideSystem

Target tide system.

required

Returns:

Name Type Description
PermanentTideConfig PermanentTideConfig

A PermanentTideConfig that converts to the given system.

Enumerations

AtmosphericModel

AtmosphericModel()

Atmospheric density model selection.

Example
1
2
3
4
import brahe as bh

model = bh.AtmosphericModel.HARRIS_PRIESTER
model = bh.AtmosphericModel.NRLMSISE00

Initialize instance.

HARRIS_PRIESTER class-attribute

HARRIS_PRIESTER: Any = AtmosphericModel(HarrisPriester)

Atmospheric density model selection.

Example
1
2
3
4
import brahe as bh

model = bh.AtmosphericModel.HARRIS_PRIESTER
model = bh.AtmosphericModel.NRLMSISE00

NRLMSISE00 class-attribute

NRLMSISE00: Any = AtmosphericModel(NRLMSISE00)

Atmospheric density model selection.

Example
1
2
3
4
import brahe as bh

model = bh.AtmosphericModel.HARRIS_PRIESTER
model = bh.AtmosphericModel.NRLMSISE00

exponential builtin

exponential(scale_height: float, rho0: float, h0: float) -> AtmosphericModel

Create exponential atmosphere model with custom parameters.

Parameters:

Name Type Description Default
scale_height float

Scale height in meters.

required
rho0 float

Reference density in kg/m³.

required
h0 float

Reference altitude in meters.

required

EclipseModel

EclipseModel()

Eclipse model for solar radiation pressure calculations.

Example
1
2
3
4
import brahe as bh

eclipse = bh.EclipseModel.CONICAL
eclipse = bh.EclipseModel.CYLINDRICAL

Initialize instance.

CONICAL class-attribute

CONICAL: Any = EclipseModel.Conical

Eclipse model for solar radiation pressure calculations.

Example
1
2
3
4
import brahe as bh

eclipse = bh.EclipseModel.CONICAL
eclipse = bh.EclipseModel.CYLINDRICAL

CYLINDRICAL class-attribute

CYLINDRICAL: Any = EclipseModel.Cylindrical

Eclipse model for solar radiation pressure calculations.

Example
1
2
3
4
import brahe as bh

eclipse = bh.EclipseModel.CONICAL
eclipse = bh.EclipseModel.CYLINDRICAL

NONE class-attribute

NONE: Any = EclipseModel.None

Eclipse model for solar radiation pressure calculations.

Example
1
2
3
4
import brahe as bh

eclipse = bh.EclipseModel.CONICAL
eclipse = bh.EclipseModel.CYLINDRICAL

ThirdBody

ThirdBody()

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

Initialize instance.

DEIMOS class-attribute

DEIMOS: Any = ThirdBody.Deimos

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

EARTH class-attribute

EARTH: Any = ThirdBody.Earth

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

JUPITER class-attribute

JUPITER: Any = ThirdBody.Jupiter

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

JUPITER_BARYCENTER class-attribute

JUPITER_BARYCENTER: Any = ThirdBody.JupiterBarycenter

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

MARS class-attribute

MARS: Any = ThirdBody.Mars

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

MARS_BARYCENTER class-attribute

MARS_BARYCENTER: Any = ThirdBody.MarsBarycenter

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

MERCURY class-attribute

MERCURY: Any = ThirdBody.Mercury

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

MOON class-attribute

MOON: Any = ThirdBody.Moon

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

NEPTUNE class-attribute

NEPTUNE: Any = ThirdBody.Neptune

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

NEPTUNE_BARYCENTER class-attribute

NEPTUNE_BARYCENTER: Any = ThirdBody.NeptuneBarycenter

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

PHOBOS class-attribute

PHOBOS: Any = ThirdBody.Phobos

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

SATURN class-attribute

SATURN: Any = ThirdBody.Saturn

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

SATURN_BARYCENTER class-attribute

SATURN_BARYCENTER: Any = ThirdBody.SaturnBarycenter

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

SUN class-attribute

SUN: Any = ThirdBody.Sun

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

URANUS class-attribute

URANUS: Any = ThirdBody.Uranus

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

URANUS_BARYCENTER class-attribute

URANUS_BARYCENTER: Any = ThirdBody.UranusBarycenter

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

VENUS class-attribute

VENUS: Any = ThirdBody.Venus

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
5
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON
ceres = bh.ThirdBody.Custom(name="Ceres", naif_id=2000001, gm=6.26325e10)

Custom staticmethod

Custom(name: str, naif_id: int, gm: float) -> ThirdBody

Construct a user-defined perturbing body.

Parameters:

Name Type Description Default
name str

Human-readable name (e.g. "Ceres").

required
naif_id int

NAIF ID of the body.

required
gm float

Gravitational parameter. Units: (m^3/s^2)

required

Returns:

Name Type Description
ThirdBody ThirdBody

A user-defined perturbing body.

as_central_body method descriptor

as_central_body() -> CentralBody

The CentralBody equivalent of this perturber, if it is a physical body brahe knows how to treat as a frame/parameter center.

Returns:

Type Description
CentralBody

CentralBody | None: Central-body equivalent, or None for the barycenter variants and Custom bodies.

body_fixed_frame method descriptor

body_fixed_frame() -> ReferenceFrame

The body-fixed reference frame a gravity field attached to this body is expressed in (e.g. ITRF for Earth, LFPA for the Moon, MCMF for Mars).

Returns:

Type Description
ReferenceFrame

ReferenceFrame | None: Body-fixed frame, or None for the barycenter variants, Custom bodies, and bodies without a rotation model.

gm method descriptor

gm() -> float

Gravitational parameter of the perturbing body.

Returns:

Name Type Description
float float

Gravitational parameter. Units: (m^3/s^2)

naif_id method descriptor

naif_id() -> int

NAIF ID of the perturbing body.

Returns:

Name Type Description
int int

NAIF ID.

OccultingBody

OccultingBody()

Occulting body for eclipse/shadow modeling in solar radiation pressure calculations.

Identifies a celestial body whose shadow may occult the sun as seen from the spacecraft.

Example
1
2
3
4
import brahe as bh

earth = bh.OccultingBody.Earth
custom = bh.OccultingBody.Custom(name="Europa", naif_id=502, radius=1560.8e3)

Initialize instance.

Earth class-attribute

Earth: Any = OccultingBody.Earth

Occulting body for eclipse/shadow modeling in solar radiation pressure calculations.

Identifies a celestial body whose shadow may occult the sun as seen from the spacecraft.

Example
1
2
3
4
import brahe as bh

earth = bh.OccultingBody.Earth
custom = bh.OccultingBody.Custom(name="Europa", naif_id=502, radius=1560.8e3)

Mars class-attribute

Mars: Any = OccultingBody.Mars

Occulting body for eclipse/shadow modeling in solar radiation pressure calculations.

Identifies a celestial body whose shadow may occult the sun as seen from the spacecraft.

Example
1
2
3
4
import brahe as bh

earth = bh.OccultingBody.Earth
custom = bh.OccultingBody.Custom(name="Europa", naif_id=502, radius=1560.8e3)

Moon class-attribute

Moon: Any = OccultingBody.Moon

Occulting body for eclipse/shadow modeling in solar radiation pressure calculations.

Identifies a celestial body whose shadow may occult the sun as seen from the spacecraft.

Example
1
2
3
4
import brahe as bh

earth = bh.OccultingBody.Earth
custom = bh.OccultingBody.Custom(name="Europa", naif_id=502, radius=1560.8e3)

Custom staticmethod

Custom(name: str, naif_id: int, radius: float) -> OccultingBody

Construct a user-defined occulting body.

Parameters:

Name Type Description Default
name str

Descriptive name of the body.

required
naif_id int

NAIF ID of the physical body.

required
radius float

Mean physical radius of the body. Units: (m)

required

Returns:

Name Type Description
OccultingBody OccultingBody

A user-defined occulting body.

naif_id method descriptor

naif_id() -> int

NAIF ID of the physical occulting body.

Returns:

Name Type Description
int int

NAIF integer ID of the physical body.

naif_position_id method descriptor

naif_position_id() -> int

NAIF ID to use when resolving the occulting body's position via SPK ephemerides.

Returns:

Name Type Description
int int

NAIF integer ID to use for SPK position queries. Identical to naif_id

int

for every variant (the physical body center).

radius method descriptor

radius() -> float

Mean physical radius of the occulting body.

Returns:

Name Type Description
float float

Physical radius of the body. Units: (m)

ParameterSource

ParameterSource()

Source for a parameter value (fixed or from parameter vector).

Allows specifying whether a parameter comes from a fixed value or from an index in the parameter vector.

Example
1
2
3
4
5
6
7
import brahe as bh

# Fixed drag coefficient
cd = bh.ParameterSource.value(2.2)

# Variable mass from parameter vector index 0
mass = bh.ParameterSource.parameter_index(0)

Initialize instance.

get_index method descriptor

get_index() -> int

Get the parameter index (if this is a ParameterIndex source).

Returns:

Type Description
int

int or None: The parameter index, or None if this is a Value.

get_value method descriptor

get_value() -> float

Get the fixed value (if this is a Value source).

Returns:

Type Description
float

float or None: The fixed value, or None if this is a ParameterIndex.

is_parameter_index method descriptor

is_parameter_index() -> Any

Check if this source references a parameter index.

is_value method descriptor

is_value() -> Any

Check if this source is a fixed value.

parameter_index builtin

parameter_index(index: int) -> ParameterSource

Create a parameter index source.

Parameters:

Name Type Description Default
index int

Index into the parameter vector.

required

Returns:

Name Type Description
ParameterSource ParameterSource

A parameter source referencing a parameter vector index.

value builtin

value(value: float) -> ParameterSource

Create a fixed value parameter source.

Parameters:

Name Type Description Default
value float

The fixed parameter value.

required

Returns:

Name Type Description
ParameterSource ParameterSource

A parameter source with a fixed value.


See Also