public class ContinuousThrustManeuver extends JacobiansParameterizable implements ForceModel, GradientModel, Maneuver, PatriusStepHandler
The maneuver is defined by a direction in satellite frame or in a frame defined by user or in a LOF with type defined
by user. In first case, the current attitude of the spacecraft, defined by the current spacecraft state, will be used
to convert the thrust inDirection in satellite frame into inertial frame when inDirection is defined in satellite
frame. A typical case for tangential maneuvers is to use a LOF
aligned
attitude provider for state propagation and a velocity increment along the +X satellite axis.
The implementation of this class enables the computation of partial derivatives by finite differences with respect to thrust and flow rate if they have been defined as constant (partial derivatives are not available if parameters are not constant).
The maneuver is associated to two triggering EventDetector
(one to start the thrust, the other one to stop the thrust): the maneuver is triggered only if
the underlying event generates a STOP
event, in which case this class will generate a
RESET_STATE
event (the stop event
from the underlying object is therefore filtered out).
Note: including this force in a numerical propagator with adaptive step-size integrator may require to set up a small lower bound for step-size (such as 1E-8s) since force discontinuity may cause difficulties to the integrator when the maneuver stops.
Warning: if variable ISP and thrust are used (using PropulsiveProperty
), ISP and thrust parameters cannot be
used (set as NaN) and partial derivatives cannot be computed.
Modifier and Type | Field and Description |
---|---|
static String |
FLOW_RATE
Parameter name for flow rate.
|
static String |
THRUST
Parameter name for thrust.
|
Constructor and Description |
---|
ContinuousThrustManeuver(AbsoluteDate date,
double duration,
PropulsiveProperty engine,
IDependentVectorVariable<SpacecraftState> inDirection,
MassProvider massProvider,
TankProperty tank)
Constructor for a variable direction in satellite frame.
|
ContinuousThrustManeuver(AbsoluteDate date,
double duration,
PropulsiveProperty engine,
IDependentVectorVariable<SpacecraftState> inDirection,
MassProvider massProvider,
TankProperty tank,
Frame frameIn)
Constructor for a variable direction in provided frame.
|
ContinuousThrustManeuver(AbsoluteDate date,
double duration,
PropulsiveProperty engine,
IDependentVectorVariable<SpacecraftState> inDirection,
MassProvider massProvider,
TankProperty tank,
LOFType lofTyp)
Constructor for a variable direction in provided local orbital frame.
|
ContinuousThrustManeuver(AbsoluteDate date,
double duration,
PropulsiveProperty engine,
Vector3D inDirection,
MassProvider massProvider,
TankProperty tank)
Constructor for a constant direction in satellite frame.
|
ContinuousThrustManeuver(AbsoluteDate date,
double duration,
PropulsiveProperty engine,
Vector3D inDirection,
MassProvider massProvider,
TankProperty tank,
Frame frameIn)
Constructor for a constant direction in provided frame.
|
ContinuousThrustManeuver(AbsoluteDate date,
double duration,
PropulsiveProperty engine,
Vector3D inDirection,
MassProvider massProvider,
TankProperty tank,
LOFType lofTyp)
Constructor for a constant direction in provided local orbital frame.
|
ContinuousThrustManeuver(EventDetector startEventDetector,
EventDetector stopEventDetector,
PropulsiveProperty engine,
IDependentVectorVariable<SpacecraftState> inDirection,
MassProvider massProvider,
TankProperty tank)
Constructor for a variable direction in satellite frame.
|
ContinuousThrustManeuver(EventDetector startEventDetector,
EventDetector stopEventDetector,
PropulsiveProperty engine,
IDependentVectorVariable<SpacecraftState> inDirection,
MassProvider massProvider,
TankProperty tank,
Frame frameIn)
Constructor for a variable direction in provided frame.
|
ContinuousThrustManeuver(EventDetector startEventDetector,
EventDetector stopEventDetector,
PropulsiveProperty engine,
IDependentVectorVariable<SpacecraftState> inDirection,
MassProvider massProvider,
TankProperty tank,
LOFType lofTyp)
Constructor for a variable direction in local orbital frame.
|
ContinuousThrustManeuver(EventDetector startEventDetector,
EventDetector stopEventDetector,
PropulsiveProperty engine,
Vector3D inDirection,
MassProvider massProvider,
TankProperty tank)
Constructor for a constant direction in satellite frame.
|
ContinuousThrustManeuver(EventDetector startEventDetector,
EventDetector stopEventDetector,
PropulsiveProperty engine,
Vector3D inDirection,
MassProvider massProvider,
TankProperty tank,
Frame frameIn)
Constructor for a constant direction in provided frame.
|
ContinuousThrustManeuver(EventDetector startEventDetector,
EventDetector stopEventDetector,
PropulsiveProperty engine,
Vector3D inDirection,
MassProvider massProvider,
TankProperty tank,
LOFType lofTyp)
Constructor for a constant direction in local orbital frame.
|
Modifier and Type | Method and Description |
---|---|
void |
addContribution(SpacecraftState s,
TimeDerivativesEquations adder)
Compute the contribution of the force model to the perturbing
acceleration.
|
void |
addDAccDParam(SpacecraftState s,
Parameter param,
double[] dAccdParam)
Compute acceleration derivatives with respect to additional parameters.
|
void |
addDAccDState(SpacecraftState s,
double[][] dAccdPos,
double[][] dAccdVel)
Compute acceleration derivatives with respect to state parameters.
|
void |
checkData(AbsoluteDate start,
AbsoluteDate end)
This methods throws an exception if the user did not provide all the required data to perform model call on
provided range [start; end].
|
Vector3D |
computeAcceleration(SpacecraftState s)
Compute the acceleration due to the force.
|
boolean |
computeGradientPosition()
This method returns true if the acceleration partial derivatives with
respect to position have to be computed.
|
boolean |
computeGradientVelocity()
This method returns true if the acceleration partial derivatives with
respect to velocity have to be computed.
|
Vector3D |
getDirection(SpacecraftState s)
Get the thrust direction.
|
AbsoluteDate |
getEndDate()
Return the maneuver stop date (if a date or a
DateDetector as been provided). |
EventDetector[] |
getEventsDetectors()
Get the discrete events related to the model.
|
double |
getFlowRate(SpacecraftState s)
Get the flow rate.
|
Frame |
getFrame()
Get the frame of the acceleration inDirection.
|
double |
getISP()
Get the specific impulse.
|
double |
getISP(SpacecraftState s)
Get the specific impulse.
|
LOFType |
getLofType() |
MassProvider |
getMassModel() |
PropulsiveProperty |
getPropulsiveProperty()
Get the propulsive property.
|
AbsoluteDate |
getStartDate()
Return the maneuver start date (if a date or a
DateDetector as been provided). |
TankProperty |
getTankProperty()
Get the tank property.
|
double |
getThrust(SpacecraftState s)
Get the thrust.
|
Vector3D |
getUsedDV()
Get the maneuver instantaneous consumption deltaV.
|
void |
handleStep(PatriusStepInterpolator interpolator,
boolean isLast)
Handle the current step.
|
void |
init(SpacecraftState s0,
AbsoluteDate t)
Initialize step handler at the start of a propagation.
|
boolean |
isFiring()
Returns maneuver status (firing or not).
|
void |
setFiring(boolean isFiring)
Set maneuver status.
|
addJacobiansParameter, addJacobiansParameter, addJacobiansParameter, supportsJacobianParameter
addAllParameters, addAllParameters, addParameter, getParameters, supportsParameter
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getParameters, supportsParameter
public static final String THRUST
public static final String FLOW_RATE
public ContinuousThrustManeuver(AbsoluteDate date, double duration, PropulsiveProperty engine, Vector3D inDirection, MassProvider massProvider, TankProperty tank)
date
- maneuver dateduration
- the duration of the thrust (s) (if negative, the date is considered to be the
stop date)engine
- engine property gathering thrust force (N) and isp (s) informationinDirection
- the constant thrust direction in satellite framemassProvider
- the mass providertank
- tank property gathering mass and part name informationpublic ContinuousThrustManeuver(AbsoluteDate date, double duration, PropulsiveProperty engine, IDependentVectorVariable<SpacecraftState> inDirection, MassProvider massProvider, TankProperty tank)
date
- maneuver dateduration
- the duration of the thrust (s) (if negative, the date is considered to be the
stop date)engine
- engine property gathering thrust force (N) and isp (s) informationinDirection
- the variable thrust direction in satellite framemassProvider
- the mass providertank
- tank property gathering mass and part name informationpublic ContinuousThrustManeuver(AbsoluteDate date, double duration, PropulsiveProperty engine, Vector3D inDirection, MassProvider massProvider, TankProperty tank, Frame frameIn)
date
- maneuver dateduration
- the duration of the thrust (s) (if negative, the date is considered to be the
stop date)engine
- engine property gathering thrust force (N) and isp (s) informationinDirection
- the constant thrust direction in provided framemassProvider
- the mass providertank
- tank property gathering mass and part name informationframeIn
- the frame of the acceleration direction.public ContinuousThrustManeuver(AbsoluteDate date, double duration, PropulsiveProperty engine, IDependentVectorVariable<SpacecraftState> inDirection, MassProvider massProvider, TankProperty tank, Frame frameIn)
date
- maneuver dateduration
- the duration of the thrust (s) (if negative, the date is considered to be the
stop date)engine
- engine property gathering thrust force (N) and isp (s) informationinDirection
- the variable thrust direction in provided framemassProvider
- the mass providertank
- tank property gathering mass and part name informationframeIn
- the frame of the acceleration direction.public ContinuousThrustManeuver(AbsoluteDate date, double duration, PropulsiveProperty engine, Vector3D inDirection, MassProvider massProvider, TankProperty tank, LOFType lofTyp)
date
- maneuver dateduration
- the duration of the thrust (s) (if negative, the date is considered to be the
stop date)engine
- engine property gathering thrust force (N) and isp (s) informationinDirection
- the constant thrust direction in LOFmassProvider
- the mass providertank
- tank property gathering mass and part name informationlofTyp
- the LOF type of the acceleration inDirectionpublic ContinuousThrustManeuver(AbsoluteDate date, double duration, PropulsiveProperty engine, IDependentVectorVariable<SpacecraftState> inDirection, MassProvider massProvider, TankProperty tank, LOFType lofTyp)
date
- maneuver dateduration
- the duration of the thrust (s) (if negative, the date is considered to be the
stop date)engine
- engine property gathering thrust force (N) and isp (s) informationinDirection
- the variable thrust direction in LOFmassProvider
- the mass providertank
- tank property gathering mass and part name informationlofTyp
- the LOF type of the acceleration inDirectionpublic ContinuousThrustManeuver(EventDetector startEventDetector, EventDetector stopEventDetector, PropulsiveProperty engine, Vector3D inDirection, MassProvider massProvider, TankProperty tank) throws PatriusException
startEventDetector
- event detector upon which maneuver should startsstopEventDetector
- event detector upon which maneuver should stopsengine
- engine property gathering thrust force (N) and isp (s) informationinDirection
- the constant thrust direction in satellite framemassProvider
- the mass providertank
- tank property gathering mass and part name informationPatriusException
- if mass from mass provider is negativepublic ContinuousThrustManeuver(EventDetector startEventDetector, EventDetector stopEventDetector, PropulsiveProperty engine, IDependentVectorVariable<SpacecraftState> inDirection, MassProvider massProvider, TankProperty tank) throws PatriusException
startEventDetector
- event detector upon which maneuver should startsstopEventDetector
- event detector upon which maneuver should stopsengine
- engine property gathering thrust force (N) and isp (s) informationinDirection
- the variable thrust direction in satellite framemassProvider
- the mass providertank
- tank property gathering mass and part name informationPatriusException
- if mass from mass provider is negativepublic ContinuousThrustManeuver(EventDetector startEventDetector, EventDetector stopEventDetector, PropulsiveProperty engine, Vector3D inDirection, MassProvider massProvider, TankProperty tank, Frame frameIn) throws PatriusException
startEventDetector
- event detector upon which maneuver should startsstopEventDetector
- event detector upon which maneuver should stopsengine
- engine property gathering thrust force (N) and isp (s) informationinDirection
- the constant thrust direction in provided framemassProvider
- the mass providertank
- tank property gathering mass and part name informationframeIn
- the frame of the acceleration inDirectionPatriusException
- if mass from mass provider is negativepublic ContinuousThrustManeuver(EventDetector startEventDetector, EventDetector stopEventDetector, PropulsiveProperty engine, IDependentVectorVariable<SpacecraftState> inDirection, MassProvider massProvider, TankProperty tank, Frame frameIn) throws PatriusException
startEventDetector
- event detector upon which maneuver should startsstopEventDetector
- event detector upon which maneuver should stopsengine
- engine property gathering thrust force (N) and isp (s) informationinDirection
- the variable thrust direction in provided framemassProvider
- the mass providertank
- tank property gathering mass and part name informationframeIn
- the frame of the acceleration inDirectionPatriusException
- if mass from mass provider is negativepublic ContinuousThrustManeuver(EventDetector startEventDetector, EventDetector stopEventDetector, PropulsiveProperty engine, Vector3D inDirection, MassProvider massProvider, TankProperty tank, LOFType lofTyp) throws PatriusException
startEventDetector
- event detector upon which maneuver should startsstopEventDetector
- event detector upon which maneuver should stopsengine
- engine property gathering thrust force (N) and isp (s) informationinDirection
- the constant thrust direction in LOFmassProvider
- the mass providertank
- tank property gathering mass and part name informationlofTyp
- the LOF type of the acceleration directionPatriusException
- if mass from mass provider is negativepublic ContinuousThrustManeuver(EventDetector startEventDetector, EventDetector stopEventDetector, PropulsiveProperty engine, IDependentVectorVariable<SpacecraftState> inDirection, MassProvider massProvider, TankProperty tank, LOFType lofTyp) throws PatriusException
startEventDetector
- event detector upon which maneuver should startsstopEventDetector
- event detector upon which maneuver should stopsengine
- engine property gathering thrust force (N) and isp (s) informationinDirection
- the variable thrust direction in LOFmassProvider
- the mass providertank
- tank property gathering mass and part name informationlofTyp
- the LOF type of the acceleration directionPatriusException
- if mass from mass provider is negativepublic void init(SpacecraftState s0, AbsoluteDate t)
This method is called once at the start of the propagation. It may be used by the step handler to initialize some internal data if needed.
init
in interface PatriusStepHandler
s0
- initial statet
- target time for the integrationpublic void handleStep(PatriusStepInterpolator interpolator, boolean isLast) throws PropagationException
handleStep
in interface PatriusStepHandler
interpolator
- interpolator set up for the current stepisLast
- if true, this is the last integration stepPropagationException
- if step cannot be handledpublic double getThrust(SpacecraftState s)
s
- the current state information: date, kinematics, attitude.
Unused in case of constant maneuver.public Vector3D getDirection(SpacecraftState s)
s
- the current state information: date, kinematics, attitude.
Unused in case of constant maneuver.public double getISP(SpacecraftState s)
s
- the current state information: date, kinematics, attitude.
Unused in case of constant maneuver.public double getFlowRate(SpacecraftState s)
s
- the current state information: date, kinematics, attitudepublic double getISP()
Warning: if a variable ISP has been used, NaN will be returned.
public TankProperty getTankProperty()
public PropulsiveProperty getPropulsiveProperty()
public AbsoluteDate getStartDate()
DateDetector
as been provided).DateDetector
as been provided, null
otherwise.public AbsoluteDate getEndDate()
DateDetector
as been provided).DateDetector
as been provided, null
otherwise.public Vector3D getUsedDV()
public Frame getFrame()
public void setFiring(boolean isFiring)
Used in conjunction with isFiring()
, the user can stop/restart a propagation during a maneuver.
isFiring
- true if propagation should start during the maneuverpublic boolean isFiring()
Used in conjunction with setFiring(boolean)
, the user can stop/restart a propagation during a maneuver.
public LOFType getLofType()
public MassProvider getMassModel()
public void addContribution(SpacecraftState s, TimeDerivativesEquations adder) throws PatriusException
addContribution
in interface ForceModel
s
- current state information: date, kinematics, attitudeadder
- object where the contribution should be addedPatriusException
- if some specific error occurspublic Vector3D computeAcceleration(SpacecraftState s) throws PatriusException
computeAcceleration
in interface ForceModel
s
- current state information: date, kinematics, attitudeSpacecraftState frame
PatriusException
- if some specific error occurspublic void addDAccDState(SpacecraftState s, double[][] dAccdPos, double[][] dAccdVel) throws PatriusException
addDAccDState
in interface IJacobiansParameterizable
s
- spacecraft statedAccdPos
- acceleration derivatives with respect to positiondAccdVel
- acceleration derivatives with respect to velocityPatriusException
- if derivatives cannot be computedpublic void addDAccDParam(SpacecraftState s, Parameter param, double[] dAccdParam) throws PatriusException
PropulsiveProperty
has been defined with thrust and isp as constants/parameters.addDAccDParam
in interface IJacobiansParameterizable
s
- spacecraft stateparam
- the parameter with respect to which derivatives are requireddAccdParam
- acceleration derivatives with respect to specified parametersPatriusException
- if derivatives cannot be computedpublic EventDetector[] getEventsDetectors()
getEventsDetectors
in interface ForceModel
public boolean computeGradientPosition()
computeGradientPosition
in interface GradientModel
public boolean computeGradientVelocity()
computeGradientVelocity
in interface GradientModel
public void checkData(AbsoluteDate start, AbsoluteDate end) throws PatriusException
checkData
in interface ForceModel
start
- range start dateend
- range end datePatriusException
- thrown if some data is missingCopyright © 2023 CNES. All rights reserved.