Class FieldImpulseManeuver<D extends FieldEventDetector<T>,T extends CalculusFieldElement<T>>
- java.lang.Object
-
- org.orekit.propagation.events.FieldAbstractDetector<FieldImpulseManeuver<D,T>,T>
-
- org.orekit.forces.maneuvers.FieldImpulseManeuver<D,T>
-
- Type Parameters:
D
- type of the detectorT
- type of the field elements
- All Implemented Interfaces:
FieldEventDetector<T>
public class FieldImpulseManeuver<D extends FieldEventDetector<T>,T extends CalculusFieldElement<T>> extends FieldAbstractDetector<FieldImpulseManeuver<D,T>,T>
Impulse maneuver model for propagators working with Fields.This class implements an impulse maneuver as a discrete event that can be provided to any
Propagator
and mirrors the standard versionImpulseManeuver
.The maneuver is triggered when an underlying event generates a
STOP
event, in which case this class will generate aRESET_STATE
event (the stop event from the underlying object is therefore filtered out). In the simple cases, the underlying event detector may be a basicdate event
, but it can also be a more elaborateapside event
for apogee maneuvers for example.The maneuver is defined by a single velocity increment. If no AttitudeProvider is given, the current attitude of the spacecraft, defined by the current spacecraft state, will be used as the
AttitudeProvider
so the velocity increment should be given in the same pseudoinertial frame as theFieldSpacecraftState
used to construct the propagator that will handle the maneuver. If an AttitudeProvider is given, the velocity increment given should be defined appropriately in consideration of that provider. So, a typical case for tangential maneuvers is to provide aLOF aligned
attitude provider along with a velocity increment defined in accordance with that LOF aligned attitude provider; e.g. if the LOF aligned attitude provider was constructed using LOFType.VNC the velocity increment should be provided in VNC coordinates.The norm through which the delta-V maps to the mass consumption is chosen via the enum
Control3DVectorCostType
. Default is Euclidean.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 ...
- Since:
- 12.0
- Author:
- Romain Serra
- See Also:
FieldPropagator.addEventDetector(FieldEventDetector)
,ImpulseManeuver
-
-
Field Summary
-
Fields inherited from class org.orekit.propagation.events.FieldAbstractDetector
DEFAULT_MAX_ITER, DEFAULT_MAXCHECK, DEFAULT_THRESHOLD
-
-
Constructor Summary
Constructors Constructor Description FieldImpulseManeuver(D trigger, FieldVector3D<T> deltaVSat, T isp)
Build a new instance.FieldImpulseManeuver(D trigger, AttitudeProvider attitudeOverride, FieldVector3D<T> deltaVSat, T isp)
Build a new instance.FieldImpulseManeuver(D trigger, AttitudeProvider attitudeOverride, FieldVector3D<T> deltaVSat, T isp, Control3DVectorCostType control3DVectorCostType)
Build a new instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected FieldImpulseManeuver<D,T>
create(FieldAdaptableInterval<T> newMaxCheck, T newThreshold, int newMaxIter, FieldEventHandler<T> fieldEventHandler)
Build a new instance.T
g(FieldSpacecraftState<T> fieldSpacecraftState)
Compute the value of the switching function.AttitudeProvider
getAttitudeOverride()
Get the Attitude Provider to use during maneuver.Control3DVectorCostType
getControl3DVectorCostType()
Get the control vector's cost type.FieldVector3D<T>
getDeltaVSat()
Get the velocity increment in satellite frame.T
getIsp()
Get the specific impulse.FieldEventDetector<T>
getTrigger()
Get the triggering event.void
init(FieldSpacecraftState<T> s0, FieldAbsoluteDate<T> t)
Initialize event handler at the start of a propagation.-
Methods inherited from class org.orekit.propagation.events.FieldAbstractDetector
getHandler, getMaxCheckInterval, getMaxIterationCount, getThreshold, isForward, withHandler, withMaxCheck, withMaxCheck, withMaxIter, withThreshold
-
-
-
-
Constructor Detail
-
FieldImpulseManeuver
public FieldImpulseManeuver(D trigger, FieldVector3D<T> deltaVSat, T isp)
Build a new instance.- Parameters:
trigger
- triggering eventdeltaVSat
- velocity increment in satellite frameisp
- engine specific impulse (s)
-
FieldImpulseManeuver
public FieldImpulseManeuver(D trigger, AttitudeProvider attitudeOverride, FieldVector3D<T> deltaVSat, T isp)
Build a new instance.- Parameters:
trigger
- triggering eventattitudeOverride
- the attitude provider to use for the maneuverdeltaVSat
- velocity increment in satellite frameisp
- engine specific impulse (s)
-
FieldImpulseManeuver
public FieldImpulseManeuver(D trigger, AttitudeProvider attitudeOverride, FieldVector3D<T> deltaVSat, T isp, Control3DVectorCostType control3DVectorCostType)
Build a new instance.- Parameters:
trigger
- triggering eventattitudeOverride
- the attitude provider to use for the maneuverdeltaVSat
- velocity increment in satellite frameisp
- engine specific impulse (s)control3DVectorCostType
- increment's norm for mass consumption
-
-
Method Detail
-
create
protected FieldImpulseManeuver<D,T> create(FieldAdaptableInterval<T> newMaxCheck, T newThreshold, int newMaxIter, FieldEventHandler<T> fieldEventHandler)
Build a new instance.- Specified by:
create
in classFieldAbstractDetector<FieldImpulseManeuver<D extends FieldEventDetector<T>,T extends CalculusFieldElement<T>>,T extends CalculusFieldElement<T>>
- Parameters:
newMaxCheck
- maximum checking intervalnewThreshold
- convergence threshold (s)newMaxIter
- maximum number of iterations in the event time searchfieldEventHandler
- event handler to call at event occurrences- Returns:
- a new instance of the appropriate sub-type
-
init
public void init(FieldSpacecraftState<T> s0, FieldAbsoluteDate<T> 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.
The default implementation does nothing
- Specified by:
init
in interfaceFieldEventDetector<D extends FieldEventDetector<T>>
- Overrides:
init
in classFieldAbstractDetector<FieldImpulseManeuver<D extends FieldEventDetector<T>,T extends CalculusFieldElement<T>>,T extends CalculusFieldElement<T>>
- Parameters:
s0
- initial statet
- target time for the integration
-
g
public T g(FieldSpacecraftState<T> fieldSpacecraftState)
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 interfaceFieldEventDetector<D extends FieldEventDetector<T>>
- Specified by:
g
in classFieldAbstractDetector<FieldImpulseManeuver<D extends FieldEventDetector<T>,T extends CalculusFieldElement<T>>,T extends CalculusFieldElement<T>>
- Parameters:
fieldSpacecraftState
- the current state information: date, kinematics, attitude- Returns:
- value of the switching function
-
getAttitudeOverride
public AttitudeProvider getAttitudeOverride()
Get the Attitude Provider to use during maneuver.- Returns:
- the attitude provider
-
getTrigger
public FieldEventDetector<T> getTrigger()
Get the triggering event.- Returns:
- triggering event
-
getDeltaVSat
public FieldVector3D<T> getDeltaVSat()
Get the velocity increment in satellite frame.- Returns:
- velocity increment in satellite frame
-
getIsp
public T getIsp()
Get the specific impulse.- Returns:
- specific impulse
-
getControl3DVectorCostType
public Control3DVectorCostType getControl3DVectorCostType()
Get the control vector's cost type.- Returns:
- control cost type
- Since:
- 12.0
-
-