Class ParametricAcceleration
- java.lang.Object
-
- org.orekit.forces.empirical.ParametricAcceleration
-
- All Implemented Interfaces:
ForceModel
,EventDetectorsProvider
,ParameterDriversProvider
public class ParametricAcceleration extends Object implements ForceModel
This class implements a parametric acceleration.Parametric accelerations are intended to model lesser-known forces, estimating a few defining parameters from a parametric function using orbit determination. Typical parametric functions are polynomial (often limited to a constant term) and harmonic (often with either orbital period or half orbital period).
An important operational example is the infamous GPS Y-bias, which is thought to be related to a radiator thermal radiation. Other examples could be to model leaks that produce roughly constant trust in some spacecraft-related direction.
The acceleration direction is considered constant in either:
- inertial frame
- spacecraft frame
- a dedicated attitude frame overriding spacecraft attitude (this could for example be used to model solar arrays orientation if the force is related to solar arrays)
If the direction of the acceleration is unknown, then three instances of this class should be used, one along the X axis, one along the Y axis and one along the Z axis and their parameters estimated as usual.
- Since:
- 10.3
- Author:
- Luc Maisonobe, Bryan Cazabonne, Melina Vanel
-
-
Field Summary
-
Fields inherited from interface org.orekit.propagation.events.EventDetectorsProvider
DATATION_ACCURACY
-
-
Constructor Summary
Constructors Constructor Description ParametricAcceleration(Vector3D direction, boolean isInertial, AccelerationModel accelerationModel)
Simple constructor.ParametricAcceleration(Vector3D direction, AttitudeProvider attitudeOverride, AccelerationModel accelerationModel)
Simple constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <T extends CalculusFieldElement<T>>
FieldVector3D<T>acceleration(FieldSpacecraftState<T> state, T[] parameters)
Compute acceleration.Vector3D
acceleration(SpacecraftState state, double[] parameters)
Compute acceleration.boolean
dependsOnPositionOnly()
Check if force models depends on position only.Stream<EventDetector>
getEventDetectors()
Get the discrete events related to the model.<T extends CalculusFieldElement<T>>
Stream<FieldEventDetector<T>>getFieldEventDetectors(Field<T> field)
Get the discrete events related to the model.List<ParameterDriver>
getParametersDrivers()
Get the drivers for parameters.void
init(SpacecraftState initialState, AbsoluteDate target)
Initialize the force model at the start of propagation.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.orekit.propagation.events.EventDetectorsProvider
getEventDetectors, getFieldEventDetectors
-
Methods inherited from interface org.orekit.forces.ForceModel
addContribution, addContribution, init
-
Methods inherited from interface org.orekit.utils.ParameterDriversProvider
getNbParametersDriversValue, getParameterDriver, getParameters, getParameters, getParameters, getParameters, getParametersAllValues, getParametersAllValues, isSupported
-
-
-
-
Constructor Detail
-
ParametricAcceleration
public ParametricAcceleration(Vector3D direction, boolean isInertial, AccelerationModel accelerationModel)
Simple constructor.- Parameters:
direction
- acceleration direction in overridden spacecraft frameisInertial
- if true, direction is defined in the same inertial frame used for propagation (i.e.SpacecraftState.getFrame()
), otherwise direction is defined in spacecraft frame (i.e. using the propagationattitude law
)accelerationModel
- acceleration model used to compute the contribution of the empirical acceleration direction
-
ParametricAcceleration
public ParametricAcceleration(Vector3D direction, AttitudeProvider attitudeOverride, AccelerationModel accelerationModel)
Simple constructor.- Parameters:
direction
- acceleration direction in overridden spacecraft frame frame used for propagation (i.e.SpacecraftState.getFrame()
), otherwise direction is defined in spacecraft frame (i.e. using the propagationattitude law
)attitudeOverride
- provider for attitude used to compute accelerationaccelerationModel
- acceleration model used to compute the contribution of the empirical acceleration direction
-
-
Method Detail
-
dependsOnPositionOnly
public boolean dependsOnPositionOnly()
Check if force models depends on position only.- Specified by:
dependsOnPositionOnly
in interfaceForceModel
- Returns:
- true if force model depends on position only, false if it depends on velocity, either directly or due to a dependency on attitude
-
getParametersDrivers
public List<ParameterDriver> getParametersDrivers()
Get the drivers for parameters.- Specified by:
getParametersDrivers
in interfaceParameterDriversProvider
- Returns:
- drivers for parameters
-
init
public void init(SpacecraftState initialState, AbsoluteDate target)
Initialize the force model at the start of propagation. This method will be called before any calls toForceModel.addContribution(SpacecraftState, TimeDerivativesEquations)
,ForceModel.addContribution(FieldSpacecraftState, FieldTimeDerivativesEquations)
,ForceModel.acceleration(SpacecraftState, double[])
orForceModel.acceleration(FieldSpacecraftState, CalculusFieldElement[])
The default implementation of this method does nothing.
- Specified by:
init
in interfaceForceModel
- Parameters:
initialState
- spacecraft state at the start of propagation.target
- date of propagation. Not equal toinitialState.getDate()
.
-
acceleration
public Vector3D acceleration(SpacecraftState state, double[] parameters)
Compute acceleration.- Specified by:
acceleration
in interfaceForceModel
- Parameters:
state
- current state information: date, kinematics, attitudeparameters
- values of the force model parameters at state date, only 1 value for each parameterDriver- Returns:
- acceleration in same frame as state
-
acceleration
public <T extends CalculusFieldElement<T>> FieldVector3D<T> acceleration(FieldSpacecraftState<T> state, T[] parameters)
Compute acceleration.- Specified by:
acceleration
in interfaceForceModel
- Type Parameters:
T
- type of the elements- Parameters:
state
- current state information: date, kinematics, attitudeparameters
- values of the force model parameters at state date, only 1 value for each parameterDriver- Returns:
- acceleration in same frame as state
-
getEventDetectors
public Stream<EventDetector> getEventDetectors()
Get the discrete events related to the model.This method is not intended to be called several time, only once by a propagator, as it has the side effect of rebuilding the events detectors when called.
- Specified by:
getEventDetectors
in interfaceEventDetectorsProvider
- Specified by:
getEventDetectors
in interfaceForceModel
- Returns:
- stream of event detectors
-
getFieldEventDetectors
public <T extends CalculusFieldElement<T>> Stream<FieldEventDetector<T>> getFieldEventDetectors(Field<T> field)
Get the discrete events related to the model.This method is not intended to be called several time, only once by a propagator, as it has the side effect of rebuilding the events detectors when called.
- Specified by:
getFieldEventDetectors
in interfaceEventDetectorsProvider
- Specified by:
getFieldEventDetectors
in interfaceForceModel
- Type Parameters:
T
- extends CalculusFieldElement<T>- Parameters:
field
- field to which the state belongs- Returns:
- stream of event detectors
-
-