Class 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
    • Constructor Detail

      • HolmesFeatherstoneAttractionModel

        public HolmesFeatherstoneAttractionModel​(Frame centralBodyFrame,
                                                 NormalizedSphericalHarmonicsProvider provider)
        Creates a new instance.
        Parameters:
        centralBodyFrame - rotating body frame
        provider - 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 interface ForceModel
        Returns:
        true if force model depends on position only, false if it depends on velocity, either directly or due to a dependency on attitude
      • 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 date
        position - position at which gravity field is desired in body frame
        mu - 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 date
        position - position at which gravity field is desired in body frame
        mu - 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 date
        position - position at which gravity field is desired in body frame
        mu - 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 date
        position - position at which gravity field is desired in body frame
        mu - 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 interface ForceModel
        Parameters:
        s - current state information: date, kinematics, attitude
        parameters - 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 interface ForceModel
        Type Parameters:
        T - type of the elements
        Parameters:
        s - current state information: date, kinematics, attitude
        parameters - values of the force model parameters at state date, only 1 value for each parameterDriver
        Returns:
        acceleration in same frame as state