Class FieldDSSTPropagator<T extends CalculusFieldElement<T>>

Type Parameters:
T - type of the field elements
All Implemented Interfaces:
FieldPropagator<T>, FieldPVCoordinatesProvider<T>

public class FieldDSSTPropagator<T extends CalculusFieldElement<T>> extends FieldAbstractIntegratedPropagator<T>
This class propagates orbits using the DSST theory.

Whereas analytical propagators are configured only thanks to their various constructors and can be used immediately after construction, such a semianalytical propagator configuration involves setting several parameters between construction time and propagation time, just as numerical propagators.

The configuration parameters that can be set are:

From these configuration parameters, only the initial state is mandatory. The default propagation settings are in equinoctial parameters with true longitude argument. The central attraction coefficient used to define the initial orbit will be used. However, specifying only the initial state would mean the propagator would use only Keplerian forces. In this case, the simpler KeplerianPropagator class would be more effective.

The underlying numerical integrator set up in the constructor may also have its own configuration parameters. Typical configuration parameters for adaptive stepsize integrators are the min, max and perhaps start step size as well as the absolute and/or relative errors thresholds.

The state that is seen by the integrator is a simple six elements double array. These six elements are:

By default, at the end of the propagation, the propagator resets the initial state to the final state, thus allowing a new propagation to be started from there without recomputing the part already performed. This behaviour can be chenged by calling FieldAbstractIntegratedPropagator.setResetAtEnd(boolean).

Beware the same instance cannot be used simultaneously by different threads, the class is not thread-safe.

Since:
10.0
Author:
Romain Di Costanzo, Pascal Parraud
See Also:
  • Constructor Details

    • FieldDSSTPropagator

      @DefaultDataContext public FieldDSSTPropagator(FieldODEIntegrator<T> integrator, PropagationType propagationType)
      Create a new instance of DSSTPropagator.

      After creation, there are no perturbing forces at all. This means that if addForceModel is not called after creation, the integrated orbit will follow a Keplerian evolution only.

      This constructor uses the default data context.

      Parameters:
      integrator - numerical integrator to use for propagation.
      propagationType - type of orbit to output (mean or osculating).
      See Also:
    • FieldDSSTPropagator

      public FieldDSSTPropagator(FieldODEIntegrator<T> integrator, PropagationType propagationType, AttitudeProvider attitudeProvider)
      Create a new instance of DSSTPropagator.

      After creation, there are no perturbing forces at all. This means that if addForceModel is not called after creation, the integrated orbit will follow a Keplerian evolution only.

      Parameters:
      integrator - numerical integrator to use for propagation.
      propagationType - type of orbit to output (mean or osculating).
      attitudeProvider - attitude law to use.
      Since:
      10.1
    • FieldDSSTPropagator

      @DefaultDataContext public FieldDSSTPropagator(Field<T> field, FieldODEIntegrator<T> integrator)
      Create a new instance of DSSTPropagator.

      After creation, there are no perturbing forces at all. This means that if addForceModel is not called after creation, the integrated orbit will follow a Keplerian evolution only. Only the mean orbits will be generated.

      This constructor uses the default data context.

      Parameters:
      field - fied used by default
      integrator - numerical integrator to use for propagation.
      See Also:
    • FieldDSSTPropagator

      public FieldDSSTPropagator(Field<T> field, FieldODEIntegrator<T> integrator, AttitudeProvider attitudeProvider)
      Create a new instance of DSSTPropagator.

      After creation, there are no perturbing forces at all. This means that if addForceModel is not called after creation, the integrated orbit will follow a Keplerian evolution only. Only the mean orbits will be generated.

      Parameters:
      field - fied used by default
      integrator - numerical integrator to use for propagation.
      attitudeProvider - attitude law to use.
      Since:
      10.1
  • Method Details

    • setMu

      public void setMu(T mu)
      Set the central attraction coefficient μ.

      Setting the central attraction coefficient is equivalent to add a DSSTNewtonianAttraction force model.

      Overrides:
      setMu in class FieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
      Parameters:
      mu - central attraction coefficient (m³/s²)
      See Also:
    • setInitialState

      public void setInitialState(FieldSpacecraftState<T> initialState)
      Set the initial state with osculating orbital elements.
      Parameters:
      initialState - initial state (defined with osculating elements)
    • setInitialState

      public void setInitialState(FieldSpacecraftState<T> initialState, PropagationType stateType)
      Set the initial state.
      Parameters:
      initialState - initial state
      stateType - defined if the orbital state is defined with osculating or mean elements
    • resetInitialState

      public void resetInitialState(FieldSpacecraftState<T> state)
      Reset the initial state.
      Specified by:
      resetInitialState in interface FieldPropagator<T extends CalculusFieldElement<T>>
      Overrides:
      resetInitialState in class FieldAbstractPropagator<T extends CalculusFieldElement<T>>
      Parameters:
      state - new initial state
    • resetInitialState

      public void resetInitialState(FieldSpacecraftState<T> state, PropagationType stateType)
      Reset initial state with a given propagation type.

      By default this method returns the same as method resetInitialState(FieldSpacecraftState)

      Its purpose is mostly to be derived in FieldDSSTPropagator.

      Change parameter initialIsOsculating() accordingly

      Overrides:
      resetInitialState in class FieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
      Parameters:
      state - new initial state to consider
      stateType - type of the new state (mean or osculating)
      Since:
      12.1.3
    • setSelectedCoefficients

      public void setSelectedCoefficients(Set<String> selectedCoefficients)
      Set the selected short periodic coefficients that must be stored as additional states.
      Parameters:
      selectedCoefficients - short periodic coefficients that must be stored as additional states (null means no coefficients are selected, empty set means all coefficients are selected)
    • getSelectedCoefficients

      public Set<String> getSelectedCoefficients()
      Get the selected short periodic coefficients that must be stored as additional states.
      Returns:
      short periodic coefficients that must be stored as additional states (null means no coefficients are selected, empty set means all coefficients are selected)
    • initialIsOsculating

      public boolean initialIsOsculating()
      Check if the initial state is provided in osculating elements.
      Returns:
      true if initial state is provided in osculating elements
    • setInterpolationGridToFixedNumberOfPoints

      public void setInterpolationGridToFixedNumberOfPoints(int interpolationPoints)
      Set the interpolation grid generator.

      The generator will create an interpolation grid with a fixed number of points for each mean element integration step.

      If neither setInterpolationGridToFixedNumberOfPoints(int) nor setInterpolationGridToMaxTimeGap(CalculusFieldElement) has been called, by default the propagator is set as to 3 interpolations points per step.

      Parameters:
      interpolationPoints - number of interpolation points at each integration step
      Since:
      7.1
      See Also:
    • setInterpolationGridToMaxTimeGap

      public void setInterpolationGridToMaxTimeGap(T maxGap)
      Set the interpolation grid generator.

      The generator will create an interpolation grid with a maximum time gap between interpolation points.

      If neither setInterpolationGridToFixedNumberOfPoints(int) nor setInterpolationGridToMaxTimeGap(CalculusFieldElement) has been called, by default the propagator is set as to 3 interpolations points per step.

      Parameters:
      maxGap - maximum time gap between interpolation points (seconds)
      Since:
      7.1
      See Also:
    • addForceModel

      public void addForceModel(DSSTForceModel force)
      Add a force model to the global perturbation model.

      If this method is not called at all, the integrated orbit will follow a Keplerian evolution only.

      Parameters:
      force - perturbing force to add
      See Also:
    • removeForceModels

      public void removeForceModels()
      Remove all perturbing force models from the global perturbation model (except central attraction).

      Once all perturbing forces have been removed (and as long as no new force model is added), the integrated orbit will follow a Keplerian evolution only.

      See Also:
    • getAllForceModels

      public List<DSSTForceModel> getAllForceModels()
      Get all the force models, perturbing forces and Newtonian attraction included.
      Returns:
      list of perturbing force models, with Newtonian attraction being the last one
      See Also:
    • getOrbitType

      public OrbitType getOrbitType()
      Get propagation parameter type.
      Overrides:
      getOrbitType in class FieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
      Returns:
      orbit type used for propagation
    • getPositionAngleType

      public PositionAngleType getPositionAngleType()
      Get propagation parameter type.
      Overrides:
      getPositionAngleType in class FieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
      Returns:
      angle type to use for propagation
    • computeOsculatingState

      public static <T extends CalculusFieldElement<T>> FieldSpacecraftState<T> computeOsculatingState(FieldSpacecraftState<T> mean, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forces)
      Conversion from mean to osculating orbit.

      Compute osculating state in a DSST sense, corresponding to the mean SpacecraftState in input, and according to the Force models taken into account.

      Since the osculating state is obtained by adding short-periodic variation of each force model, the resulting output will depend on the force models parameterized in input.

      Type Parameters:
      T - type of the elements
      Parameters:
      mean - Mean state to convert
      attitudeProvider - attitude provider (may be null if there are no Gaussian force models like atmospheric drag, radiation pressure or specific user-defined models)
      forces - Forces to take into account
      Returns:
      osculating state in a DSST sense
    • computeMeanState

      public static <T extends CalculusFieldElement<T>> FieldSpacecraftState<T> computeMeanState(FieldSpacecraftState<T> osculating, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forceModel)
      Conversion from osculating to mean orbit.

      Compute mean state in a DSST sense, corresponding to the osculating SpacecraftState in input, and according to the Force models taken into account.

      Since the osculating state is obtained with the computation of short-periodic variation of each force model, the resulting output will depend on the force models parameterized in input.

      The computation is done through a fixed-point iteration process.

      Type Parameters:
      T - type of the elements
      Parameters:
      osculating - Osculating state to convert
      attitudeProvider - attitude provider (may be null if there are no Gaussian force models like atmospheric drag, radiation pressure or specific user-defined models)
      forceModel - Forces to take into account
      Returns:
      mean state in a DSST sense
    • computeMeanState

      public static <T extends CalculusFieldElement<T>> FieldSpacecraftState<T> computeMeanState(FieldSpacecraftState<T> osculating, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forceModel, double epsilon, int maxIterations)
      Conversion from osculating to mean orbit.

      Compute mean state in a DSST sense, corresponding to the osculating SpacecraftState in input, and according to the Force models taken into account.

      Since the osculating state is obtained with the computation of short-periodic variation of each force model, the resulting output will depend on the force models parameterized in input.

      The computation is done through a fixed-point iteration process.

      Type Parameters:
      T - type of the elements
      Parameters:
      osculating - Osculating state to convert
      attitudeProvider - attitude provider (may be null if there are no Gaussian force models like atmospheric drag, radiation pressure or specific user-defined models)
      forceModel - Forces to take into account
      epsilon - convergence threshold for mean parameters conversion
      maxIterations - maximum iterations for mean parameters conversion
      Returns:
      mean state in a DSST sense
      Since:
      10.1
    • computeMeanState

      public static <T extends CalculusFieldElement<T>> FieldSpacecraftState<T> computeMeanState(FieldSpacecraftState<T> osculating, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forceModel, OsculatingToMeanConverter converter)
      Conversion from osculating to mean orbit.

      Compute mean state in a DSST sense, corresponding to the osculating SpacecraftState in input, and according to the Force models taken into account.

      Since the osculating state is obtained with the computation of short-periodic variation of each force model, the resulting output will depend on the force models parameterized in input.

      The computation is done using the given osculating to mean orbit converter.

      Type Parameters:
      T - type of the elements
      Parameters:
      osculating - osculating state to convert
      attitudeProvider - attitude provider (may be null if there are no Gaussian force models like atmospheric drag, radiation pressure or specific user-defined models)
      forceModel - forces to take into account
      converter - osculating to mean orbit converter
      Returns:
      mean state in a DSST sense
      Since:
      13.0
    • setSatelliteRevolution

      public void setSatelliteRevolution(int satelliteRevolution)
      Override the default value of the parameter.

      By default, if the initial orbit is defined as osculating, it will be averaged over 2 satellite revolutions. This can be changed by using this method.

      Parameters:
      satelliteRevolution - number of satellite revolutions to use for converting osculating to mean elements
    • getSatelliteRevolution

      public int getSatelliteRevolution()
      Get the number of satellite revolutions to use for converting osculating to mean elements.
      Returns:
      number of satellite revolutions to use for converting osculating to mean elements
    • setAttitudeProvider

      public void setAttitudeProvider(AttitudeProvider attitudeProvider)
      Set attitude provider.
      Specified by:
      setAttitudeProvider in interface FieldPropagator<T extends CalculusFieldElement<T>>
      Overrides:
      setAttitudeProvider in class FieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
      Parameters:
      attitudeProvider - attitude provider
    • beforeIntegration

      protected void beforeIntegration(FieldSpacecraftState<T> initialState, FieldAbsoluteDate<T> tEnd)
      Method called just before integration.

      The default implementation does nothing, it may be specialized in subclasses.

      Overrides:
      beforeIntegration in class FieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
      Parameters:
      initialState - initial state
      tEnd - target date at which state should be propagated
    • afterIntegration

      protected void afterIntegration()
      Method called just after integration.

      The default implementation does nothing, it may be specialized in subclasses.

      Overrides:
      afterIntegration in class FieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
    • getInitialIntegrationState

      protected FieldSpacecraftState<T> getInitialIntegrationState()
      Get the initial state for integration.
      Overrides:
      getInitialIntegrationState in class FieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
      Returns:
      initial state for integration
    • createMapper

      protected FieldStateMapper<T> createMapper(FieldAbsoluteDate<T> referenceDate, T mu, OrbitType ignoredOrbitType, PositionAngleType ignoredPositionAngleType, AttitudeProvider attitudeProvider, Frame frame)
      Create a mapper between raw double components and spacecraft state. /** Simple constructor.

      The position parameter type is meaningful only if propagation orbit type support it. As an example, it is not meaningful for propagation in Cartesian parameters.

      Note that for DSST, orbit type is hardcoded to OrbitType.EQUINOCTIAL and position angle type is hardcoded to PositionAngleType.MEAN, so the corresponding parameters are ignored.

      Specified by:
      createMapper in class FieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
      Parameters:
      referenceDate - reference date
      mu - central attraction coefficient (m³/s²)
      ignoredOrbitType - orbit type to use for mapping
      ignoredPositionAngleType - angle type to use for propagation
      attitudeProvider - attitude provider
      frame - inertial frame
      Returns:
      new mapper
    • getMainStateEquations

      protected FieldAbstractIntegratedPropagator.MainStateEquations<T> getMainStateEquations(FieldODEIntegrator<T> integrator)
      Get the differential equations to integrate (for main state only).
      Specified by:
      getMainStateEquations in class FieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
      Parameters:
      integrator - numerical integrator to use for propagation.
      Returns:
      differential equations for main state