AdapterPropagator.DifferentialEffect
public class SmallManeuverAnalyticalModel extends Object implements AdapterPropagator.DifferentialEffect
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:
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.
Constructor | Description |
---|---|
SmallManeuverAnalyticalModel(SpacecraftState state0,
Vector3D dV,
double isp) |
Build a maneuver defined in spacecraft frame.
|
SmallManeuverAnalyticalModel(SpacecraftState state0,
Frame frame,
Vector3D dV,
double isp) |
Build a maneuver defined in user-specified frame.
|
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,
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.
|
public SmallManeuverAnalyticalModel(SpacecraftState state0, Vector3D dV, double isp) throws OrekitException
state0
- state at maneuver date, before the maneuver
is performeddV
- velocity increment in spacecraft frameisp
- engine specific impulse (s)OrekitException
- if spacecraft frame cannot be transformedpublic SmallManeuverAnalyticalModel(SpacecraftState state0, Frame frame, Vector3D dV, double isp) throws OrekitException
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)OrekitException
- if velocity increment frame cannot be transformedpublic AbsoluteDate getDate()
public Vector3D getInertialDV()
getInertialFrame()
public Frame getInertialFrame()
getInertialDV()
public Orbit apply(Orbit orbit1)
orbit1
- original orbit at t₁, without maneuverapply(SpacecraftState)
,
getJacobian(Orbit, PositionAngle, double[][])
public SpacecraftState apply(SpacecraftState state1)
apply
in interface AdapterPropagator.DifferentialEffect
state1
- original spacecraft state at t₁,
without maneuverapply(Orbit)
,
getJacobian(Orbit, PositionAngle, double[][])
public void getJacobian(Orbit orbit1, PositionAngle positionAngle, double[][] jacobian) throws OrekitException
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₀.
orbit1
- original orbit at t₁, without maneuverpositionAngle
- 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 modifiedOrekitException
- if time derivative of the initial Jacobian cannot be computedapply(Orbit)
public double updateMass(double mass)
mass
- masse before maneuverCopyright © 2002-2018 CS Systèmes d'information. All rights reserved.