Class HolmesFeatherstoneAttractionModel
- java.lang.Object
-
- org.orekit.forces.gravity.HolmesFeatherstoneAttractionModel
-
- All Implemented Interfaces:
ForceModel
,TideSystemProvider
,EventDetectorsProvider
,ParameterDriversProvider
public class HolmesFeatherstoneAttractionModel extends Object implements ForceModel, TideSystemProvider
This class represents the gravitational field of a celestial body.The algorithm implemented in this class has been designed by S. A. Holmes and W. E. Featherstone from Department of Spatial Sciences, Curtin University of Technology, Perth, Australia. It is described in their 2002 paper: A unified approach to he Clenshaw summation and the recursive computation of very high degree and order normalised associated Legendre functions (Journal of Geodesy (2002) 76: 279–299).
This model directly uses normalized coefficients and stable recursion algorithms so it is more suited to high degree gravity fields than the classical Cunningham Droziner models which use un-normalized coefficients.
Among the different algorithms presented in Holmes and Featherstone paper, this class implements the modified forward row method. All recursion coefficients are precomputed and stored for greater performance. This caching was suggested in the paper but not used due to the large memory requirements. Since 2002, even low end computers and mobile devices do have sufficient memory so this caching has become feasible nowadays.
- Since:
- 6.0
- Author:
- Luc Maisonobe
-
-
Field Summary
-
Fields inherited from interface org.orekit.propagation.events.EventDetectorsProvider
DATATION_ACCURACY
-
-
Constructor Summary
Constructors Constructor Description HolmesFeatherstoneAttractionModel(Frame centralBodyFrame, NormalizedSphericalHarmonicsProvider provider)
Creates a new instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <T extends CalculusFieldElement<T>>
FieldVector3D<T>acceleration(FieldSpacecraftState<T> s, T[] parameters)
Compute acceleration.Vector3D
acceleration(SpacecraftState s, double[] parameters)
Compute acceleration.boolean
dependsOnPositionOnly()
Check if force model depends on position only at a given, fixed date.double
getMu()
Get the central attraction coefficient μ.double
getMu(AbsoluteDate date)
Get the central attraction coefficient μ.List<ParameterDriver>
getParametersDrivers()
Get the drivers for parameters.TideSystem
getTideSystem()
Get theTideSystem
used in the gravity field.double[]
gradient(AbsoluteDate date, Vector3D position, double mu)
Compute the gradient of the non-central part of the gravity field.<T extends CalculusFieldElement<T>>
T[]gradient(FieldAbsoluteDate<T> date, FieldVector3D<T> position, T mu)
Compute the gradient of the non-central part of the gravity field.double
nonCentralPart(AbsoluteDate date, Vector3D position, double mu)
Compute the non-central part of the gravity field.double
value(AbsoluteDate date, Vector3D position, double mu)
Compute the value of the gravity field.-
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
getDateDetector, getEventDetectors, getFieldDateDetector, getFieldEventDetectors
-
Methods inherited from interface org.orekit.forces.ForceModel
addContribution, addContribution, dependsOnAttitudeRate, getEventDetectors, getFieldEventDetectors, init, init
-
Methods inherited from interface org.orekit.utils.ParameterDriversProvider
getNbParametersDriversValue, getParameterDriver, getParameters, getParameters, getParameters, getParameters, getParametersAllValues, getParametersAllValues, isSupported
-
-
-
-
Constructor Detail
-
HolmesFeatherstoneAttractionModel
public HolmesFeatherstoneAttractionModel(Frame centralBodyFrame, NormalizedSphericalHarmonicsProvider provider)
Creates a new instance.- Parameters:
centralBodyFrame
- rotating body frameprovider
- provider for spherical harmonics- Since:
- 6.0
-
-
Method Detail
-
dependsOnPositionOnly
public boolean dependsOnPositionOnly()
Check if force model depends on position only at a given, fixed date.- 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
-
getTideSystem
public TideSystem getTideSystem()
Get theTideSystem
used in the gravity field.- Specified by:
getTideSystem
in interfaceTideSystemProvider
- Returns:
- tide system used in the gravity field
-
getMu
public double getMu()
Get the central attraction coefficient μ.- Returns:
- mu central attraction coefficient (m³/s²),
will throw an exception if gm PDriver has several
values driven (in this case the method
getMu(AbsoluteDate)
must be used.
-
getMu
public double getMu(AbsoluteDate date)
Get the central attraction coefficient μ.- Parameters:
date
- date at which mu wants to be known- Returns:
- mu central attraction coefficient (m³/s²)
-
value
public double value(AbsoluteDate date, Vector3D position, double mu)
Compute the value of the gravity field.- Parameters:
date
- current dateposition
- position at which gravity field is desired in body framemu
- central attraction coefficient to use- Returns:
- value of the gravity field (central and non-central parts summed together)
-
nonCentralPart
public double nonCentralPart(AbsoluteDate date, Vector3D position, double mu)
Compute the non-central part of the gravity field.- Parameters:
date
- current dateposition
- position at which gravity field is desired in body framemu
- central attraction coefficient to use- Returns:
- value of the non-central part of the gravity field
-
gradient
public double[] gradient(AbsoluteDate date, Vector3D position, double mu)
Compute the gradient of the non-central part of the gravity field.- Parameters:
date
- current dateposition
- position at which gravity field is desired in body framemu
- central attraction coefficient to use- Returns:
- gradient of the non-central part of the gravity field
-
gradient
public <T extends CalculusFieldElement<T>> T[] gradient(FieldAbsoluteDate<T> date, FieldVector3D<T> position, T mu)
Compute the gradient of the non-central part of the gravity field.- Type Parameters:
T
- type of field used- Parameters:
date
- current dateposition
- position at which gravity field is desired in body framemu
- central attraction coefficient to use- Returns:
- gradient of the non-central part of the gravity field
-
acceleration
public Vector3D acceleration(SpacecraftState s, double[] parameters)
Compute acceleration.- Specified by:
acceleration
in interfaceForceModel
- Parameters:
s
- 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> s, T[] parameters)
Compute acceleration.- Specified by:
acceleration
in interfaceForceModel
- Type Parameters:
T
- type of the elements- Parameters:
s
- 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
-
getParametersDrivers
public List<ParameterDriver> getParametersDrivers()
Get the drivers for parameters.- Specified by:
getParametersDrivers
in interfaceParameterDriversProvider
- Returns:
- drivers for parameters
-
-