public abstract class AbstractIntegratedPropagator extends AbstractPropagator
Propagator
methods for both numerical and semi-analytical propagators.Modifier and Type | Class and Description |
---|---|
static interface |
AbstractIntegratedPropagator.MainStateEquations
Differential equations for the main state (orbit, attitude and mass).
|
DEFAULT_LAW, DEFAULT_MASS, EPHEMERIS_GENERATION_MODE, MASTER_MODE, SLAVE_MODE
Modifier | Constructor and Description |
---|---|
protected |
AbstractIntegratedPropagator(ODEIntegrator integrator,
boolean meanOrbit)
Build a new instance.
|
Modifier and Type | Method and Description |
---|---|
void |
addAdditionalEquations(AdditionalEquations additional)
Add a set of user-specified equations to be integrated along with the orbit propagation.
|
void |
addEventDetector(EventDetector detector)
Add an event detector.
|
protected void |
afterIntegration()
Method called just after integration.
|
protected void |
beforeIntegration(SpacecraftState initialState,
AbsoluteDate tEnd)
Method called just before integration.
|
void |
clearEventsDetectors()
Remove all events detectors.
|
protected abstract StateMapper |
createMapper(AbsoluteDate referenceDate,
double mu,
OrbitType orbitType,
PositionAngle positionAngleType,
AttitudeProvider attitudeProvider,
Frame frame)
Create a mapper between raw double components and spacecraft state.
|
int |
getBasicDimension()
Get state vector dimension without additional parameters.
|
int |
getCalls()
Get the number of calls to the differential equations computation method.
|
Collection<EventDetector> |
getEventsDetectors()
Get all the events detectors that have been added.
|
BoundedPropagator |
getGeneratedEphemeris()
Get the ephemeris generated during propagation.
|
protected SpacecraftState |
getInitialIntegrationState()
Get the initial state for integration.
|
protected ODEIntegrator |
getIntegrator()
Get the integrator used by the propagator.
|
protected abstract AbstractIntegratedPropagator.MainStateEquations |
getMainStateEquations(ODEIntegrator integ)
Get the differential equations to integrate (for main state only).
|
String[] |
getManagedAdditionalStates()
Get all the names of all managed states.
|
double |
getMu()
Get the central attraction coefficient μ.
|
protected OrbitType |
getOrbitType()
Get propagation parameter type.
|
protected PositionAngle |
getPositionAngleType()
Get propagation parameter type.
|
protected void |
initMapper()
Initialize the mapper.
|
boolean |
isAdditionalStateManaged(String name)
Check if an additional state is managed.
|
protected boolean |
isMeanOrbit()
Check if only the mean elements should be used in a semianalitical propagation.
|
SpacecraftState |
propagate(AbsoluteDate target)
Propagate towards a target date.
|
SpacecraftState |
propagate(AbsoluteDate tStart,
AbsoluteDate tEnd)
Propagate from a start date towards a target date.
|
protected SpacecraftState |
propagate(AbsoluteDate tEnd,
boolean activateHandlers)
Propagation with or without event detection.
|
void |
setAttitudeProvider(AttitudeProvider attitudeProvider)
Set attitude provider.
|
void |
setEphemerisMode()
Set the propagator to ephemeris generation mode.
|
void |
setEphemerisMode(OrekitStepHandler handler)
Set the propagator to ephemeris generation mode with the specified handler for each
integration step.
|
void |
setMasterMode(OrekitStepHandler handler)
Set the propagator to master mode with variable steps.
|
void |
setMu(double mu)
Set the central attraction coefficient μ.
|
protected void |
setOrbitType(OrbitType orbitType)
Set propagation orbit type.
|
protected void |
setPositionAngleType(PositionAngle positionAngleType)
Set position angle type.
|
void |
setResetAtEnd(boolean resetAtEnd)
Allow/disallow resetting the initial state at end of propagation.
|
void |
setSlaveMode()
Set the propagator to slave mode.
|
protected void |
setUpEventDetector(ODEIntegrator integ,
EventDetector detector)
Wrap an Orekit event detector and register it to the integrator.
|
protected void |
setUpUserEventDetectors()
Set up all user defined event detectors.
|
addAdditionalStateProvider, getAdditionalStateProviders, getAttitudeProvider, getFixedStepSize, getFrame, getInitialState, getMode, getPVCoordinates, getStartDate, getStepHandler, resetInitialState, setMasterMode, setStartDate, updateAdditionalStates
protected AbstractIntegratedPropagator(ODEIntegrator integrator, boolean meanOrbit)
integrator
- numerical integrator to use for propagation.meanOrbit
- output only the mean orbit.public void setResetAtEnd(boolean resetAtEnd)
By default, at the end of the propagation, the propagator resets the initial state
to the final state, thus allowing a new propagation to be started from there without
recomputing the part already performed. Calling this method with resetAtEnd
set
to false changes prevents such reset.
resetAtEnd
- if true, at end of each propagation, the initial state
will be reset to the final state of
the propagation, otherwise the initial state will be preservedprotected void initMapper()
public void setAttitudeProvider(AttitudeProvider attitudeProvider)
setAttitudeProvider
in interface Propagator
setAttitudeProvider
in class AbstractPropagator
attitudeProvider
- attitude providerprotected void setOrbitType(OrbitType orbitType)
orbitType
- orbit type to use for propagationprotected OrbitType getOrbitType()
protected boolean isMeanOrbit()
protected void setPositionAngleType(PositionAngle positionAngleType)
The position parameter type is meaningful only if propagation orbit type
support it. As an example, it is not meaningful for propagation
in Cartesian
parameters.
positionAngleType
- angle type to use for propagationprotected PositionAngle getPositionAngleType()
public void setMu(double mu)
mu
- central attraction coefficient (m³/s²)public double getMu()
setMu(double)
public int getCalls()
The number of calls is reset each time the propagate(AbsoluteDate)
method is called.
public boolean isAdditionalStateManaged(String name)
Managed states are states for which the propagators know how to compute
its evolution. They correspond to additional states for which an
additional state provider
has been registered
by calling the addAdditionalStateProvider
method. If the propagator is an integrator-based
propagator
, the states for which a set of additional equations
has
been registered by calling the addAdditionalEquations
method are also counted as managed additional states.
Additional states that are present in the initial state
but have no evolution method registered are not considered as managed states.
These unmanaged additional states are not lost during propagation, though. Their
value will simply be copied unchanged throughout propagation.
isAdditionalStateManaged
in interface Propagator
isAdditionalStateManaged
in class AbstractPropagator
name
- name of the additional statepublic String[] getManagedAdditionalStates()
getManagedAdditionalStates
in interface Propagator
getManagedAdditionalStates
in class AbstractPropagator
public void addAdditionalEquations(AdditionalEquations additional) throws OrekitException
additional
- additional equationsOrekitException
- if a set of equations with the same name is already presentpublic void addEventDetector(EventDetector detector)
addEventDetector
in interface Propagator
addEventDetector
in class AbstractPropagator
detector
- event detector to addPropagator.clearEventsDetectors()
,
Propagator.getEventsDetectors()
public Collection<EventDetector> getEventsDetectors()
getEventsDetectors
in interface Propagator
getEventsDetectors
in class AbstractPropagator
Propagator.addEventDetector(EventDetector)
,
Propagator.clearEventsDetectors()
public void clearEventsDetectors()
clearEventsDetectors
in interface Propagator
clearEventsDetectors
in class AbstractPropagator
Propagator.addEventDetector(EventDetector)
,
Propagator.getEventsDetectors()
protected void setUpUserEventDetectors()
protected void setUpEventDetector(ODEIntegrator integ, EventDetector detector)
integ
- integrator into which event detector should be registereddetector
- event detector to wrappublic void setSlaveMode()
This mode is used when the user needs only the final orbit at the target time. The (slave) propagator computes this result and return it to the calling (master) application, without any intermediate feedback.
This is the default mode.
Note that this method has the side effect of replacing the step handlers
of the underlying integrator set up in the constructor
. So if a specific
step handler is needed, it should be added after this method has been callled.
setSlaveMode
in interface Propagator
setSlaveMode
in class AbstractPropagator
Propagator.setMasterMode(double, OrekitFixedStepHandler)
,
Propagator.setMasterMode(OrekitStepHandler)
,
Propagator.setEphemerisMode()
,
Propagator.getMode()
,
Propagator.SLAVE_MODE
public void setMasterMode(OrekitStepHandler handler)
This mode is used when the user needs to have some custom function called at the end of each finalized step during integration. The (master) propagator integration loop calls the (slave) application callback methods at each finalized step.
Note that this method has the side effect of replacing the step handlers
of the underlying integrator set up in the constructor
. So if a specific
step handler is needed, it should be added after this method has been callled.
setMasterMode
in interface Propagator
setMasterMode
in class AbstractPropagator
handler
- handler called at the end of each finalized stepPropagator.setSlaveMode()
,
Propagator.setMasterMode(double, OrekitFixedStepHandler)
,
Propagator.setEphemerisMode()
,
Propagator.getMode()
,
Propagator.MASTER_MODE
public void setEphemerisMode()
This mode is used when the user needs random access to the orbit state at any time between the initial and target times, and in no sequential order. A typical example is the implementation of search and iterative algorithms that may navigate forward and backward inside the propagation range before finding their result.
Beware that since this mode stores all intermediate results, it may be memory intensive for long integration ranges and high precision/short time steps.
Note that this method has the side effect of replacing the step handlers
of the underlying integrator set up in the constructor
. So if a specific
step handler is needed, it should be added after this method has been called.
setEphemerisMode
in interface Propagator
setEphemerisMode
in class AbstractPropagator
Propagator.getGeneratedEphemeris()
,
Propagator.setSlaveMode()
,
Propagator.setMasterMode(double, OrekitFixedStepHandler)
,
Propagator.setMasterMode(OrekitStepHandler)
,
Propagator.getMode()
,
Propagator.EPHEMERIS_GENERATION_MODE
public void setEphemerisMode(OrekitStepHandler handler)
This mode is used when the user needs random access to the orbit state at any time between the initial and target times, as well as access to the steps computed by the integrator as in Master Mode. A typical example is the implementation of search and iterative algorithms that may navigate forward and backward inside the propagation range before finding their result.
Beware that since this mode stores all intermediate results, it may be memory intensive for long integration ranges and high precision/short time steps.
Note that this method has the side effect of replacing the step handlers of the
underlying integrator set up in the constructor
.
setEphemerisMode
in interface Propagator
setEphemerisMode
in class AbstractPropagator
handler
- handler called at the end of each finalized stepPropagator.setEphemerisMode()
,
Propagator.getGeneratedEphemeris()
,
Propagator.setSlaveMode()
,
Propagator.setMasterMode(double, OrekitFixedStepHandler)
,
Propagator.setMasterMode(OrekitStepHandler)
,
Propagator.getMode()
,
Propagator.EPHEMERIS_GENERATION_MODE
public BoundedPropagator getGeneratedEphemeris() throws IllegalStateException
getGeneratedEphemeris
in interface Propagator
getGeneratedEphemeris
in class AbstractPropagator
IllegalStateException
- if the propagator was not set in ephemeris
generation mode before propagationPropagator.setEphemerisMode()
protected abstract StateMapper createMapper(AbsoluteDate referenceDate, double mu, OrbitType orbitType, PositionAngle positionAngleType, AttitudeProvider attitudeProvider, Frame frame)
The position parameter type is meaningful only if propagation orbit type
support it. As an example, it is not meaningful for propagation
in Cartesian
parameters.
referenceDate
- reference datemu
- central attraction coefficient (m³/s²)orbitType
- orbit type to use for mappingpositionAngleType
- angle type to use for propagationattitudeProvider
- attitude providerframe
- inertial frameprotected abstract AbstractIntegratedPropagator.MainStateEquations getMainStateEquations(ODEIntegrator integ)
integ
- numerical integrator to use for propagation.public SpacecraftState propagate(AbsoluteDate target) throws OrekitException
Simple propagators use only the target date as the specification for computing the propagated state. More feature rich propagators can consider other information and provide different operating modes or G-stop facilities to stop at pinpointed events occurrences. In these cases, the target date is only a hint, not a mandatory objective.
propagate
in interface Propagator
propagate
in class AbstractPropagator
target
- target date towards which orbit state should be propagatedOrekitException
- if state cannot be propagatedpublic SpacecraftState propagate(AbsoluteDate tStart, AbsoluteDate tEnd) throws OrekitException
Those propagators use a start date and a target date to compute the propagated state. For propagators using event detection mechanism, if the provided start date is different from the initial state date, a first, simple propagation is performed, without processing any event computation. Then complete propagation is performed from start date to target date.
tStart
- start date from which orbit state should be propagatedtEnd
- target date to which orbit state should be propagatedOrekitException
- if state cannot be propagatedprotected SpacecraftState propagate(AbsoluteDate tEnd, boolean activateHandlers) throws OrekitException
tEnd
- target date to which orbit should be propagatedactivateHandlers
- if true, step and event handlers should be activatedOrekitException
- if orbit cannot be propagatedprotected SpacecraftState getInitialIntegrationState() throws OrekitException
OrekitException
- if initial state cannot be retrievedprotected void beforeIntegration(SpacecraftState initialState, AbsoluteDate tEnd) throws OrekitException
The default implementation does nothing, it may be specialized in subclasses.
initialState
- initial statetEnd
- target date at which state should be propagatedOrekitException
- if hook cannot be runprotected void afterIntegration() throws OrekitException
The default implementation does nothing, it may be specialized in subclasses.
OrekitException
- if hook cannot be runpublic int getBasicDimension()
protected ODEIntegrator getIntegrator()
Copyright © 2002-2017 CS Systèmes d'information. All rights reserved.