public class HolmesFeatherstoneAttractionModel extends AbstractForceModel implements TideSystemProvider
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.
Constructor and Description |
---|
HolmesFeatherstoneAttractionModel(Frame centralBodyFrame,
NormalizedSphericalHarmonicsProvider provider)
Creates a new instance.
|
Modifier and Type | Method and Description |
---|---|
<T extends RealFieldElement<T>> |
acceleration(FieldSpacecraftState<T> s,
T[] parameters)
Compute acceleration.
|
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 RealFieldElement<T>> |
getFieldEventsDetectors(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 the
TideSystem 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 RealFieldElement<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.
|
complainIfNotSupported, getParameterDriver, isSupported
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
addContribution, addContribution, getParameters, getParameters, init
public HolmesFeatherstoneAttractionModel(Frame centralBodyFrame, NormalizedSphericalHarmonicsProvider provider)
centralBodyFrame
- rotating body frameprovider
- provider for spherical harmonicspublic boolean dependsOnPositionOnly()
dependsOnPositionOnly
in interface ForceModel
public TideSystem getTideSystem()
TideSystem
used in the gravity field.getTideSystem
in interface TideSystemProvider
public double getMu()
public double value(AbsoluteDate date, Vector3D position, double mu) throws OrekitException
date
- current dateposition
- position at which gravity field is desired in body framemu
- central attraction coefficient to useOrekitException
- if position cannot be converted to central body framepublic double nonCentralPart(AbsoluteDate date, Vector3D position, double mu) throws OrekitException
date
- current dateposition
- position at which gravity field is desired in body framemu
- central attraction coefficient to useOrekitException
- if position cannot be converted to central body framepublic double[] gradient(AbsoluteDate date, Vector3D position, double mu) throws OrekitException
date
- current dateposition
- position at which gravity field is desired in body framemu
- central attraction coefficient to useOrekitException
- if position cannot be converted to central body framepublic <T extends RealFieldElement<T>> T[] gradient(FieldAbsoluteDate<T> date, FieldVector3D<T> position, T mu) throws OrekitException
T
- type of field useddate
- current dateposition
- position at which gravity field is desired in body framemu
- central attraction coefficient to useOrekitException
- if position cannot be converted to central body framepublic Vector3D acceleration(SpacecraftState s, double[] parameters) throws OrekitException
acceleration
in interface ForceModel
s
- current state information: date, kinematics, attitudeparameters
- values of the force model parametersOrekitException
- if some specific error occurspublic <T extends RealFieldElement<T>> FieldVector3D<T> acceleration(FieldSpacecraftState<T> s, T[] parameters) throws OrekitException
acceleration
in interface ForceModel
T
- type of the elementss
- current state information: date, kinematics, attitudeparameters
- values of the force model parametersOrekitException
- if some specific error occurspublic Stream<EventDetector> getEventsDetectors()
getEventsDetectors
in interface ForceModel
public <T extends RealFieldElement<T>> Stream<FieldEventDetector<T>> getFieldEventsDetectors(Field<T> field)
ForceModel
getFieldEventsDetectors
in interface ForceModel
T
- extends RealFieldElementfield
- field to which the state belongspublic ParameterDriver[] getParametersDrivers()
getParametersDrivers
in interface ForceModel
Copyright © 2002-2017 CS Systèmes d'information. All rights reserved.