public class SmallManeuverAnalyticalModel extends Object implements AdapterPropagator.DifferentialEffect, Serializable
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:
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.
Constructor and Description |
---|
SmallManeuverAnalyticalModel(SpacecraftState state0In,
Frame frame,
Vector3D dV,
double isp,
String partNameIn)
Build a maneuver defined in user-specified frame.
|
SmallManeuverAnalyticalModel(SpacecraftState state0In,
Vector3D dV,
double isp,
String partNameIn)
Build a maneuver defined in spacecraft frame.
|
Modifier and Type | Method and 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 state0In, Vector3D dV, double isp, String partNameIn) throws PatriusException
state0In
- state at maneuver date, before the maneuver
is performeddV
- velocity increment in spacecraft frameisp
- engine specific impulse (s)partNameIn
- the part of the mass provider whose mass diminishesPatriusException
- if spacecraft frame cannot be transformedpublic SmallManeuverAnalyticalModel(SpacecraftState state0In, Frame frame, Vector3D dV, double isp, String partNameIn) throws PatriusException
state0In
- 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)partNameIn
- the part of the mass provider whose mass diminishesPatriusException
- 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 t1, without maneuverapply(SpacecraftState)
,
getJacobian(Orbit, PositionAngle, double[][])
public SpacecraftState apply(SpacecraftState state1) throws PatriusException
apply
in interface AdapterPropagator.DifferentialEffect
state1
- original spacecraft state at t1,
without maneuverPatriusException
- if no attitude information is definedapply(Orbit)
,
getJacobian(Orbit, PositionAngle, double[][])
public void getJacobian(Orbit orbit1, PositionAngle positionAngle, double[][] jacobian) throws PatriusException
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.
orbit1
- original orbit at t1, 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 modifiedPatriusException
- if time derivative of the initial Jacobian cannot be computedapply(Orbit)
public double updateMass(double mass)
mass
- masse before maneuverCopyright © 2023 CNES. All rights reserved.