Class HolmesFeatherstoneAttractionModel
- java.lang.Object
-
- org.orekit.forces.AbstractForceModel
-
- org.orekit.forces.gravity.HolmesFeatherstoneAttractionModel
-
- All Implemented Interfaces:
ForceModel
,TideSystemProvider
public class HolmesFeatherstoneAttractionModel extends AbstractForceModel implements 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 the 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
-
-
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 org.hipparchus.RealFieldElement<T>>
org.hipparchus.geometry.euclidean.threed.FieldVector3D<T>acceleration(FieldSpacecraftState<T> s, T[] parameters)
Compute acceleration.org.hipparchus.geometry.euclidean.threed.Vector3D
acceleration(SpacecraftState s, double[] parameters)
Compute acceleration.boolean
dependsOnPositionOnly()
Check if force models depends on position only.Stream<EventDetector>
getEventsDetectors()
Get the discrete events related to the model.<T extends org.hipparchus.RealFieldElement<T>>
Stream<FieldEventDetector<T>>getFieldEventsDetectors(org.hipparchus.Field<T> field)
Get the discrete events related to the model.double
getMu()
Get the central attraction coefficient μ.ParameterDriver[]
getParametersDrivers()
Get the drivers for force model parameters.TideSystem
getTideSystem()
Get theTideSystem
used in the gravity field.double[]
gradient(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Vector3D position, double mu)
Compute the gradient of the non-central part of the gravity field.<T extends org.hipparchus.RealFieldElement<T>>
T[]gradient(FieldAbsoluteDate<T> date, org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> position, T mu)
Compute the gradient of the non-central part of the gravity field.double
nonCentralPart(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Vector3D position, double mu)
Compute the non-central part of the gravity field.double
value(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Vector3D position, double mu)
Compute the value of the gravity field.-
Methods inherited from class org.orekit.forces.AbstractForceModel
complainIfNotSupported, getParameterDriver, isSupported
-
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.ForceModel
addContribution, addContribution, getParameters, getParameters, init
-
-
-
-
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 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
-
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²)
-
value
public double value(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.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, org.hipparchus.geometry.euclidean.threed.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, org.hipparchus.geometry.euclidean.threed.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 org.hipparchus.RealFieldElement<T>> T[] gradient(FieldAbsoluteDate<T> date, org.hipparchus.geometry.euclidean.threed.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 org.hipparchus.geometry.euclidean.threed.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- Returns:
- acceleration in same frame as state
-
acceleration
public <T extends org.hipparchus.RealFieldElement<T>> org.hipparchus.geometry.euclidean.threed.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- Returns:
- acceleration in same frame as state
-
getEventsDetectors
public Stream<EventDetector> getEventsDetectors()
Get the discrete events related to the model.- Specified by:
getEventsDetectors
in interfaceForceModel
- Returns:
- stream of events detectors
-
getFieldEventsDetectors
public <T extends org.hipparchus.RealFieldElement<T>> Stream<FieldEventDetector<T>> getFieldEventsDetectors(org.hipparchus.Field<T> field)
Description copied from interface:ForceModel
Get the discrete events related to the model.- Specified by:
getFieldEventsDetectors
in interfaceForceModel
- Type Parameters:
T
- extends RealFieldElement- Parameters:
field
- field to which the state belongs- Returns:
- stream of events detectors
-
getParametersDrivers
public ParameterDriver[] getParametersDrivers()
Get the drivers for force model parameters.- Specified by:
getParametersDrivers
in interfaceForceModel
- Returns:
- drivers for force model parameters
-
-