Class 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 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²)
      • 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 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,
                                     org.hipparchus.geometry.euclidean.threed.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,
                                 org.hipparchus.geometry.euclidean.threed.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 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 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 org.hipparchus.geometry.euclidean.threed.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
        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 interface ForceModel
        Type Parameters:
        T - type of the elements
        Parameters:
        s - current state information: date, kinematics, attitude
        parameters - values of the force model parameters
        Returns:
        acceleration in same frame as state
      • 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 interface ForceModel
        Type Parameters:
        T - extends RealFieldElement
        Parameters:
        field - field to which the state belongs
        Returns:
        stream of events detectors