Class GNSSPropagator<O extends GNSSOrbitalElements<O>>

Type Parameters:
O - type of the orbital elements
All Implemented Interfaces:
Propagator, ParameterDriversProvider, PVCoordinatesProvider

public class GNSSPropagator<O extends GNSSOrbitalElements<O>> extends AbstractAnalyticalPropagator implements ParameterDriversProvider
Common handling of AbstractAnalyticalPropagator methods for GNSS propagators.

This class allows to provide easily a subset of AbstractAnalyticalPropagator methods for specific GNSS propagators.

Author:
Pascal Parraud
  • Constructor Details

    • GNSSPropagator

      public GNSSPropagator(GNSSOrbitalElementsFactory<O> factory)
      Build a new instance.

      Beware that since GNSS orbital elements refer to an Earth frame frozen at a specific date to become an inertial frame, the factory date must have been initialized properly (by calling GNSSOrbitalElementsFactory.setTimeOfEphemeris(GNSSDate)). Setting the date allows the frozen frame to be set properly, otherwise a null pointer exception will be thrown when the propagator builder attempts to use the frame.

      The attitude provider is set by default to be aligned with the provided inertial frame. This can be changed (typically to GenericGNSS) after construction by calling setAttitudeProvider

      The mass is set to the DEFAULT_MASS.

      Parameters:
      factory - factory for the elements and frames
      Since:
      14.0
    • GNSSPropagator

      public GNSSPropagator(O orbitalElements, Frame eci, Frame ecef, AttitudeProvider provider, double mass)
      Build a new instance.
      Parameters:
      orbitalElements - GNSS orbital elements
      eci - Earth Centered Inertial frame
      ecef - Earth Centered Earth Fixed frame
      provider - attitude provider
      mass - satellite mass (kg)
    • GNSSPropagator

      public GNSSPropagator(SpacecraftState initialState, O nonKeplerianElements, Frame ecef, AttitudeProvider provider, double mass)
      Build a new instance from an initial state.

      The Keplerian elements already present in the nonKeplerianElements argument will be ignored as it is the initialState argument that will be used to build the complete orbital elements of the propagator

      Parameters:
      initialState - initial state
      nonKeplerianElements - non-Keplerian orbital elements (the Keplerian orbital elements will be ignored)
      ecef - Earth Centered Earth Fixed frame
      provider - attitude provider
      mass - spacecraft mass
      Since:
      13.0
  • Method Details

    • getParametersDrivers

      public List<ParameterDriver> getParametersDrivers()
      Get the drivers for parameters.
      Specified by:
      getParametersDrivers in interface ParameterDriversProvider
      Returns:
      drivers for parameters
    • getDriversFactory

      public NonKeplerianDriversFactory getDriversFactory()
      Get the factory for non-Keplerian elements drivers.
      Returns:
      factory for non-Keplerian elements drivers
    • getECI

      public Frame getECI()
      Gets the Earth Centered Inertial frame used to propagate the orbit.
      Returns:
      the ECI frame
    • getECEF

      public Frame getECEF()
      Gets the Earth Centered Earth Fixed frame used to propagate GNSS orbits according to the Interface Control Document.
      Returns:
      the ECEF frame
    • getMU

      public double getMU()
      Gets the Earth gravity coefficient used for GNSS propagation.
      Returns:
      the Earth gravity coefficient.
    • getOrbitalElements

      public O getOrbitalElements()
      Get the underlying GNSS propagation orbital elements.
      Returns:
      the underlying GNSS orbital elements
      Since:
      13.0
    • createHarvester

      protected AbstractMatricesHarvester createHarvester(String stmName, RealMatrix initialStm, DoubleArrayDictionary initialJacobianColumns)
      Create the harvester suitable for propagator.
      Overrides:
      createHarvester in class AbstractPropagator
      Parameters:
      stmName - State Transition Matrix state name
      initialStm - initial State Transition Matrix ∂Y/∂Y₀, if null (which is the most frequent case), assumed to be 6x6 identity
      initialJacobianColumns - initial columns of the Jacobians matrix with respect to parameters, if null or if some selected parameters are missing from the dictionary, the corresponding initial column is assumed to be 0
      Returns:
      harvester to retrieve computed matrices during and after propagation
      Since:
      13.0
    • getJacobiansColumnsNames

      protected List<String> getJacobiansColumnsNames()
      Get the names of the parameters in the matrix returned by MatricesHarvester.getParametersJacobian(org.orekit.propagation.SpacecraftState).
      Overrides:
      getJacobiansColumnsNames in class AbstractAnalyticalPropagator
      Returns:
      names of the parameters (i.e. columns) of the Jacobian matrix
      Since:
      13.0
    • propagateOrbit

      public Orbit propagateOrbit(AbsoluteDate date)
      Extrapolate an orbit up to a specific target date.
      Specified by:
      propagateOrbit in class AbstractAnalyticalPropagator
      Parameters:
      date - target date for the orbit
      Returns:
      extrapolated parameters
    • propagateInEcef

      public PVCoordinates propagateInEcef(AbsoluteDate date)
      Gets the PVCoordinates of the GNSS SV in ECEF frame.

      The algorithm uses automatic differentiation to compute velocity and acceleration.

      Parameters:
      date - the computation date
      Returns:
      the GNSS SV PVCoordinates in ECEF frame
    • getFrame

      public Frame getFrame()
      Get the frame in which the orbit is propagated.

      The propagation frame is the definition frame of the initial state, so this method should be called after this state has been set, otherwise it may return null.

      Specified by:
      getFrame in interface Propagator
      Overrides:
      getFrame in class AbstractPropagator
      Returns:
      frame in which the orbit is propagated
      See Also:
    • getMass

      protected double getMass(AbsoluteDate date)
      Get the mass.
      Specified by:
      getMass in class AbstractAnalyticalPropagator
      Parameters:
      date - target date for the orbit
      Returns:
      mass mass
    • resetInitialState

      public void resetInitialState(SpacecraftState state)
      Reset the propagator initial state.
      Specified by:
      resetInitialState in interface Propagator
      Overrides:
      resetInitialState in class AbstractPropagator
      Parameters:
      state - new initial state to consider (without additional data)
    • resetIntermediateState

      protected void resetIntermediateState(SpacecraftState state, boolean forward)
      Reset an intermediate state.
      Specified by:
      resetIntermediateState in class AbstractAnalyticalPropagator
      Parameters:
      state - new intermediate state to consider
      forward - if true, the intermediate state is valid for propagations after itself
    • buildOrbitalElements

      public static <O extends GNSSOrbitalElements<O>> O buildOrbitalElements(SpacecraftState initialState, O nonKeplerianElements, NonKeplerianDriversFactory driversFactory, Frame ecef, AttitudeProvider provider, double mass)
      Build orbital elements from initial state.

      This method is roughly the inverse of propagateInEcef(AbsoluteDate), except it starts from a state in inertial frame

      Type Parameters:
      O - type of the orbital elements (non-field version)
      Parameters:
      initialState - initial state
      nonKeplerianElements - non-Keplerian orbital elements (the Keplerian orbital elements will be overridden)
      driversFactory - factory for non-Keplerian drivers
      ecef - Earth Centered Earth Fixed frame
      provider - attitude provider
      mass - satellite mass (kg)
      Returns:
      orbital elements that generate the initialState when used with a propagator
      Since:
      13.0