Class DSSTPropagator

  • All Implemented Interfaces:
    Propagator, PVCoordinatesProvider

    public class DSSTPropagator
    extends AbstractIntegratedPropagator
    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 AbstractIntegratedPropagator.setResetAtEnd(boolean).

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

    Author:
    Romain Di Costanzo, Pascal Parraud
    See Also:
    SpacecraftState, DSSTForceModel
    • Constructor Detail

      • DSSTPropagator

        public DSSTPropagator​(ODEIntegrator 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 - the attitude law.
        Since:
        10.1
    • Method Detail

      • setInitialState

        public void setInitialState​(SpacecraftState initialState)
        Set the initial state with osculating orbital elements.
        Parameters:
        initialState - initial state (defined with osculating elements)
      • setInitialState

        public void setInitialState​(SpacecraftState initialState,
                                    PropagationType stateType)
        Set the initial state.
        Parameters:
        initialState - initial state
        stateType - defined if the orbital state is defined with osculating or mean elements
      • 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)
      • setupMatricesComputation

        public DSSTHarvester setupMatricesComputation​(String stmName,
                                                      RealMatrix initialStm,
                                                      DoubleArrayDictionary initialJacobianColumns)
        Set up computation of State Transition Matrix and Jacobians matrix with respect to parameters.

        If this method is called, both State Transition Matrix and Jacobians with respect to the force models parameters that will be selected when propagation starts will be automatically computed, and the harvester will allow to retrieve them.

        The arguments for initial matrices must be compatible with the orbit type and position angle that will be used by the propagator.

        The default implementation throws an exception as the method is not supported by all propagators.

        Specified by:
        setupMatricesComputation in interface Propagator
        Overrides:
        setupMatricesComputation 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
      • createHarvester

        protected DSSTHarvester 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
      • initialIsOsculating

        public boolean initialIsOsculating()
        Check if the initial state is provided in osculating elements.
        Returns:
        true if initial state is provided in osculating elements
      • 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(), setMu(double)
      • 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:
        addForceModel(DSSTForceModel)
      • computeOsculatingState

        public static SpacecraftState computeOsculatingState​(SpacecraftState 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.

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

        public static SpacecraftState computeMeanState​(SpacecraftState osculating,
                                                       AttitudeProvider attitudeProvider,
                                                       Collection<DSSTForceModel> forceModels)
        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.

        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)
        forceModels - Forces to take into account
        Returns:
        mean state in a DSST sense
      • computeMeanState

        public static SpacecraftState computeMeanState​(SpacecraftState osculating,
                                                       AttitudeProvider attitudeProvider,
                                                       Collection<DSSTForceModel> forceModels,
                                                       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.

        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)
        forceModels - 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
      • 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
      • setShortPeriodTerms

        public void setShortPeriodTerms​(List<ShortPeriodTerms> shortPeriodTerms)
        Override the default value short periodic terms.

        By default, short periodic terms are initialized before the numerical integration of the mean orbital elements.

        Parameters:
        shortPeriodTerms - short periodic terms
      • getShortPeriodTerms

        public List<ShortPeriodTerms> getShortPeriodTerms()
        Get the short periodic terms.
        Returns:
        the short periodic terms
      • beforeIntegration

        protected void beforeIntegration​(SpacecraftState initialState,
                                         AbsoluteDate tEnd)
        Method called just before integration.

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

        Overrides:
        beforeIntegration in class AbstractIntegratedPropagator
        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 AbstractIntegratedPropagator
      • createMapper

        protected StateMapper createMapper​(AbsoluteDate referenceDate,
                                           double 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 AbstractIntegratedPropagator
        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
      • getShortPeriodTermsValue

        public double[] getShortPeriodTermsValue​(SpacecraftState meanState)
        Get the short period terms value.
        Parameters:
        meanState - the mean state
        Returns:
        shortPeriodTerms short period terms
        Since:
        7.1
      • tolerances

        public static double[][] tolerances​(double dP,
                                            Orbit orbit)
        Estimate tolerance vectors for an AdaptativeStepsizeIntegrator.

        The errors are estimated from partial derivatives properties of orbits, starting from a scalar position error specified by the user. Considering the energy conservation equation V = sqrt(mu (2/r - 1/a)), we get at constant energy (i.e. on a Keplerian trajectory):

          V r² |dV| = mu |dr|
          

        So we deduce a scalar velocity error consistent with the position error. From here, we apply orbits Jacobians matrices to get consistent errors on orbital parameters.

        The tolerances are only orders of magnitude, and integrator tolerances are only local estimates, not global ones. So some care must be taken when using these tolerances. Setting 1mm as a position error does NOT mean the tolerances will guarantee a 1mm error position after several orbits integration.

        Parameters:
        dP - user specified position error (m)
        orbit - reference orbit
        Returns:
        a two rows array, row 0 being the absolute tolerance error and row 1 being the relative tolerance error
      • tolerances

        public static double[][] tolerances​(double dP,
                                            double dV,
                                            Orbit orbit)
        Estimate tolerance vectors for an AdaptativeStepsizeIntegrator.

        The errors are estimated from partial derivatives properties of orbits, starting from scalar position and velocity errors specified by the user.

        The tolerances are only orders of magnitude, and integrator tolerances are only local estimates, not global ones. So some care must be taken when using these tolerances. Setting 1mm as a position error does NOT mean the tolerances will guarantee a 1mm error position after several orbits integration.

        Parameters:
        dP - user specified position error (m)
        dV - user specified velocity error (m/s)
        orbit - reference orbit
        Returns:
        a two rows array, row 0 being the absolute tolerance error and row 1 being the relative tolerance error
        Since:
        10.3