public abstract class SinglePointStoppablePropagator extends StoppablePropagator
Point
at a specified time step until a StoppingCondition
is
satisfied, returning the ephemeris computed and all events found by the
StoppingConditions
(get
).Modifier | Constructor and Description |
---|---|
protected |
SinglePointStoppablePropagator(EvaluatorGroup group,
SinglePointStoppablePropagatorDefinition definition,
List<StateElementAdapterDefinition> previousAdapters)
Initializes a new instance.
|
protected |
SinglePointStoppablePropagator(SinglePointStoppablePropagator existingInstance,
CopyContext context)
Initializes a new instance as a copy of an existing instance.
|
Modifier and Type | Method and Description |
---|---|
protected StoppablePropagatorResults |
createStoppedPropagatorResult(StoppingConditionEvent stoppingEvent,
List<StoppingConditionEvent> detectedEvents,
List<ITimeBasedState> savedStates,
boolean aborted)
Creates the results of the overall propagation after the stopping event has been found.
|
protected void |
dispose(boolean disposing)
Releases any resources associated with this instance.
|
ITimeBasedState |
getInitialState(IntegrationSense direction)
Creates the initial state from the wrapped propagator.
|
protected ReferenceFrame |
getPropagationFrame()
Gets the
ReferenceFrame to propagate the point in. |
protected Duration |
getPropagatorsRecommendedStep()
Gets the step size that the underlying propagator recommends to step.
|
protected abstract PointEvaluator |
initializePropagationPoint(JulianDate date,
Motion1<Cartesian> motion)
Creates the
PointEvaluator that will be sampled for propagation. |
void |
initializePropagator(ITimeBasedState initialState)
Initializes the wrapped propagator with the initial state.
|
SinglePointStoppablePropagatorResults |
propagateUntilStop(JulianDate initialDate,
Motion1<Cartesian> initialState,
IntegrationSense direction,
ITrackCalculationProgress progressTracker)
Propagates a
Point forward in time from the initial conditions. |
SinglePointStoppablePropagatorResults |
propagateUntilStop(JulianDate initialDate,
Motion1<Cartesian> initialState,
Iterable<? extends StoppingConditionEvaluator> conditions,
IntegrationSense direction,
int outputSparsity,
ITrackCalculationProgress progressTracker)
Propagates a
Point forward in time from the initial conditions. |
ITimeBasedState |
takeStep(Duration step,
boolean createNewState)
Makes the propagator take a step.
|
void |
updateEvaluatorReferences(CopyContext context)
Updates the evaluator references held by this object using the reference-to-reference
mapping in the specified
CopyContext . |
addEndOfAvailabilityStoppingConditions, addStepTaken, clone, dispose, getAdapters, getAvailabilityIntervals, getCachingWrapper, getCurrentDate, getCurrentState, getGroup, getInitialPropagationDirection, getIsThreadSafe, getPreviousDate, getStoppingConditionEvaluators, isAvailable, propagateUntilStop, propagateUntilStop, propagateUntilStop, propagateUntilStop, removeStepTaken, restep, setCurrentState, setPreviousDate
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
close
protected SinglePointStoppablePropagator(@Nonnull EvaluatorGroup group, @Nonnull SinglePointStoppablePropagatorDefinition definition, @Nonnull List<StateElementAdapterDefinition> previousAdapters)
group
- The EvaluatorGroup
to use when creating any needed evaluators
.definition
- The StoppablePropagatorDefinition
creating this propagator.previousAdapters
- The adapters
to use to configure this propagators
Adapters
(get
).protected SinglePointStoppablePropagator(@Nonnull SinglePointStoppablePropagator existingInstance, @Nonnull CopyContext context)
See ICloneWithContext.clone(CopyContext)
for more information about how to implement this constructor
in a derived class.
existingInstance
- The existing instance to copy.context
- A CopyContext
that controls the depth of the copy.ArgumentNullException
- Thrown when existingInstance
or context
is null
.public void updateEvaluatorReferences(CopyContext context)
CopyContext
.
The following example shows how to implement this method for an evaluator that contains a nested evaluator:
@Override
public final void updateEvaluatorReferences(CopyContext context) {
m_nestedEvaluator = context.updateReference(m_nestedEvaluator);
}
This method is called by EvaluatorGroup
and usually does not need to be
called directly by users. EvaluatorGroup
uses this method to replace references
to shared evaluators with references to caching versions of the evaluators.
To implement this method, call CopyContext.updateReference(T)
on each evaluator reference
held by your evaluator and assign the return value back to the field.
updateEvaluatorReferences
in interface IEvaluator
updateEvaluatorReferences
in class StoppablePropagator
context
- The context that specifies the reference mapping.protected void dispose(boolean disposing)
dispose
in class StoppablePropagator
disposing
- true
to release both managed and unmanaged resources;
false
to release only unmanaged resources.public ITimeBasedState getInitialState(@Nonnull IntegrationSense direction)
StoppablePropagator.propagateUntilStop(ITimeBasedState,Iterable,IntegrationSense,boolean,int,ITrackCalculationProgress)
method. However should the propagator be configured to have an initial state it should be
returned here.getInitialState
in class StoppablePropagator
direction
- Which direction the propagation is going.null
, or the initial state of the wrapped propagator as initially configured.public final SinglePointStoppablePropagatorResults propagateUntilStop(@Nonnull JulianDate initialDate, @Nonnull Motion1<Cartesian> initialState, @Nonnull IntegrationSense direction, ITrackCalculationProgress progressTracker)
Point
forward in time from the initial conditions.public final SinglePointStoppablePropagatorResults propagateUntilStop(@Nonnull JulianDate initialDate, @Nonnull Motion1<Cartesian> initialState, Iterable<? extends StoppingConditionEvaluator> conditions, @Nonnull IntegrationSense direction, int outputSparsity, ITrackCalculationProgress progressTracker)
Point
forward in time from the initial conditions.initialDate
- The date
to start propagating from.initialState
- The initial Motion1
to start propagating from.conditions
- Additional stopping conditions
to consider
for just this propagation.direction
- Should propagation go forward or backward.outputSparsity
- The interval at which to produce output samples.
By default this should be set to one, meaning that output will be saved in the saved states
for every step. If a thinner (but less accurate) ephemeris is desired you can set this
to a higher number. Two means that output is saved every other integration step, etc, etc.progressTracker
- An optional progress tracker.@Nonnull protected Duration getPropagatorsRecommendedStep()
StoppingConditions
can know how to sample themselves
and if their step size will be used if it is smaller than the propagators recommended value.
Also when this StoppablePropagator
is restepping to find the exact event, this
value will be ignored.getPropagatorsRecommendedStep
in class StoppablePropagator
protected abstract PointEvaluator initializePropagationPoint(@Nonnull JulianDate date, @Nonnull Motion1<Cartesian> motion)
Creates the PointEvaluator
that will be sampled for propagation. Note that it is possible,
and sometimes required, to make this PointEvaluator
with a different EvaluatorGroup
than the one that made this propagator. Do not cache the group that made this propagator, and design your
derived propagator to have no undesired side effects or dependencies on the PointEvaluator
returned from this method.
date
- The initial date
of the point.motion
- The initial Motion1
of the returned point.PointEvaluator
that will be sampled by this stoppable propagator.public void initializePropagator(ITimeBasedState initialState)
initialState
is null, then it is the responsibility of the calling code for the initial state passed into the
StoppablePropagator.propagateUntilStop(ITimeBasedState,Iterable,IntegrationSense,boolean,int,ITrackCalculationProgress)
method to already be in the correct ReferenceFrame
or Axes
.initializePropagator
in class StoppablePropagator
initialState
- The new initial state to propagate from.
This state will be processed by the Adapters
(get
).public ITimeBasedState takeStep(@Nonnull Duration step, boolean createNewState)
step
matters, if
is it negative then the step should be taken backwards.takeStep
in class StoppablePropagator
step
- The step to take from the CurrentDate
(get
). You do not need to
update the CurrentDate
(get
) or any other properties on the base type in the overridden
method.createNewState
- For performance reasons, it is not always desirable to create a
new ITimeBasedState
at every step. If this is true, you must create a
new instance of a state. If this is false, then this method can return a mutable state
that has just been updated with the current information.CurrentDate
(get
) plus the step
.protected StoppablePropagatorResults createStoppedPropagatorResult(StoppingConditionEvent stoppingEvent, List<StoppingConditionEvent> detectedEvents, List<ITimeBasedState> savedStates, boolean aborted)
createStoppedPropagatorResult
in class StoppablePropagator
stoppingEvent
- The event
that actually stopped propagation.detectedEvents
- All of the events
found during propagation.savedStates
- All the states saved during propagation.aborted
- If the run was aborted.protected final ReferenceFrame getPropagationFrame()
ReferenceFrame
to propagate the point in.