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 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.
Constructor and Description |
---|
HolmesFeatherstoneAttractionModel(Frame centralBodyFrame,
NormalizedSphericalHarmonicsProvider provider)
Creates a new instance.
|
Modifier and Type | Method and Description |
---|---|
<T extends CalculusFieldElement<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 CalculusFieldElement<T>> |
getFieldEventsDetectors(Field<T> field)
Get the discrete events related to the model.
|
double |
getMu()
Get the central attraction coefficient μ.
|
List<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 CalculusFieldElement<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, 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)
date
- current dateposition
- position at which gravity field is desired in body framemu
- central attraction coefficient to usepublic double nonCentralPart(AbsoluteDate date, Vector3D position, double mu)
date
- current dateposition
- position at which gravity field is desired in body framemu
- central attraction coefficient to usepublic double[] gradient(AbsoluteDate date, Vector3D position, double mu)
date
- current dateposition
- position at which gravity field is desired in body framemu
- central attraction coefficient to usepublic <T extends CalculusFieldElement<T>> T[] gradient(FieldAbsoluteDate<T> date, FieldVector3D<T> position, T mu)
T
- type of field useddate
- current dateposition
- position at which gravity field is desired in body framemu
- central attraction coefficient to usepublic Vector3D acceleration(SpacecraftState s, double[] parameters)
acceleration
in interface ForceModel
s
- current state information: date, kinematics, attitudeparameters
- values of the force model parameterspublic <T extends CalculusFieldElement<T>> FieldVector3D<T> acceleration(FieldSpacecraftState<T> s, T[] parameters)
acceleration
in interface ForceModel
T
- type of the elementss
- current state information: date, kinematics, attitudeparameters
- values of the force model parameterspublic Stream<EventDetector> getEventsDetectors()
getEventsDetectors
in interface ForceModel
public <T extends CalculusFieldElement<T>> Stream<FieldEventDetector<T>> getFieldEventsDetectors(Field<T> field)
ForceModel
getFieldEventsDetectors
in interface ForceModel
T
- extends CalculusFieldElement<T>field
- field to which the state belongspublic List<ParameterDriver> getParametersDrivers()
getParametersDrivers
in interface ForceModel
Copyright © 2002-2022 CS GROUP. All rights reserved.