org.orekit.forces.maneuvers
Class SmallManeuverAnalyticalModel

java.lang.Object
  extended by org.orekit.forces.maneuvers.SmallManeuverAnalyticalModel
All Implemented Interfaces:
Serializable, AdapterPropagator.DifferentialEffect

public class SmallManeuverAnalyticalModel
extends Object
implements AdapterPropagator.DifferentialEffect, Serializable

Analytical model for small maneuvers.

The aim of this model is to compute quickly the effect at date t1 of a small maneuver performed at an earlier date t0. 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. J0: Jacobian of Keplerian or equinoctial elements with respect to cartesian parameters at date t0
  2. allows to compute maneuver effect as a change in orbital elements at maneuver date t0,
  3. J1/0: Jacobian of Keplerian or equinoctial elements at date t1 with respect to Keplerian or equinoctial elements at date t0
  4. allows to propagate the change in orbital elements to final date t1.

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 t1 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
See Also:
Serialized Form

Constructor Summary
SmallManeuverAnalyticalModel(SpacecraftState state0, Frame frame, Vector3D dV, double isp, String partName)
          Build a maneuver defined in user-specified frame.
SmallManeuverAnalyticalModel(SpacecraftState state0, Vector3D dV, double isp, String partName)
          Build a maneuver defined in spacecraft frame.
 
Method Summary
 Orbit apply(Orbit orbit1)
          Compute the effect of the maneuver on an orbit.
 SpacecraftState apply(SpacecraftState state1)
          Compute the effect of the maneuver on a spacecraft state.
 AbsoluteDate getDate()
          Get the date of the maneuver.
 Vector3D getInertialDV()
          Get the inertial velocity increment of the maneuver.
 Frame getInertialFrame()
          Get the inertial frame in which the velocity increment is defined.
 void getJacobian(Orbit orbit1, PositionAngle positionAngle, double[][] jacobian)
          Compute the Jacobian of the orbit with respect to maneuver parameters.
 double updateMass(double mass)
          Update a spacecraft mass due to maneuver.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SmallManeuverAnalyticalModel

public SmallManeuverAnalyticalModel(SpacecraftState state0,
                                    Vector3D dV,
                                    double isp,
                                    String partName)
                             throws OrekitException
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)
partName - the part of the mass provider whose mass diminishes
Throws:
OrekitException - if spacecraft frame cannot be transformed

SmallManeuverAnalyticalModel

public SmallManeuverAnalyticalModel(SpacecraftState state0,
                                    Frame frame,
                                    Vector3D dV,
                                    double isp,
                                    String partName)
                             throws OrekitException
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)
partName - the part of the mass provider whose mass diminishes
Throws:
OrekitException - if velocity increment frame cannot be transformed
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()

apply

public Orbit apply(Orbit orbit1)
Compute the effect of the maneuver on an orbit.

Parameters:
orbit1 - original orbit at t1, without maneuver
Returns:
orbit at t1, taking the maneuver into account if t1 > t0
See Also:
apply(SpacecraftState), getJacobian(Orbit, PositionAngle, double[][])

apply

public SpacecraftState apply(SpacecraftState state1)
                      throws OrekitException
Compute the effect of the maneuver on a spacecraft state.

Specified by:
apply in interface AdapterPropagator.DifferentialEffect
Parameters:
state1 - original spacecraft state at t1, without maneuver
Returns:
spacecraft state at t1, taking the maneuver into account if t1 > t0
Throws:
OrekitException - if no attitude information is defined
See Also:
apply(Orbit), getJacobian(Orbit, PositionAngle, double[][])

getJacobian

public void getJacobian(Orbit orbit1,
                        PositionAngle positionAngle,
                        double[][] jacobian)
                 throws OrekitException
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 t0.

Parameters:
orbit1 - original orbit at t1, without maneuver
positionAngle - 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
Throws:
OrekitException - if time derivative of the initial Jacobian cannot be computed
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


Copyright © 2017 CNES. All Rights Reserved.