Class BoxAndSolarArraySpacecraft
- java.lang.Object
-
- org.orekit.forces.BoxAndSolarArraySpacecraft
-
- All Implemented Interfaces:
DragSensitive
,RadiationSensitive
public class BoxAndSolarArraySpacecraft extends Object implements RadiationSensitive, DragSensitive
Class representing the features of a classical satellite with a convex body shape.The body can be either a simple parallelepipedic box aligned with spacecraft axes or a set of panels defined by their area and normal vector. Some panels may be moving to model solar arrays (or antennas that could point anywhere). This should handle accurately most spacecraft shapes. This model does not take cast shadows into account.
The lift component of the drag force can be optionally considered. It should probably only be used for reentry computation, with much denser atmosphere than in regular orbit propagation. The lift component is computed using a ratio of molecules that experience specular reflection instead of diffuse reflection (absorption followed by outgassing at negligible velocity). Without lift (i.e. when the lift ratio is set to 0), drag force is along atmosphere relative velocity. With lift (i.e. when the lift ratio is set to any value between 0 and 1), the drag force depends on both relative velocity direction and panels normal orientation. For a single panel, if the relative velocity is head-on (i.e. aligned with the panel normal), the force will be in the same direction with and without lift, but the magnitude with lift ratio set to 1.0 will be twice the magnitude with lift ratio set to 0.0 (because atmosphere molecules bounces backward at same velocity in case of specular reflection).
Each
panel
has its own set of radiation and drag coefficients. In orbit determination context, it would not be possible to estimate each panel individually, thereforegetDragParametersDrivers()
returns a singleparameter driver
representing aglobal drag multiplicative factor
that applies to all panels drag coefficients and thegetRadiationParametersDrivers()
returns a singleparameter driver
representing aglobal radiation multiplicative factor
that applies to all panels radiation coefficients.- Author:
- Luc Maisonobe, Pascal Parraud
-
-
Field Summary
-
Fields inherited from interface org.orekit.forces.drag.DragSensitive
DRAG_COEFFICIENT, GLOBAL_DRAG_FACTOR, LIFT_RATIO
-
Fields inherited from interface org.orekit.forces.radiation.RadiationSensitive
ABSORPTION_COEFFICIENT, GLOBAL_RADIATION_FACTOR, REFLECTION_COEFFICIENT
-
-
Constructor Summary
Constructors Constructor Description BoxAndSolarArraySpacecraft(double xLength, double yLength, double zLength, ExtendedPVCoordinatesProvider sun, double solarArrayArea, Vector3D solarArrayAxis, double dragCoeff, double liftRatio, double absorptionCoeff, double reflectionCoeff)
Build a spacecraft model with best lighting of solar array.BoxAndSolarArraySpacecraft(List<Panel> panels)
Build a spacecraft model.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static List<Panel>
buildBox(double xLength, double yLength, double zLength, double drag, double liftRatio, double absorption, double reflection)
Build the panels of a simple parallelepipedic box.static List<Panel>
buildPanels(double xLength, double yLength, double zLength, ExtendedPVCoordinatesProvider sun, double solarArrayArea, Vector3D solarArrayAxis, double drag, double liftRatio, double absorption, double reflection)
Build the panels of a simple parallelepiped box plus one solar array panel.<T extends CalculusFieldElement<T>>
FieldVector3D<T>dragAcceleration(FieldSpacecraftState<T> state, T density, FieldVector3D<T> relativeVelocity, T[] parameters)
Compute the acceleration due to drag.Vector3D
dragAcceleration(SpacecraftState state, double density, Vector3D relativeVelocity, double[] parameters)
Compute the acceleration due to drag.List<ParameterDriver>
getDragParametersDrivers()
Get the drivers for supported parameters.List<Panel>
getPanels()
Get the panels composing the body.List<ParameterDriver>
getRadiationParametersDrivers()
Get the drivers for supported parameters.<T extends CalculusFieldElement<T>>
FieldVector3D<T>radiationPressureAcceleration(FieldSpacecraftState<T> state, FieldVector3D<T> flux, T[] parameters)
Compute the acceleration due to radiation pressure.Vector3D
radiationPressureAcceleration(SpacecraftState state, Vector3D flux, double[] parameters)
Compute the acceleration due to radiation pressure.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.orekit.forces.drag.DragSensitive
dependsOnAttitudeRate
-
-
-
-
Constructor Detail
-
BoxAndSolarArraySpacecraft
public BoxAndSolarArraySpacecraft(List<Panel> panels)
Build a spacecraft model.- Parameters:
panels
- panels composing the body, solar arrays and antennas (only the panels with strictly positive area will be stored)- Since:
- 12.0
-
BoxAndSolarArraySpacecraft
public BoxAndSolarArraySpacecraft(double xLength, double yLength, double zLength, ExtendedPVCoordinatesProvider sun, double solarArrayArea, Vector3D solarArrayAxis, double dragCoeff, double liftRatio, double absorptionCoeff, double reflectionCoeff)
Build a spacecraft model with best lighting of solar array.Solar arrays orientation will be such that at each time the Sun direction will always be in the solar array meridian plane defined by solar array rotation axis and solar array normal vector.
- Parameters:
xLength
- length of the body along its X axis (m)yLength
- length of the body along its Y axis (m)zLength
- length of the body along its Z axis (m)sun
- sun modelsolarArrayArea
- area of the solar array (m²)solarArrayAxis
- solar array rotation axis in satellite framedragCoeff
- drag coefficient (used only for drag)liftRatio
- lift ratio (proportion between 0 and 1 of atmosphere modecules that will experience specular reflection when hitting spacecraft instead of experiencing diffuse reflection, hence producing lift)absorptionCoeff
- absorption coefficient between 0.0 an 1.0 (used only for radiation pressure)reflectionCoeff
- specular reflection coefficient between 0.0 an 1.0 (used only for radiation pressure)- Since:
- 12.0
-
-
Method Detail
-
getPanels
public List<Panel> getPanels()
Get the panels composing the body.- Returns:
- unmodifiable view of the panels composing the body
- Since:
- 12.0
-
getDragParametersDrivers
public List<ParameterDriver> getDragParametersDrivers()
Get the drivers for supported parameters.- Specified by:
getDragParametersDrivers
in interfaceDragSensitive
- Returns:
- parameters drivers
-
getRadiationParametersDrivers
public List<ParameterDriver> getRadiationParametersDrivers()
Get the drivers for supported parameters.- Specified by:
getRadiationParametersDrivers
in interfaceRadiationSensitive
- Returns:
- parameters drivers
-
dragAcceleration
public Vector3D dragAcceleration(SpacecraftState state, double density, Vector3D relativeVelocity, double[] parameters)
Compute the acceleration due to drag.The computation includes all spacecraft specific characteristics like shape, area and coefficients.
- Specified by:
dragAcceleration
in interfaceDragSensitive
- Parameters:
state
- current statedensity
- atmospheric density at spacecraft positionrelativeVelocity
- relative velocity of atmosphere with respect to spacecraft, in the same inertial frame as spacecraft orbit (m/s)parameters
- values of the force model parameters- Returns:
- spacecraft acceleration in the same inertial frame as spacecraft orbit (m/s²)
-
dragAcceleration
public <T extends CalculusFieldElement<T>> FieldVector3D<T> dragAcceleration(FieldSpacecraftState<T> state, T density, FieldVector3D<T> relativeVelocity, T[] parameters)
Compute the acceleration due to drag.The computation includes all spacecraft specific characteristics like shape, area and coefficients.
- Specified by:
dragAcceleration
in interfaceDragSensitive
- Type Parameters:
T
- instance of a CalculusFieldElement- Parameters:
state
- current statedensity
- atmospheric density at spacecraft positionrelativeVelocity
- relative velocity of atmosphere with respect to spacecraft, in the same inertial frame as spacecraft orbit (m/s)parameters
- values of the force model parameters- Returns:
- spacecraft acceleration in the same inertial frame as spacecraft orbit (m/s²)
-
radiationPressureAcceleration
public Vector3D radiationPressureAcceleration(SpacecraftState state, Vector3D flux, double[] parameters)
Compute the acceleration due to radiation pressure.- Specified by:
radiationPressureAcceleration
in interfaceRadiationSensitive
- Parameters:
state
- current stateflux
- radiation flux in the same inertial frame as spacecraft orbitparameters
- values of the force model parameters- Returns:
- spacecraft acceleration in the same inertial frame as spacecraft orbit (m/s²)
-
radiationPressureAcceleration
public <T extends CalculusFieldElement<T>> FieldVector3D<T> radiationPressureAcceleration(FieldSpacecraftState<T> state, FieldVector3D<T> flux, T[] parameters)
Compute the acceleration due to radiation pressure.This method implements equation 8-44 from David A. Vallado's Fundamentals of Astrodynamics and Applications, third edition, 2007, Microcosm Press.
- Specified by:
radiationPressureAcceleration
in interfaceRadiationSensitive
- Type Parameters:
T
- extends CalculusFieldElement- Parameters:
state
- current stateflux
- radiation flux in the same inertial frame as spacecraft orbitparameters
- values of the force model parameters- Returns:
- spacecraft acceleration in the same inertial frame as spacecraft orbit (m/s²)
-
buildBox
public static List<Panel> buildBox(double xLength, double yLength, double zLength, double drag, double liftRatio, double absorption, double reflection)
Build the panels of a simple parallelepipedic box.- Parameters:
xLength
- length of the body along its X axis (m)yLength
- length of the body along its Y axis (m)zLength
- length of the body along its Z axis (m)drag
- drag coefficientliftRatio
- drag lift ratio (proportion between 0 and 1 of atmosphere modecules that will experience specular reflection when hitting spacecraft instead of experiencing diffuse reflection, hence producing lift)absorption
- radiation pressure absorption coefficient (between 0 and 1)reflection
- radiation pressure specular reflection coefficient (between 0 and 1)- Returns:
- surface vectors array
- Since:
- 12.0
-
buildPanels
public static List<Panel> buildPanels(double xLength, double yLength, double zLength, ExtendedPVCoordinatesProvider sun, double solarArrayArea, Vector3D solarArrayAxis, double drag, double liftRatio, double absorption, double reflection)
Build the panels of a simple parallelepiped box plus one solar array panel.- Parameters:
xLength
- length of the body along its X axis (m)yLength
- length of the body along its Y axis (m)zLength
- length of the body along its Z axis (m)sun
- sun modelsolarArrayArea
- area of the solar array (m²)solarArrayAxis
- solar array rotation axis in satellite framedrag
- drag coefficientliftRatio
- drag lift ratio (proportion between 0 and 1 of atmosphere modecules that will experience specular reflection when hitting spacecraft instead of experiencing diffuse reflection, hence producing lift)absorption
- radiation pressure absorption coefficient (between 0 and 1)reflection
- radiation pressure specular reflection coefficient (between 0 and 1)- Returns:
- surface vectors array
- Since:
- 12.0
-
-