Top Description Fields Constructors Methods
org.apache.commons.math3.ode.sampling

public Class StepNormalizer

extends Object
implements StepHandler
Class Inheritance
All Implemented Interfaces
org.apache.commons.math3.ode.sampling.StepHandler
Imports
org.apache.commons.math3.exception.MaxCountExceededException, org.apache.commons.math3.util.FastMath, .Precision

This class wraps an object implementing FixedStepHandler into a StepHandler.

This wrapper allows to use fixed step handlers with general integrators which cannot guaranty their integration steps will remain constant and therefore only accept general step handlers.

The stepsize used is selected at construction time. The handleStep method of the underlying FixedStepHandler object is called at normalized times. The normalized times can be influenced by the StepNormalizerMode and StepNormalizerBounds.

There is no constraint on the integrator, it can use any time step it needs (time steps longer or shorter than the fixed time step and non-integer ratios are all allowed).

Examples (step size = 0.5)
Start timeEnd time DirectionMode BoundsOutput
0.33.1forwardINCREMENTNEITHER0.8, 1.3, 1.8, 2.3, 2.8
0.33.1forwardINCREMENTFIRST0.3, 0.8, 1.3, 1.8, 2.3, 2.8
0.33.1forwardINCREMENTLAST0.8, 1.3, 1.8, 2.3, 2.8, 3.1
0.33.1forwardINCREMENTBOTH0.3, 0.8, 1.3, 1.8, 2.3, 2.8, 3.1
0.33.1forwardMULTIPLESNEITHER0.5, 1.0, 1.5, 2.0, 2.5, 3.0
0.33.1forwardMULTIPLESFIRST0.3, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0
0.33.1forwardMULTIPLESLAST0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.1
0.33.1forwardMULTIPLESBOTH0.3, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.1
0.03.0forwardINCREMENTNEITHER0.5, 1.0, 1.5, 2.0, 2.5, 3.0
0.03.0forwardINCREMENTFIRST0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0
0.03.0forwardINCREMENTLAST0.5, 1.0, 1.5, 2.0, 2.5, 3.0
0.03.0forwardINCREMENTBOTH0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0
0.03.0forwardMULTIPLESNEITHER0.5, 1.0, 1.5, 2.0, 2.5, 3.0
0.03.0forwardMULTIPLESFIRST0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0
0.03.0forwardMULTIPLESLAST0.5, 1.0, 1.5, 2.0, 2.5, 3.0
0.03.0forwardMULTIPLESBOTH0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0
3.10.3backwardINCREMENTNEITHER2.6, 2.1, 1.6, 1.1, 0.6
3.10.3backwardINCREMENTFIRST3.1, 2.6, 2.1, 1.6, 1.1, 0.6
3.10.3backwardINCREMENTLAST2.6, 2.1, 1.6, 1.1, 0.6, 0.3
3.10.3backwardINCREMENTBOTH3.1, 2.6, 2.1, 1.6, 1.1, 0.6, 0.3
3.10.3backwardMULTIPLESNEITHER3.0, 2.5, 2.0, 1.5, 1.0, 0.5
3.10.3backwardMULTIPLESFIRST3.1, 3.0, 2.5, 2.0, 1.5, 1.0, 0.5
3.10.3backwardMULTIPLESLAST3.0, 2.5, 2.0, 1.5, 1.0, 0.5, 0.3
3.10.3backwardMULTIPLESBOTH3.1, 3.0, 2.5, 2.0, 1.5, 1.0, 0.5, 0.3
3.00.0backwardINCREMENTNEITHER2.5, 2.0, 1.5, 1.0, 0.5, 0.0
3.00.0backwardINCREMENTFIRST3.0, 2.5, 2.0, 1.5, 1.0, 0.5, 0.0
3.00.0backwardINCREMENTLAST2.5, 2.0, 1.5, 1.0, 0.5, 0.0
3.00.0backwardINCREMENTBOTH3.0, 2.5, 2.0, 1.5, 1.0, 0.5, 0.0
3.00.0backwardMULTIPLESNEITHER2.5, 2.0, 1.5, 1.0, 0.5, 0.0
3.00.0backwardMULTIPLESFIRST3.0, 2.5, 2.0, 1.5, 1.0, 0.5, 0.0
3.00.0backwardMULTIPLESLAST2.5, 2.0, 1.5, 1.0, 0.5, 0.0
3.00.0backwardMULTIPLESBOTH3.0, 2.5, 2.0, 1.5, 1.0, 0.5, 0.0

Since
1.2
See Also
StepHandler, FixedStepHandler, StepNormalizerMode, StepNormalizerBounds

Field Summary

Modifier and TypeField and Description
private final StepNormalizerBounds
bounds

The step normalizer bounds settings to use.

private double
firstTime

First step time.

private boolean
forward

Integration direction indicator.

private double
h

Fixed time step.

private final FixedStepHandler
handler

Underlying step handler.

private double[]
lastDerivatives

Last derivatives vector.

private double[]
lastState

Last state vector.

private double
lastTime

Last step time.

private final StepNormalizerMode
mode

The step normalizer mode to use.

Constructor Summary

AccessConstructor and Description
public
StepNormalizer(final double
fixed time step (sign is not used)
h
,
final FixedStepHandler
fixed time step handler to wrap
handler
)

Simple constructor.

public
StepNormalizer(final double
fixed time step (sign is not used)
h
,
final FixedStepHandler
fixed time step handler to wrap
handler
,
final StepNormalizerMode
step normalizer mode to use
mode
)

Simple constructor.

public
StepNormalizer(final double
fixed time step (sign is not used)
h
,
final FixedStepHandler
fixed time step handler to wrap
handler
,
final StepNormalizerBounds
step normalizer bounds setting to use
bounds
)

Simple constructor.

public
StepNormalizer(final double
fixed time step (sign is not used)
h
,
final FixedStepHandler
fixed time step handler to wrap
handler
,
final StepNormalizerMode
step normalizer mode to use
mode
,
final StepNormalizerBounds
step normalizer bounds setting to use
bounds
)

Simple constructor.

Method Summary

Modifier and TypeMethod and Description
private void
doNormalizedStep(boolean
true if the step is the last one
isLast
)

Invokes the underlying step handler for the current normalized step.

public void
handleStep(final StepInterpolator
interpolator for the last accepted step. For efficiency purposes, the various integrators reuse the same object on each call, so if the instance wants to keep it across all calls (for example to provide at the end of the integration a continuous model valid throughout the integration range), it should build a local copy using the clone method and store this copy.
interpolator
,
final boolean
true if the step is the last one
isLast
)

Implements org.apache.commons.math3.ode.sampling.StepHandler.handleStep.

Handle the last accepted step

public void
init(double
start value of the independent time variable
t0
,
double[]
array containing the start value of the state vector
y0
,
double
target time for the integration
t
)

Implements org.apache.commons.math3.ode.sampling.StepHandler.init.

Initialize step handler at the start of an ODE integration.

private boolean

Returns:

value indicating whether the next normalized time is in the current step
isNextInStep
(double
the next normalized time
nextTime
,
StepInterpolator
interpolator for the last accepted step, to use to get the end time of the current step
interpolator
)

Returns a value indicating whether the next normalized time is in the current step.

private void
storeStep(StepInterpolator
interpolator for the last accepted step, to use to get the interpolated information
interpolator
,
double
the time for which to store the interpolated information
t
)

Stores the interpolated information for the given time in the current state.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

boundsback to summary
private final StepNormalizerBounds bounds

The step normalizer bounds settings to use.

firstTimeback to summary
private double firstTime

First step time.

forwardback to summary
private boolean forward

Integration direction indicator.

hback to summary
private double h

Fixed time step.

handlerback to summary
private final FixedStepHandler handler

Underlying step handler.

lastDerivativesback to summary
private double[] lastDerivatives

Last derivatives vector.

lastStateback to summary
private double[] lastState

Last state vector.

lastTimeback to summary
private double lastTime

Last step time.

modeback to summary
private final StepNormalizerMode mode

The step normalizer mode to use.

Constructor Detail

StepNormalizerback to summary
public StepNormalizer(final double h, final FixedStepHandler handler)

Simple constructor. Uses INCREMENT mode, and FIRST bounds setting, for backwards compatibility.

Parameters
h:double

fixed time step (sign is not used)

handler:FixedStepHandler

fixed time step handler to wrap

StepNormalizerback to summary
public StepNormalizer(final double h, final FixedStepHandler handler, final StepNormalizerMode mode)

Simple constructor. Uses FIRST bounds setting.

Parameters
h:double

fixed time step (sign is not used)

handler:FixedStepHandler

fixed time step handler to wrap

mode:StepNormalizerMode

step normalizer mode to use

Since
3.0
StepNormalizerback to summary
public StepNormalizer(final double h, final FixedStepHandler handler, final StepNormalizerBounds bounds)

Simple constructor. Uses INCREMENT mode.

Parameters
h:double

fixed time step (sign is not used)

handler:FixedStepHandler

fixed time step handler to wrap

bounds:StepNormalizerBounds

step normalizer bounds setting to use

Since
3.0
StepNormalizerback to summary
public StepNormalizer(final double h, final FixedStepHandler handler, final StepNormalizerMode mode, final StepNormalizerBounds bounds)

Simple constructor.

Parameters
h:double

fixed time step (sign is not used)

handler:FixedStepHandler

fixed time step handler to wrap

mode:StepNormalizerMode

step normalizer mode to use

bounds:StepNormalizerBounds

step normalizer bounds setting to use

Since
3.0

Method Detail

doNormalizedStepback to summary
private void doNormalizedStep(boolean isLast)

Invokes the underlying step handler for the current normalized step.

Parameters
isLast:boolean

true if the step is the last one

handleStepback to summary
public void handleStep(final StepInterpolator interpolator, final boolean isLast) throws MaxCountExceededException

Implements org.apache.commons.math3.ode.sampling.StepHandler.handleStep.

Handle the last accepted step

Parameters
interpolator:StepInterpolator

interpolator for the last accepted step. For efficiency purposes, the various integrators reuse the same object on each call, so if the instance wants to keep it across all calls (for example to provide at the end of the integration a continuous model valid throughout the integration range), it should build a local copy using the clone method and store this copy.

isLast:boolean

true if the step is the last one

Exceptions
MaxCountExceededException:
if the interpolator throws one because the number of functions evaluations is exceeded
initback to summary
public void init(double t0, double[] y0, double t)

Implements org.apache.commons.math3.ode.sampling.StepHandler.init.

Doc from org.apache.commons.math3.ode.sampling.StepHandler.init.

Initialize step handler at the start of an ODE integration.

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

Parameters
t0:double

start value of the independent time variable

y0:double[]

array containing the start value of the state vector

t:double

target time for the integration

isNextInStepback to summary
private boolean isNextInStep(double nextTime, StepInterpolator interpolator)

Returns a value indicating whether the next normalized time is in the current step.

Parameters
nextTime:double

the next normalized time

interpolator:StepInterpolator

interpolator for the last accepted step, to use to get the end time of the current step

Returns:boolean

value indicating whether the next normalized time is in the current step

storeStepback to summary
private void storeStep(StepInterpolator interpolator, double t) throws MaxCountExceededException

Stores the interpolated information for the given time in the current state.

Parameters
interpolator:StepInterpolator

interpolator for the last accepted step, to use to get the interpolated information

t:double

the time for which to store the interpolated information

Exceptions
MaxCountExceededException:
if the interpolator throws one because the number of functions evaluations is exceeded