Skip to content

Solar Radiation Pressure

Solar radiation pressure acceleration and eclipse modeling.

Note

For conceptual explanations and examples, see Solar Radiation Pressure in the Learn section.

SRP Acceleration

accel_solar_radiation_pressure builtin

accel_solar_radiation_pressure(r_object: ndarray, r_sun: ndarray, mass: float, cr: float, area: float, p0: float) -> ndarray

Calculate acceleration due to solar radiation pressure.

Accepts either a 3D position vector or a 6D state vector for r_object.

Parameters:

Name Type Description Default
r_object ndarray

Position (length 3) or state (length 6) of the object. Units: (m)

required
r_sun ndarray

Position vector of the sun. Units: (m)

required
mass float

Mass of the object. Units: (kg)

required
cr float

Coefficient of reflectivity (dimensionless)

required
area float

Cross-sectional area of the object. Units: (m²)

required
p0 float

Solar radiation pressure at 1 AU. Units: (N/m²)

required

Returns:

Type Description
ndarray

np.ndarray: Acceleration due to solar radiation pressure. Units: (m/s²)

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

epc = bh.Epoch.from_date(2024, 2, 25, bh.TimeSystem.UTC)
r_object = np.array([bh.R_EARTH + 500e3, 0.0, 0.0])
r_sun = bh.sun_position(epc)
a_srp = bh.accel_solar_radiation_pressure(r_object, r_sun, 1000.0, 1.8, 1.0, 4.56e-6)

Eclipse Modeling

eclipse_conical builtin

eclipse_conical(r_object: ndarray, r_sun: ndarray) -> float

Calculate the fraction of the object illuminated by the sun using a conical (penumbral) shadow model.

The conical shadow model accounts for the finite size of both the Sun and Earth, modeling the penumbra region where the satellite receives partial sunlight. This is more accurate than the cylindrical model but computationally more expensive.

Accepts either a 3D position vector or a 6D state vector for r_object.

Parameters:

Name Type Description Default
r_object ndarray

Position (length 3) or state (length 6) of the object in ECI frame. Units: (m)

required
r_sun ndarray

Position vector of the sun in ECI frame. Units: (m)

required

Returns:

Name Type Description
float float

Illumination fraction between 0.0 and 1.0. Values: 0.0 (full shadow/umbra), 0.0-1.0 (partial shadow/penumbra), 1.0 (full sunlight)

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

epc = bh.Epoch.from_date(2024, 1, 1, bh.TimeSystem.UTC)
r_sat = np.array([bh.R_EARTH + 400e3, 0.0, 0.0])
r_sun = bh.sun_position(epc)

nu = bh.eclipse_conical(r_sat, r_sun)
print(f"Illumination fraction: {nu}")

eclipse_cylindrical builtin

eclipse_cylindrical(r_object: ndarray, r_sun: ndarray) -> float

Calculate the fraction of the object illuminated by the sun using a cylindrical shadow model.

The cylindrical shadow model is a simplified approach that assumes Earth casts a cylindrical shadow parallel to the Sun-Earth line. This model is computationally efficient and provides binary shadow determination (fully lit or fully shadowed, no penumbra).

Accepts either a 3D position vector or a 6D state vector for r_object.

Parameters:

Name Type Description Default
r_object ndarray

Position (length 3) or state (length 6) of the object in ECI frame. Units: (m)

required
r_sun ndarray

Position vector of the sun in ECI frame. Units: (m)

required

Returns:

Name Type Description
float float

Illumination fraction, either 0.0 (full shadow) or 1.0 (full sunlight). No partial illumination is returned by this model.

Example
import brahe as bh
import numpy as np

epc = bh.Epoch.from_date(2024, 1, 1, bh.TimeSystem.UTC)
r_sat = np.array([bh.R_EARTH + 400e3, 0.0, 0.0])
r_sun = bh.sun_position(epc)

nu = bh.eclipse_cylindrical(r_sat, r_sun)
if nu == 0.0:
    print("Satellite is in Earth's shadow")
else:
    print("Satellite is in sunlight")

See Also