org.orekit.forces.maneuvers
Class ImpulseManeuver

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

public class ImpulseManeuver
extends java.lang.Object
implements EventDetector

Impulse maneuver model.

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

The maneuver is triggered when an 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 in satellite frame. The current attitude of the spacecraft, defined by the current spacecraft state, will be used to compute the velocity direction in inertial frame. A typical case for tangential maneuvers is to use a LOF aligned attitude law 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 ...

Version:
$Revision: 3027 $ $Date: 2010-01-19 11:36:25 +0100 (mar. 19 janv. 2010) $
Author:
Luc Maisonobe
See Also:
Propagator.addEventDetector(EventDetector), Serialized Form

Field Summary
 
Fields inherited from interface org.orekit.propagation.events.EventDetector
CONTINUE, RESET_DERIVATIVES, RESET_STATE, STOP
 
Constructor Summary
ImpulseManeuver(EventDetector trigger, org.apache.commons.math.geometry.Vector3D deltaVSat, double isp)
          Build a new instance.
 
Method Summary
 int eventOccurred(SpacecraftState s, boolean increasing)
          Handle an event and choose what to do next.
 double g(SpacecraftState s)
          Compute the value of the switching function.
 double getMaxCheckInterval()
          Get maximal time interval between switching function checks.
 int getMaxIterationCount()
          Get maximal number of iterations in the event time search.
 double getThreshold()
          Get the convergence threshold in the event time search.
 SpacecraftState resetState(SpacecraftState oldState)
          Reset the state prior to continue propagation.
 
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,
                       org.apache.commons.math.geometry.Vector3D deltaVSat,
                       double isp)
Build a new instance.

Parameters:
trigger - triggering event
deltaVSat - velocity increment in satellite frame
isp - engine specific impulse (s)
Method Detail

getMaxCheckInterval

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

Specified by:
getMaxCheckInterval in interface EventDetector
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
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
Returns:
convergence threshold (s)

eventOccurred

public int eventOccurred(SpacecraftState s,
                         boolean increasing)
                  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.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
Parameters:
s - the current state information : date, kinematics, attitude
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)
Returns:
one of EventDetector.STOP, EventDetector.RESET_STATE, EventDetector.RESET_DERIVATIVES or EventDetector.CONTINUE
Throws:
OrekitException - if some specific error occurs

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
Parameters:
s - the current state information: date, kinematics, attitude
Returns:
value of the switching function
Throws:
OrekitException - if some specific error occurs

resetState

public SpacecraftState resetState(SpacecraftState oldState)
                           throws OrekitException
Reset the state 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) has itself returned the EventDetector.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) never returns the EventDetector.RESET_STATE indicator, this function will never be called, and it is safe to simply return null.

Specified by:
resetState in interface EventDetector
Parameters:
oldState - old state
Returns:
new state
Throws:
OrekitException - if the state cannot be reseted


Copyright © 2002-2010 CS Communication & Systèmes. All Rights Reserved.