org.orekit.forces.maneuvers
Class ImpulseManeuver

java.lang.Object
  extended by org.orekit.propagation.events.AbstractDetector
      extended by org.orekit.forces.maneuvers.ImpulseManeuver
All Implemented Interfaces:
Serializable, EventDetector

public class ImpulseManeuver
extends AbstractDetector
implements EventDetector

Impulse maneuver model.

This class implements an impulse maneuver as a discrete event that can be provided to any Propagator.

The impulse maneuver is associated to a triggering EventDetector: 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). In the simple cases, the underlying event detector may be a basic date event, but it can also be a more elaborate apside event for apogee maneuvers for example.

The maneuver is defined by a single velocity increment 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 velocity direction in inertial frame when direction 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.

Beware that the triggering event detector must behave properly both before and after maneuver. If for example a node detector is used to trigger an inclination maneuver and the maneuver change the orbit to an equatorial one, the node detector will fail just after the maneuver, being unable to find a node on an equatorial orbit! This is a real case that has been encountered during validation ...

Author:
Luc Maisonobe
See Also:
Propagator.addEventDetector(EventDetector), Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.orekit.propagation.events.EventDetector
EventDetector.Action
 
Field Summary
 
Fields inherited from class org.orekit.propagation.events.AbstractDetector
DEFAULT_MAXCHECK, DEFAULT_THRESHOLD
 
Fields inherited from interface org.orekit.propagation.events.EventDetector
DECREASING, INCREASING, INCREASING_DECREASING
 
Constructor Summary
ImpulseManeuver(EventDetector trigger, Vector3D deltaVSat, double isp, MassProvider massModel, String part)
          Build a new instance.
ImpulseManeuver(EventDetector trigger, Vector3D deltaVSat, double isp, MassProvider massModel, String part, LOFType lofType)
          Build a new instance with a LocalOrbitalFrame.
ImpulseManeuver(EventDetector trigger, Vector3D deltaVSat, Frame frame, double isp, MassProvider massModel, String part)
          Build a new instance.
 
Method Summary
 EventDetector.Action eventOccurred(SpacecraftState s, boolean increasing, boolean forward)
          Handle an event and choose what to do next.
 double g(SpacecraftState s)
          Compute the value of the switching function.
 Vector3D getDeltaVSat()
          Get the velocity increment in satellite frame.
 Frame getFrame()
          Get the frame of the velocity increment.
 double getIsp()
          Get the specific impulse.
 double getMaxCheckInterval()
          Get maximal time interval between switching function checks.
 int getMaxIterationCount()
          Get maximal number of iterations in the event time search.
 int getSlopeSelection()
          Get the parameter in charge of the selection of detected events by the slope of the g-function.
 double getThreshold()
          Get the convergence threshold in the event time search.
 EventDetector getTrigger()
          Get the triggering event.
 void init(SpacecraftState s0, AbsoluteDate t)
          Initialize event handler at the start of a propagation.
 SpacecraftState resetState(SpacecraftState oldState)
          Reset the state (including additional states) prior to continue propagation.
 boolean shouldBeRemoved()
          This method is called after EventDetector.eventOccurred(org.orekit.propagation.SpacecraftState, boolean, boolean) has been triggered.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ImpulseManeuver

public ImpulseManeuver(EventDetector trigger,
                       Vector3D deltaVSat,
                       double isp,
                       MassProvider massModel,
                       String part)
Build a new instance.

Parameters:
trigger - triggering event (it must generate a STOP event action to trigger the maneuver)
deltaVSat - velocity increment in satellite frame
isp - engine specific impulse (s)
massModel - mass model
part - part of the mass model that provides the propellants

ImpulseManeuver

public ImpulseManeuver(EventDetector trigger,
                       Vector3D deltaVSat,
                       Frame frame,
                       double isp,
                       MassProvider massModel,
                       String part)
Build a new instance. Note : The frame could be set to null to express the velocity increment in spacecraft frame. WARNING : It is not recommended to use this constructor with a LocalOrbitalFrame built with a PVCoordinatesProvider equal to the current propagator.

Parameters:
trigger - triggering event (it must generate a STOP event action to trigger the maneuver)
deltaVSat - velocity increment in the frame defined by the user
frame - the frame of the velocity increment. Null frame means spacecraft frame. SpacecraftFrame class is an unsupported frame.
isp - engine specific impulse (s)
massModel - mass model
part - part of the mass model that provides the propellants
Throws:
IllegalArgumentException - if input frame is SpacecraftFrame.

ImpulseManeuver

public ImpulseManeuver(EventDetector trigger,
                       Vector3D deltaVSat,
                       double isp,
                       MassProvider massModel,
                       String part,
                       LOFType lofType)
Build a new instance with a LocalOrbitalFrame.

Parameters:
trigger - triggering event (it must generate a STOP event action to trigger the maneuver)
deltaVSat - velocity increment in the frame defined by the user
isp - engine specific impulse (s)
massModel - mass model
part - part of the mass model that provides the propellants
lofType - the LOF type of the velocity increment
Method Detail

getMaxCheckInterval

public double getMaxCheckInterval()
Get maximal time interval between switching function checks.

Specified by:
getMaxCheckInterval in interface EventDetector
Overrides:
getMaxCheckInterval in class AbstractDetector
Returns:
maximal time interval (s) between switching function checks

getMaxIterationCount

public int getMaxIterationCount()
Get maximal number of iterations in the event time search.

Specified by:
getMaxIterationCount in interface EventDetector
Overrides:
getMaxIterationCount in class AbstractDetector
Returns:
maximal number of iterations in the event time search

getThreshold

public double getThreshold()
Get the convergence threshold in the event time search.

Specified by:
getThreshold in interface EventDetector
Overrides:
getThreshold in class AbstractDetector
Returns:
convergence threshold (s)

eventOccurred

public EventDetector.Action eventOccurred(SpacecraftState s,
                                          boolean increasing,
                                          boolean forward)
                                   throws OrekitException
Handle an event and choose what to do next.

The scheduling between this method and the OrekitStepHandler method handleStep(interpolator, isLast) is to call this method first and handleStep afterwards. This scheduling allows the propagator to pass true as the isLast parameter to the step handler to make it aware the step will be the last one if this method returns EventDetector.Action.STOP. As the interpolator may be used to navigate back throughout the last step (as OrekitStepNormalizer does for example), user code called by this method and user code called by step handlers may experience apparently out of order values of the independent time variable. As an example, if the same user object implements both this EventDetector interface and the OrekitFixedStepHandler interface, a forward integration may call its eventOccurred method with a state at 2000-01-01T00:00:10 first and call its handleStep method with a state at 2000-01-01T00:00:09 afterwards. Such out of order calls are limited to the size of the integration step for variable step handlers and to the size of the fixed step for fixed step handlers.

.

Specified by:
eventOccurred in interface EventDetector
Specified by:
eventOccurred in class AbstractDetector
Parameters:
s - the current state information: date, kinematics, attitude for forces and events computation, mass provider, and additional states
increasing - if true, the value of the switching function increases when times increases around event (note that increase is measured with respect to physical time, not with respect to propagation which may go backward in time)
forward - if true, the integration variable (time) increases during integration.
Returns:
one of EventDetector.Action.STOP, EventDetector.Action.RESET_STATE, EventDetector.Action.RESET_DERIVATIVES, EventDetector.Action.CONTINUE
Throws:
OrekitException - if some specific error occurs

shouldBeRemoved

public boolean shouldBeRemoved()
This method is called after EventDetector.eventOccurred(org.orekit.propagation.SpacecraftState, boolean, boolean) has been triggered. It returns true if the current detector should be removed after first event detection. WARNING: this method can be called only once a event has been triggered. Before, the value is not available.

Specified by:
shouldBeRemoved in interface EventDetector
Specified by:
shouldBeRemoved in class AbstractDetector
Returns:
true if the current detector should be removed after first event detection

init

public void init(SpacecraftState s0,
                 AbsoluteDate t)
Initialize event handler at the start of a propagation.

This method is called once at the start of the propagation. It may be used by the event handler to initialize some internal data if needed.

Specified by:
init in interface EventDetector
Overrides:
init in class AbstractDetector
Parameters:
s0 - initial state
t - target time for the integration

g

public double g(SpacecraftState s)
         throws OrekitException
Compute the value of the switching function. This function must be continuous (at least in its roots neighborhood), as the integrator will need to find its roots to locate the events.

Specified by:
g in interface EventDetector
Specified by:
g in class AbstractDetector
Parameters:
s - the current state information: date, kinematics, attitude for forces and events computation, mass provider, and additional states
Returns:
value of the switching function
Throws:
OrekitException - if some specific error occurs

resetState

public SpacecraftState resetState(SpacecraftState oldState)
                           throws OrekitException
Reset the state (including additional states) prior to continue propagation.

This method is called after the step handler has returned and before the next step is started, but only when EventDetector.eventOccurred(org.orekit.propagation.SpacecraftState, boolean, boolean) has itself returned the EventDetector.Action.RESET_STATE indicator. It allows the user to reset the state for the next step, without perturbing the step handler of the finishing step. If the EventDetector.eventOccurred(org.orekit.propagation.SpacecraftState, boolean, boolean) never returns the EventDetector.Action.RESET_STATE indicator, this function will never be called, and it is safe to simply return null.

Specified by:
resetState in interface EventDetector
Overrides:
resetState in class AbstractDetector
Parameters:
oldState - old state
Returns:
new state
Throws:
OrekitException - thrown if the mass becomes negative (OrekitMessages.SPACECRAFT_MASS_BECOMES_NEGATIVE)
OrekitException - thrown if no attitude informations is defined
OrekitException - thrown if error occurs during transformation

getTrigger

public EventDetector getTrigger()
Get the triggering event.

Returns:
triggering event

getDeltaVSat

public Vector3D getDeltaVSat()
Get the velocity increment in satellite frame.

Returns:
velocity increment in satellite frame

getIsp

public double getIsp()
Get the specific impulse.

Returns:
specific impulse

getFrame

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

Returns:
the frame

getSlopeSelection

public int getSlopeSelection()
Get the parameter in charge of the selection of detected events by the slope of the g-function..

Specified by:
getSlopeSelection in interface EventDetector
Overrides:
getSlopeSelection in class AbstractDetector
Returns:
EventDetector.INCREASING (0): events related to the increasing g-function;
EventDetector.DECREASING (1): events related to the decreasing g-function;
EventDetector.INCREASING_DECREASING (2): events related to both increasing and decreasing g-function.


Copyright © 2017 CNES. All Rights Reserved.