public class HolmesFeatherstoneAttractionModel extends AbstractParameterizable implements ForceModel, 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
or 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.
Modifier and Type | Class and Description |
---|---|
static class |
HolmesFeatherstoneAttractionModel.GradientHessian
Container for gradient and Hessian.
|
Constructor and Description |
---|
HolmesFeatherstoneAttractionModel(Frame centralBodyFrame,
NormalizedSphericalHarmonicsProvider provider)
Creates a new instance.
|
Modifier and Type | Method and Description |
---|---|
FieldVector3D<DerivativeStructure> |
accelerationDerivatives(AbsoluteDate date,
Frame frame,
FieldVector3D<DerivativeStructure> position,
FieldVector3D<DerivativeStructure> velocity,
FieldRotation<DerivativeStructure> rotation,
DerivativeStructure mass)
Compute acceleration derivatives with respect to state parameters.
|
FieldVector3D<DerivativeStructure> |
accelerationDerivatives(SpacecraftState s,
String paramName)
Compute acceleration derivatives with respect to additional parameters.
|
void |
addContribution(SpacecraftState s,
TimeDerivativesEquations adder)
Compute the contribution of the force model to the perturbing
acceleration.
|
EventDetector[] |
getEventsDetectors()
Get the discrete events related to the model.
|
double |
getParameter(String name) |
TideSystem |
getTideSystem()
Get the
TideSystem used in the gravity field. |
double[] |
gradient(AbsoluteDate date,
Vector3D position)
Compute the gradient of the non-central part of the gravity field.
|
HolmesFeatherstoneAttractionModel.GradientHessian |
gradientHessian(AbsoluteDate date,
Vector3D position)
Compute both the gradient and the hessian of the non-central part of the gravity field.
|
double |
nonCentralPart(AbsoluteDate date,
Vector3D position)
Compute the non-central part of the gravity field.
|
void |
setParameter(String name,
double value) |
double |
value(AbsoluteDate date,
Vector3D position)
Compute the value of the gravity field.
|
complainIfNotSupported, getParametersNames, isSupported
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getParametersNames, isSupported
public HolmesFeatherstoneAttractionModel(Frame centralBodyFrame, NormalizedSphericalHarmonicsProvider provider)
centralBodyFrame
- rotating body frameprovider
- provider for spherical harmonicspublic TideSystem getTideSystem()
TideSystem
used in the gravity field.getTideSystem
in interface TideSystemProvider
public double value(AbsoluteDate date, Vector3D position) throws OrekitException
date
- current dateposition
- position at which gravity field is desired in body frameOrekitException
- if position cannot be converted to central body framepublic double nonCentralPart(AbsoluteDate date, Vector3D position) throws OrekitException
date
- current dateposition
- position at which gravity field is desired in body frameOrekitException
- if position cannot be converted to central body framepublic double[] gradient(AbsoluteDate date, Vector3D position) throws OrekitException
date
- current dateposition
- position at which gravity field is desired in body frameOrekitException
- if position cannot be converted to central body framepublic HolmesFeatherstoneAttractionModel.GradientHessian gradientHessian(AbsoluteDate date, Vector3D position) throws OrekitException
date
- current dateposition
- position at which gravity field is desired in body frameOrekitException
- if position cannot be converted to central body framepublic void addContribution(SpacecraftState s, TimeDerivativesEquations adder) throws OrekitException
addContribution
in interface ForceModel
s
- current state information: date, kinematics, attitudeadder
- object where the contribution should be addedOrekitException
- if some specific error occurspublic EventDetector[] getEventsDetectors()
getEventsDetectors
in interface ForceModel
public double getParameter(String name) throws IllegalArgumentException
getParameter
in interface ParameterizedODE
IllegalArgumentException
public void setParameter(String name, double value) throws IllegalArgumentException
setParameter
in interface ParameterizedODE
IllegalArgumentException
public FieldVector3D<DerivativeStructure> accelerationDerivatives(AbsoluteDate date, Frame frame, FieldVector3D<DerivativeStructure> position, FieldVector3D<DerivativeStructure> velocity, FieldRotation<DerivativeStructure> rotation, DerivativeStructure mass) throws OrekitException
The derivatives should be computed with respect to position, velocity and optionnaly mass. The input parameters already take into account the free parameters (6 or 7 depending on derivation with respect to mass being considered or not) and order (always 1). Free parameters at indices 0, 1 and 2 correspond to derivatives with respect to position. Free parameters at indices 3, 4 and 5 correspond to derivatives with respect to velocity. Free parameter at index 6 (if present) corresponds to to derivatives with respect to mass.
accelerationDerivatives
in interface ForceModel
date
- current dateframe
- inertial reference frame for state (both orbit and attitude)position
- position of spacecraft in reference framevelocity
- velocity of spacecraft in reference framerotation
- orientation (attitude) of the spacecraft with respect to reference framemass
- spacecraft massOrekitException
- if derivatives cannot be computedpublic FieldVector3D<DerivativeStructure> accelerationDerivatives(SpacecraftState s, String paramName) throws OrekitException, IllegalArgumentException
accelerationDerivatives
in interface ForceModel
s
- spacecraft stateparamName
- name of the parameter with respect to which derivatives are requiredOrekitException
- if derivatives cannot be computedIllegalArgumentException
Copyright © 2002-2015 CS Systèmes d'information. All rights reserved.