Class SmallManeuverAnalyticalModel
- java.lang.Object
-
- org.orekit.forces.maneuvers.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:
- 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₀,
- 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 Summary
Constructors Constructor Description SmallManeuverAnalyticalModel(SpacecraftState state0, Vector3D dV, double isp)
Build a maneuver defined in spacecraft frame with default orbit type.SmallManeuverAnalyticalModel(SpacecraftState state0, Frame frame, Vector3D dV, double isp)
Build a maneuver defined in user-specified frame.SmallManeuverAnalyticalModel(SpacecraftState state0, OrbitType orbitType, Vector3D dV, double isp)
Build a maneuver defined in spacecraft frame.SmallManeuverAnalyticalModel(SpacecraftState state0, OrbitType orbitType, Frame frame, Vector3D dV, double isp)
Build a maneuver defined in user-specified frame.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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, PositionAngleType positionAngleType, double[][] jacobian)
Compute the Jacobian of the orbit with respect to maneuver parameters.double
updateMass(double mass)
Update a spacecraft mass due to maneuver.
-
-
-
Constructor Detail
-
SmallManeuverAnalyticalModel
public SmallManeuverAnalyticalModel(SpacecraftState state0, Vector3D dV, double isp)
Build a maneuver defined in spacecraft frame with default orbit type.- Parameters:
state0
- state at maneuver date, before the maneuver is performeddV
- velocity increment in spacecraft frameisp
- engine specific impulse (s)
-
SmallManeuverAnalyticalModel
public SmallManeuverAnalyticalModel(SpacecraftState state0, OrbitType orbitType, Vector3D dV, double isp)
Build a maneuver defined in spacecraft frame.- Parameters:
state0
- state at maneuver date, before the maneuver is performedorbitType
- orbit type to be used later on in Jacobian conversionsdV
- velocity increment in spacecraft frameisp
- engine specific impulse (s)- Since:
- 12.1 orbit type added as input
-
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 performedframe
- frame in which velocity increment is defineddV
- velocity increment in specified frameisp
- engine specific impulse (s)
-
SmallManeuverAnalyticalModel
public SmallManeuverAnalyticalModel(SpacecraftState state0, OrbitType orbitType, Frame frame, Vector3D dV, double isp)
Build a maneuver defined in user-specified frame.- Parameters:
state0
- state at maneuver date, before the maneuver is performedorbitType
- orbit type to be used later on in Jacobian conversionsframe
- frame in which velocity increment is defineddV
- velocity increment in specified frameisp
- engine specific impulse (s)- Since:
- 12.1 orbit type added as input
-
-
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 t₁, without maneuver- Returns:
- orbit at t₁, taking the maneuver into account if t₁ > t₀
- See Also:
apply(SpacecraftState)
,getJacobian(Orbit, PositionAngleType, double[][])
-
apply
public SpacecraftState apply(SpacecraftState state1)
Compute the effect of the maneuver on a spacecraft state.- Specified by:
apply
in interfaceAdapterPropagator.DifferentialEffect
- Parameters:
state1
- original spacecraft state at t₁, without maneuver- Returns:
- spacecraft state at t₁, taking the maneuver into account if t₁ > t₀
- See Also:
apply(Orbit)
,getJacobian(Orbit, PositionAngleType, double[][])
-
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 bygetInertialFrame()
, and column 3 corresponds to the maneuver date t₀.- Parameters:
orbit1
- original orbit at t₁, without maneuverpositionAngleType
- type of the position angle to usejacobian
- 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
-
-