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, and third-body perturbations.

Note

For conceptual explanations and usage examples, see Force Models in the User Guide.

ForceModelConfig

ForceModelConfig

ForceModelConfig(gravity: GravityConfiguration = None, drag: DragConfiguration = None, srp: SolarRadiationPressureConfiguration = None, third_body: ThirdBodyConfiguration = None, relativity: bool = False, mass: ParameterSource = 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

Third-body perturbations configuration. Default is None (disabled).

None
relativity bool

Enable relativistic corrections. Default is False.

False
mass ParameterSource

Spacecraft mass source. Default is None.

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 ThirdBodyConfiguration or None

Third-body perturbations configuration

relativity bool

Enable relativistic corrections

mass ParameterSource or None

Spacecraft mass source

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.

drag property

drag: Any

Get the drag configuration (None if disabled).

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 configuration (None if disabled).

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.

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

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]

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.

Configuration Components

GravityConfiguration

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

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_360.

None
use_global bool

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

False
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)

Initialize instance.

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_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.

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) -> 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_360.

None
use_global bool

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

False

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
)

DragConfiguration

DragConfiguration(model: AtmosphericModel, area: ParameterSource, cd: ParameterSource)

Atmospheric drag configuration.

Defines the atmospheric model and drag parameters.

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

Attributes:

Name Type Description
model AtmosphericModel

Atmospheric density model

area ParameterSource

Drag area source

cd ParameterSource

Drag coefficient source

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

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

Initialize instance.

area property

area: Any

Get the drag area parameter source.

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)

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

Attributes:

Name Type Description
area ParameterSource

SRP area source

cr ParameterSource

Reflectivity coefficient source

eclipse_model EclipseModel

Eclipse model

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.

ThirdBodyConfiguration

ThirdBodyConfiguration(ephemeris_source: EphemerisSource, bodies: list[ThirdBody])

Third-body perturbations configuration.

Defines which celestial bodies to include and ephemeris source.

Parameters:

Name Type Description Default
ephemeris_source EphemerisSource

Source for celestial body ephemerides.

required
bodies list[ThirdBody]

List of bodies to include as perturbers.

required

Attributes:

Name Type Description
ephemeris_source EphemerisSource

Ephemeris source

bodies list[ThirdBody]

List of perturbing bodies

Example
1
2
3
4
5
6
import brahe as bh

third_body = bh.ThirdBodyConfiguration(
    ephemeris_source=bh.EphemerisSource.DE440s,
    bodies=[bh.ThirdBody.SUN, bh.ThirdBody.MOON]
)

Initialize instance.

bodies property

bodies: Any

Get the list of third bodies.

ephemeris_source property

ephemeris_source: Any

Get the ephemeris source.

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
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON

Initialize instance.

JUPITER class-attribute

JUPITER: Any = ThirdBody.JUPITER

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON

MARS class-attribute

MARS: Any = ThirdBody.MARS

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON

MERCURY class-attribute

MERCURY: Any = ThirdBody.MERCURY

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON

MOON class-attribute

MOON: Any = ThirdBody.MOON

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON

NEPTUNE class-attribute

NEPTUNE: Any = ThirdBody.NEPTUNE

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON

SATURN class-attribute

SATURN: Any = ThirdBody.SATURN

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON

SUN class-attribute

SUN: Any = ThirdBody.SUN

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON

URANUS class-attribute

URANUS: Any = ThirdBody.URANUS

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON

VENUS class-attribute

VENUS: Any = ThirdBody.VENUS

Third-body perturber.

Celestial bodies that can act as gravitational perturbers.

Example
1
2
3
4
import brahe as bh

sun = bh.ThirdBody.SUN
moon = bh.ThirdBody.MOON

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