Repository: commons-math Updated Branches: refs/heads/field-ode 1e71453fa -> 8949c0b99
Integrator returns the full state, not only the time. Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/8949c0b9 Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/8949c0b9 Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/8949c0b9 Branch: refs/heads/field-ode Commit: 8949c0b99fbf04d3936faf6aaa4088eedd69016c Parents: 1e71453 Author: Luc Maisonobe <l...@apache.org> Authored: Sun Nov 15 10:35:50 2015 +0100 Committer: Luc Maisonobe <l...@apache.org> Committed: Sun Nov 15 10:35:50 2015 +0100 ---------------------------------------------------------------------- .../math3/ode/AbstractFieldIntegrator.java | 32 ++++++++++++++------ .../math3/ode/FieldFirstOrderIntegrator.java | 4 +-- 2 files changed, 25 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-math/blob/8949c0b9/src/main/java/org/apache/commons/math3/ode/AbstractFieldIntegrator.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math3/ode/AbstractFieldIntegrator.java b/src/main/java/org/apache/commons/math3/ode/AbstractFieldIntegrator.java index aa53c05..e200c09 100644 --- a/src/main/java/org/apache/commons/math3/ode/AbstractFieldIntegrator.java +++ b/src/main/java/org/apache/commons/math3/ode/AbstractFieldIntegrator.java @@ -57,8 +57,8 @@ public abstract class AbstractFieldIntegrator<T extends RealFieldElement<T>> imp /** Step handler. */ protected Collection<FieldStepHandler<T>> stepHandlers; - /** Current step start time. */ - protected T stepStart; + /** Current step start. */ + protected FieldODEStateAndDerivative<T> stepStart; /** Current stepsize. */ protected T stepSize; @@ -102,6 +102,13 @@ public abstract class AbstractFieldIntegrator<T extends RealFieldElement<T>> imp evaluations = IntegerSequence.Incrementor.create().withMaximalCount(Integer.MAX_VALUE); } + /** Get the field to which state vector elements belong. + * @return field to which state vector elements belong + */ + public Field<T> getField() { + return field; + } + /** {@inheritDoc} */ public String getName() { return name; @@ -160,7 +167,7 @@ public abstract class AbstractFieldIntegrator<T extends RealFieldElement<T>> imp } /** {@inheritDoc} */ - public T getCurrentStepStart() { + public FieldODEStateAndDerivative<T> getCurrentStepStart() { return stepStart; } @@ -189,27 +196,34 @@ public abstract class AbstractFieldIntegrator<T extends RealFieldElement<T>> imp * @param t0 start value of the independent <i>time</i> variable * @param y0 array containing the start value of the state vector * @param t target time for the integration - * @return derivative of the state at t0 (y0Dot) + * @return initial state with derivatives added */ - protected T[] initIntegration(final FieldExpandableODE<T> eqn, - final T t0, final T[] y0, final T t) { + protected FieldODEStateAndDerivative<T> initIntegration(final FieldExpandableODE<T> eqn, + final T t0, final T[] y0, final T t) { + + this.equations = eqn; + evaluations = evaluations.withStart(0); + + // initialize ODE + eqn.init(t0, y0, t); - this.equations = eqn; - evaluations = evaluations.withStart(0); + // set up derivatives of initial state final T[] y0Dot = computeDerivatives(t0, y0); final FieldODEStateAndDerivative<T> state0 = new FieldODEStateAndDerivative<T>(t0, y0, y0Dot); + // initialize event handlers for (final FieldEventState<T> state : eventsStates) { state.getEventHandler().init(state0, t); } + // initialize step handlers for (FieldStepHandler<T> handler : stepHandlers) { handler.init(state0, t); } setStateInitialized(false); - return y0Dot; + return state0; } http://git-wip-us.apache.org/repos/asf/commons-math/blob/8949c0b9/src/main/java/org/apache/commons/math3/ode/FieldFirstOrderIntegrator.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math3/ode/FieldFirstOrderIntegrator.java b/src/main/java/org/apache/commons/math3/ode/FieldFirstOrderIntegrator.java index 137eb50..7735e25 100644 --- a/src/main/java/org/apache/commons/math3/ode/FieldFirstOrderIntegrator.java +++ b/src/main/java/org/apache/commons/math3/ode/FieldFirstOrderIntegrator.java @@ -124,9 +124,9 @@ public interface FieldFirstOrderIntegrator<T extends RealFieldElement<T>> { * is attempted is needed.</p> * <p>The result is undefined if the method is called outside of * calls to <code>integrate</code>.</p> - * @return current value of the step start time t<sub>i</sub> + * @return current value of the state at step start time t<sub>i</sub> */ - T getCurrentStepStart(); + FieldODEStateAndDerivative<T> getCurrentStepStart(); /** Get the current signed value of the integration stepsize. * <p>This method can be called during integration (typically by