Class SmallManeuverAnalyticalModel

  • All Implemented Interfaces:
    AdapterPropagator.DifferentialEffect

    public class SmallManeuverAnalyticalModel
    extends Object
    implements AdapterPropagator.DifferentialEffect
    Analytical model for small maneuvers.

    The aim of this model is to compute quickly the effect at date t₁ of a small maneuver performed at an earlier date t₀. Both the direct effect of the maneuver and the Jacobian of this effect with respect to maneuver parameters are available.

    These effect are computed analytically using two Jacobian matrices:

    1. J₀: Jacobian of Keplerian or equinoctial elements with respect to Cartesian parameters at date t₀ allows to compute maneuver effect as a change in orbital elements at maneuver date t₀,
    2. J1/0: Jacobian of Keplerian or equinoctial elements at date t₁ with respect to Keplerian or equinoctial elements at date t₀ allows to propagate the change in orbital elements to final date t₁.

    The second Jacobian, J1/0, is computed using a simple Keplerian model, i.e. it is the identity except for the mean motion row which also includes an off-diagonal element due to semi-major axis change.

    The orbital elements change at date t₁ can be added to orbital elements extracted from state, and the final elements taking account the changes are then converted back to appropriate type, which may be different from Keplerian or equinoctial elements.

    Note that this model takes only Keplerian effects into account. This means that using only this class to compute an inclination maneuver in Low Earth Orbit will not change ascending node drift rate despite inclination has changed (the same would be true for a semi-major axis change of course). In order to take this drift into account, an instance of J2DifferentialEffect must be used together with an instance of this class.

    Author:
    Luc Maisonobe
    • Constructor Detail

      • SmallManeuverAnalyticalModel

        public SmallManeuverAnalyticalModel​(SpacecraftState state0,
                                            Vector3D dV,
                                            double isp)
        Build a maneuver defined in spacecraft frame.
        Parameters:
        state0 - state at maneuver date, before the maneuver is performed
        dV - velocity increment in spacecraft frame
        isp - engine specific impulse (s)
      • SmallManeuverAnalyticalModel

        public SmallManeuverAnalyticalModel​(SpacecraftState state0,
                                            Frame frame,
                                            Vector3D dV,
                                            double isp)
        Build a maneuver defined in user-specified frame.
        Parameters:
        state0 - state at maneuver date, before the maneuver is performed
        frame - frame in which velocity increment is defined
        dV - velocity increment in specified frame
        isp - engine specific impulse (s)
    • Method Detail

      • getDate

        public AbsoluteDate getDate()
        Get the date of the maneuver.
        Returns:
        date of the maneuver
      • getInertialDV

        public Vector3D getInertialDV()
        Get the inertial velocity increment of the maneuver.
        Returns:
        velocity increment in a state-dependent inertial frame
        See Also:
        getInertialFrame()
      • getInertialFrame

        public Frame getInertialFrame()
        Get the inertial frame in which the velocity increment is defined.
        Returns:
        inertial frame in which the velocity increment is defined
        See Also:
        getInertialDV()
      • getJacobian

        public void getJacobian​(Orbit orbit1,
                                PositionAngleType positionAngleType,
                                double[][] jacobian)
        Compute the Jacobian of the orbit with respect to maneuver parameters.

        The Jacobian matrix is a 6x4 matrix. Element jacobian[i][j] corresponds to the partial derivative of orbital parameter i with respect to maneuver parameter j. The rows order is the same order as used in Orbit.getJacobianWrtCartesian method. Columns (0, 1, 2) correspond to the velocity increment coordinates (ΔVx, ΔVy, ΔVz) in the inertial frame returned by getInertialFrame(), and column 3 corresponds to the maneuver date t₀.

        Parameters:
        orbit1 - original orbit at t₁, without maneuver
        positionAngleType - type of the position angle to use
        jacobian - placeholder 6x4 (or larger) matrix to be filled with the Jacobian, if matrix is larger than 6x4, only the 6x4 upper left corner will be modified
        See Also:
        apply(Orbit)
      • updateMass

        public double updateMass​(double mass)
        Update a spacecraft mass due to maneuver.
        Parameters:
        mass - masse before maneuver
        Returns:
        mass after maneuver