fr.cnes.sirius.patrius.forces
Class VariableThrustManeuver

java.lang.Object
  extended by org.orekit.parameter.Parameterizable
      extended by org.orekit.parameter.JacobiansParameterizable
          extended by fr.cnes.sirius.patrius.forces.VariableThrustManeuver
All Implemented Interfaces:
Serializable, ForceModel, GradientModel, IJacobiansParameterizable, IParameterizable

public class VariableThrustManeuver
extends JacobiansParameterizable
implements ForceModel, GradientModel

This class implements a maneuver using variable thrust and ISP.

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. The current attitude of the spacecraft, defined by the current spacecraft state, will be used to compute the thrust direction in the inertial frame when direction is defined in satellite frame.

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).

Since:
1.2
Version:
$Id: VariableThrustManeuver.java 17586 2017-05-10 13:29:16Z bignon $
See Also:
Serialized Form
Concurrency :
not thread-safe
Concurrency comment :
internal mutable attributes

Constructor Summary
VariableThrustManeuver(AbsoluteDate date, double duration, IDependentVariable<SpacecraftState> variableThrust, IDependentVariable<SpacecraftState> variableIsp, IDependentVectorVariable<SpacecraftState> variableDirection, MassProvider massModel, String partName)
          Constructor for a variable direction in spacecraft frame, thrust and ISP.
VariableThrustManeuver(AbsoluteDate date, double duration, IDependentVariable<SpacecraftState> variableThrust, IDependentVariable<SpacecraftState> variableIsp, IDependentVectorVariable<SpacecraftState> variableDirection, MassProvider massModel, String partName, Frame refFrame)
          Constructor for a variable direction in provided frame, thrust and ISP.
VariableThrustManeuver(AbsoluteDate date, double duration, IDependentVariable<SpacecraftState> variableThrust, IDependentVariable<SpacecraftState> variableIsp, IDependentVectorVariable<SpacecraftState> variableDirection, MassProvider massModel, String partName, LOFType lofTyp)
          Constructor for a variable direction in provided local orbital frame, thrust and ISP expressed in a LocalOrbitalFrame.
VariableThrustManeuver(AbsoluteDate date, double duration, PropulsiveProperty engine, IDependentVectorVariable<SpacecraftState> variableDirection, MassProvider massModel, TankProperty tank)
          Constructor for a variable direction in spacecraft frame, thrust and ISP, using PropulsiveProperty and TankProperty.
VariableThrustManeuver(AbsoluteDate date, double duration, PropulsiveProperty engine, IDependentVectorVariable<SpacecraftState> variableDirection, MassProvider massModel, TankProperty tank, Frame refFrame)
          Constructor for a variable direction in provided frame, thrust and ISP, using PropulsiveProperty and TankProperty.
VariableThrustManeuver(AbsoluteDate date, double duration, PropulsiveProperty engine, IDependentVectorVariable<SpacecraftState> variableDirection, MassProvider massModel, TankProperty tank, LOFType lofTyp)
          Constructor for a variable direction in provided local orbital frame, thrust and ISP expressed in a LocalOrbitalFrame, using PropulsiveProperty and TankProperty.
VariableThrustManeuver(EventDetector startEventDetector, EventDetector stopEventDetector, IDependentVariable<SpacecraftState> variableThrust, IDependentVariable<SpacecraftState> variableIsp, IDependentVectorVariable<SpacecraftState> variableDirection, MassProvider massModel, String partName)
          Constructor for a variable direction in spacecraft frame, thrust and ISP.
VariableThrustManeuver(EventDetector startEventDetector, EventDetector stopEventDetector, IDependentVariable<SpacecraftState> variableThrust, IDependentVariable<SpacecraftState> variableIsp, IDependentVectorVariable<SpacecraftState> variableDirection, MassProvider massModel, String partName, Frame refFrame)
          Constructor for a variable direction in provided frame, thrust and ISP.
VariableThrustManeuver(EventDetector startEventDetector, EventDetector stopEventDetector, IDependentVariable<SpacecraftState> variableThrust, IDependentVariable<SpacecraftState> variableIsp, IDependentVectorVariable<SpacecraftState> variableDirection, MassProvider massModel, String partName, LOFType lofTyp)
          Constructor for a variable direction in provided local orbital frame, thrust and ISP expressed in a LocalOrbitalFrame.
VariableThrustManeuver(EventDetector startEventDetector, EventDetector stopEventDetector, PropulsiveProperty engine, IDependentVectorVariable<SpacecraftState> variableDirection, MassProvider massModel, TankProperty tank)
          Constructor for a variable direction in spacecraft frame, thrust and ISP, using PropulsiveProperty and TankProperty.
VariableThrustManeuver(EventDetector startEventDetector, EventDetector stopEventDetector, PropulsiveProperty engine, IDependentVectorVariable<SpacecraftState> variableDirection, MassProvider massModel, TankProperty tank, Frame refFrame)
          Constructor for a variable direction in spacecraft frame, thrust and ISP, using PropulsiveProperty and TankProperty.
VariableThrustManeuver(EventDetector startEventDetector, EventDetector stopEventDetector, PropulsiveProperty engine, IDependentVectorVariable<SpacecraftState> variableDirection, MassProvider massModel, TankProperty tank, LOFType lofTyp)
          Constructor for a variable direction in provided local orbital frame, thrust and ISP expressed in a LocalOrbitalFrame.
 
Method Summary
 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.
 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 direction.
 double getISP(SpacecraftState s)
          Get the specific impulse.
 AbsoluteDate getStartDate()
          Return the maneuver start date (if a date or a DateDetector as been provided).
 double getThrust(SpacecraftState s)
          Get the thrust.
 boolean isFiring()
          Returns maneuver status (firing or not).
 void setFiring(boolean isFiring)
          Set maneuver status (firing/not firing).
 
Methods inherited from class org.orekit.parameter.JacobiansParameterizable
addJacobiansParameter, addJacobiansParameter, addJacobiansParameter, supportsJacobianParameter
 
Methods inherited from class org.orekit.parameter.Parameterizable
addParameter, getParameters, supportsParameter
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.orekit.parameter.IParameterizable
getParameters, supportsParameter
 

Constructor Detail

VariableThrustManeuver

public VariableThrustManeuver(AbsoluteDate date,
                              double duration,
                              IDependentVariable<SpacecraftState> variableThrust,
                              IDependentVariable<SpacecraftState> variableIsp,
                              IDependentVectorVariable<SpacecraftState> variableDirection,
                              MassProvider massModel,
                              String partName)
Constructor for a variable direction in spacecraft frame, thrust and ISP.

Parameters:
date - maneuver date
duration - the duration of the thrust (s) (if negative, the date is considered to be the stop date)
variableThrust - the thrust force (N)
variableIsp - engine specific impulse (s)
variableDirection - the acceleration direction in satellite frame.
massModel - mass model
partName - name of part firing

VariableThrustManeuver

public VariableThrustManeuver(AbsoluteDate date,
                              double duration,
                              PropulsiveProperty engine,
                              IDependentVectorVariable<SpacecraftState> variableDirection,
                              MassProvider massModel,
                              TankProperty tank)
Constructor for a variable direction in spacecraft frame, thrust and ISP, using PropulsiveProperty and TankProperty.

Parameters:
date - maneuver date
duration - 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) information
variableDirection - the acceleration direction in satellite frame.
massModel - mass model
tank - tank property gathering mass and part name information

VariableThrustManeuver

public VariableThrustManeuver(AbsoluteDate date,
                              double duration,
                              IDependentVariable<SpacecraftState> variableThrust,
                              IDependentVariable<SpacecraftState> variableIsp,
                              IDependentVectorVariable<SpacecraftState> variableDirection,
                              MassProvider massModel,
                              String partName,
                              Frame refFrame)
Constructor for a variable direction in provided frame, thrust and ISP.

Parameters:
date - maneuver date
duration - the duration of the thrust (s) (if negative, the date is considered to be the stop date)
variableThrust - the thrust force (N)
variableIsp - engine specific impulse (s)
variableDirection - the acceleration direction in the frame defined by the user
massModel - mass model
partName - name of part firing
refFrame - the frame of the acceleration direction. SpacecraftFrame class is an unsupported frame.
Throws:
IllegalArgumentException - if input frame is SpacecraftFrame.

VariableThrustManeuver

public VariableThrustManeuver(AbsoluteDate date,
                              double duration,
                              PropulsiveProperty engine,
                              IDependentVectorVariable<SpacecraftState> variableDirection,
                              MassProvider massModel,
                              TankProperty tank,
                              Frame refFrame)
Constructor for a variable direction in provided frame, thrust and ISP, using PropulsiveProperty and TankProperty.

Parameters:
date - maneuver date
duration - 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) information
variableDirection - the acceleration direction in the frame defined by the user
massModel - mass model
tank - tank property gathering mass and part name information
refFrame - the frame of the acceleration direction. SpacecraftFrame class is an unsupported frame.
Throws:
IllegalArgumentException - if input frame is SpacecraftFrame.

VariableThrustManeuver

public VariableThrustManeuver(AbsoluteDate date,
                              double duration,
                              IDependentVariable<SpacecraftState> variableThrust,
                              IDependentVariable<SpacecraftState> variableIsp,
                              IDependentVectorVariable<SpacecraftState> variableDirection,
                              MassProvider massModel,
                              String partName,
                              LOFType lofTyp)
Constructor for a variable direction in provided local orbital frame, thrust and ISP expressed in a LocalOrbitalFrame.

Parameters:
date - maneuver date
duration - the duration of the thrust (s) (if negative, the date is considered to be the stop date)
variableThrust - the thrust force (N)
variableIsp - engine specific impulse (s)
variableDirection - the acceleration direction in the frame defined by the user
massModel - mass model
partName - name of part firing
lofTyp - lofType the LOF type of the acceleration direction

VariableThrustManeuver

public VariableThrustManeuver(AbsoluteDate date,
                              double duration,
                              PropulsiveProperty engine,
                              IDependentVectorVariable<SpacecraftState> variableDirection,
                              MassProvider massModel,
                              TankProperty tank,
                              LOFType lofTyp)
Constructor for a variable direction in provided local orbital frame, thrust and ISP expressed in a LocalOrbitalFrame, using PropulsiveProperty and TankProperty.

Parameters:
date - maneuver date
duration - 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) information
variableDirection - the acceleration direction in the frame defined by the user
massModel - mass model
tank - tank property gathering mass and part name information
lofTyp - lofType the LOF type of the acceleration direction

VariableThrustManeuver

public VariableThrustManeuver(EventDetector startEventDetector,
                              EventDetector stopEventDetector,
                              IDependentVariable<SpacecraftState> variableThrust,
                              IDependentVariable<SpacecraftState> variableIsp,
                              IDependentVectorVariable<SpacecraftState> variableDirection,
                              MassProvider massModel,
                              String partName)
Constructor for a variable direction in spacecraft frame, thrust and ISP.

Parameters:
startEventDetector - event detector upon which maneuver should starts
stopEventDetector - event detector upon which maneuver should stops
variableThrust - the thrust force (N)
variableIsp - engine specific impulse (s)
variableDirection - the acceleration direction in satellite frame.
massModel - mass model
partName - name of part firing

VariableThrustManeuver

public VariableThrustManeuver(EventDetector startEventDetector,
                              EventDetector stopEventDetector,
                              PropulsiveProperty engine,
                              IDependentVectorVariable<SpacecraftState> variableDirection,
                              MassProvider massModel,
                              TankProperty tank)
Constructor for a variable direction in spacecraft frame, thrust and ISP, using PropulsiveProperty and TankProperty.

Parameters:
startEventDetector - event detector upon which maneuver should starts
stopEventDetector - event detector upon which maneuver should stops
engine - engine property gathering thrust force (N) and isp (s) information
variableDirection - the acceleration direction in satellite frame.
massModel - mass model
tank - tank property gathering mass and part name information

VariableThrustManeuver

public VariableThrustManeuver(EventDetector startEventDetector,
                              EventDetector stopEventDetector,
                              IDependentVariable<SpacecraftState> variableThrust,
                              IDependentVariable<SpacecraftState> variableIsp,
                              IDependentVectorVariable<SpacecraftState> variableDirection,
                              MassProvider massModel,
                              String partName,
                              Frame refFrame)
Constructor for a variable direction in provided frame, thrust and ISP.

Parameters:
startEventDetector - event detector upon which maneuver should starts
stopEventDetector - event detector upon which maneuver should stops
variableThrust - the thrust force (N)
variableIsp - engine specific impulse (s)
variableDirection - the acceleration direction in the frame defined by the user
massModel - mass model
partName - name of part firing
refFrame - the frame of the acceleration direction. SpacecraftFrame class is an unsupported frame.
Throws:
IllegalArgumentException - if input frame is SpacecraftFrame.

VariableThrustManeuver

public VariableThrustManeuver(EventDetector startEventDetector,
                              EventDetector stopEventDetector,
                              PropulsiveProperty engine,
                              IDependentVectorVariable<SpacecraftState> variableDirection,
                              MassProvider massModel,
                              TankProperty tank,
                              Frame refFrame)
Constructor for a variable direction in spacecraft frame, thrust and ISP, using PropulsiveProperty and TankProperty.

Parameters:
startEventDetector - event detector upon which maneuver should starts
stopEventDetector - event detector upon which maneuver should stops
engine - engine property gathering thrust force (N) and isp (s) information
variableDirection - the acceleration direction in satellite frame.
massModel - mass model
tank - tank property gathering mass and part name information
refFrame - the frame of the acceleration direction. SpacecraftFrame class is an unsupported frame.

VariableThrustManeuver

public VariableThrustManeuver(EventDetector startEventDetector,
                              EventDetector stopEventDetector,
                              IDependentVariable<SpacecraftState> variableThrust,
                              IDependentVariable<SpacecraftState> variableIsp,
                              IDependentVectorVariable<SpacecraftState> variableDirection,
                              MassProvider massModel,
                              String partName,
                              LOFType lofTyp)
Constructor for a variable direction in provided local orbital frame, thrust and ISP expressed in a LocalOrbitalFrame.

Parameters:
startEventDetector - event detector upon which maneuver should starts
stopEventDetector - event detector upon which maneuver should stops
variableThrust - the thrust force (N)
variableIsp - engine specific impulse (s)
variableDirection - the acceleration direction in the frame defined by the user
massModel - mass model
partName - name of part firing
lofTyp - lofType the LOF type of the acceleration direction

VariableThrustManeuver

public VariableThrustManeuver(EventDetector startEventDetector,
                              EventDetector stopEventDetector,
                              PropulsiveProperty engine,
                              IDependentVectorVariable<SpacecraftState> variableDirection,
                              MassProvider massModel,
                              TankProperty tank,
                              LOFType lofTyp)
Constructor for a variable direction in provided local orbital frame, thrust and ISP expressed in a LocalOrbitalFrame.

Parameters:
startEventDetector - event detector upon which maneuver should starts
stopEventDetector - event detector upon which maneuver should stops
engine - engine property gathering thrust force (N) and isp (s) information
variableDirection - the acceleration direction in the frame defined by the user
massModel - mass model
tank - tank property gathering mass and part name information
lofTyp - lofType the LOF type of the acceleration direction
Method Detail

getThrust

public double getThrust(SpacecraftState s)
Get the thrust.

Parameters:
s - the current state information: date, kinematics, attitude
Returns:
thrust force (N).

getDirection

public Vector3D getDirection(SpacecraftState s)
Get the thrust direction.

Parameters:
s - the current state information: date, kinematics, attitude
Returns:
the thrust direction.

getISP

public double getISP(SpacecraftState s)
Get the specific impulse.

Parameters:
s - the current state information: date, kinematics, attitude
Returns:
specific impulse (s).

getFlowRate

public double getFlowRate(SpacecraftState s)
Get the flow rate.

Parameters:
s - the current state information: date, kinematics, attitude
Returns:
flow rate (negative, kg/s).

getStartDate

public AbsoluteDate getStartDate()
Return the maneuver start date (if a date or a DateDetector as been provided).

Returns:
the maneuver start date if a date or a DateDetector as been provided, null otherwise.

getEndDate

public AbsoluteDate getEndDate()
Return the maneuver stop date (if a date or a DateDetector as been provided).

Returns:
the maneuver stop date if a date or a DateDetector as been provided, null otherwise.

getFrame

public Frame getFrame()
Get the frame of the acceleration direction. Null if the acceleration is expressed by default in the satellite frame.

Returns:
the frame

isFiring

public boolean isFiring()
Returns maneuver status (firing or not).

Used in conjunction with setFiring(boolean), the user can stop/restart a propagation during a maneuver.

Returns:
true if thrust is firing

setFiring

public void setFiring(boolean isFiring)
Set maneuver status (firing/not firing). This method is meant to be used if the propagation starts during a maneuver. As a result thrust will be firing at the beginning of the propagation and stops when crossing stop event.

Used in conjunction with isFiring(), the user can stop/restart a propagation during a maneuver.

Parameters:
isFiring - true if propagation should start during the maneuver

addContribution

public void addContribution(SpacecraftState s,
                            TimeDerivativesEquations adder)
                     throws OrekitException
Compute the contribution of the force model to the perturbing acceleration.

Specified by:
addContribution in interface ForceModel
Parameters:
s - current state information: date, kinematics, attitude
adder - object where the contribution should be added
Throws:
OrekitException - if some specific error occurs

computeAcceleration

public Vector3D computeAcceleration(SpacecraftState s)
                             throws OrekitException
Description copied from interface: ForceModel
Compute the acceleration due to the force.

Specified by:
computeAcceleration in interface ForceModel
Parameters:
s - current state information: date, kinematics, attitude
Returns:
acceleration in the SpacecraftState frame
Throws:
OrekitException - if some specific error occurs

addDAccDState

public void addDAccDState(SpacecraftState s,
                          double[][] dAccdPos,
                          double[][] dAccdVel)
                   throws OrekitException
Compute acceleration derivatives with respect to state parameters.

Specified by:
addDAccDState in interface IJacobiansParameterizable
Parameters:
s - spacecraft state
dAccdPos - acceleration derivatives with respect to position
dAccdVel - acceleration derivatives with respect to velocity
Throws:
OrekitException - if derivatives cannot be computed

addDAccDParam

public void addDAccDParam(SpacecraftState s,
                          Parameter param,
                          double[] dAccdParam)
                   throws OrekitException
Compute acceleration derivatives with respect to additional parameters.. No jacobian parameter is supported by this force model.

Specified by:
addDAccDParam in interface IJacobiansParameterizable
Parameters:
s - spacecraft state
param - the parameter with respect to which derivatives are required
dAccdParam - acceleration derivatives with respect to specified parameters
Throws:
OrekitException - if derivatives cannot be computed

getEventsDetectors

public EventDetector[] getEventsDetectors()
Description copied from interface: ForceModel
Get the discrete events related to the model.

Specified by:
getEventsDetectors in interface ForceModel
Returns:
array of events detectors or null if the model is not related to any discrete events

computeGradientPosition

public boolean computeGradientPosition()
This method returns true if the acceleration partial derivatives with respect to position have to be computed.

Specified by:
computeGradientPosition in interface GradientModel
Returns:
true if the derivatives have to be computed, false otherwise

computeGradientVelocity

public boolean computeGradientVelocity()
This method returns true if the acceleration partial derivatives with respect to velocity have to be computed.

Specified by:
computeGradientVelocity in interface GradientModel
Returns:
true if the derivatives have to be computed, false otherwise


Copyright © 2017 CNES. All Rights Reserved.