Author: luc
Date: Mon Sep 10 13:42:13 2007
New Revision: 574365
URL: http://svn.apache.org/viewvc?rev=574365&view=rev
Log:
improved sanity checks at integration start
Modified:
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/AdaptiveStepsizeIntegrator.java
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/GraggBulirschStoerIntegrator.java
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/RungeKuttaFehlbergIntegrator.java
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/RungeKuttaIntegrator.java
Modified:
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/AdaptiveStepsizeIntegrator.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/ode/AdaptiveStepsizeIntegrator.java?rev=574365&r1=574364&r2=574365&view=diff
==============================================================================
---
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/AdaptiveStepsizeIntegrator.java
(original)
+++
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/AdaptiveStepsizeIntegrator.java
Mon Sep 10 13:42:13 2007
@@ -154,6 +154,58 @@
switchesHandler.add(function, maxCheckInterval, convergence);
}
+ /** Perform some sanity checks on the integration parameters.
+ * @param equations differential equations set
+ * @param t0 start time
+ * @param y0 state vector at t0
+ * @param t target time for the integration
+ * @param y placeholder where to put the state vector
+ * @exception IntegratorException if some inconsistency is detected
+ */
+ protected void sanityChecks(FirstOrderDifferentialEquations equations,
+ double t0, double[] y0, double t, double[] y)
+ throws IntegratorException {
+ if (equations.getDimension() != y0.length) {
+ throw new IntegratorException("dimensions mismatch: ODE problem has
dimension {0},"
+ + " initial state vector has dimension
{1}",
+ new String[] {
+
Integer.toString(equations.getDimension()),
+ Integer.toString(y0.length)
+ });
+ }
+ if (equations.getDimension() != y.length) {
+ throw new IntegratorException("dimensions mismatch: ODE problem has
dimension {0},"
+ + " final state vector has dimension
{1}",
+ new String[] {
+
Integer.toString(equations.getDimension()),
+ Integer.toString(y.length)
+ });
+ }
+ if ((vecAbsoluteTolerance != null) && (vecAbsoluteTolerance.length !=
y0.length)) {
+ throw new IntegratorException("dimensions mismatch: state vector has
dimension {0},"
+ + " absolute tolerance vector has
dimension {1}",
+ new String[] {
+ Integer.toString(y0.length),
+
Integer.toString(vecAbsoluteTolerance.length)
+ });
+ }
+ if ((vecRelativeTolerance != null) && (vecRelativeTolerance.length !=
y0.length)) {
+ throw new IntegratorException("dimensions mismatch: state vector has
dimension {0},"
+ + " relative tolerance vector has
dimension {1}",
+ new String[] {
+ Integer.toString(y0.length),
+
Integer.toString(vecRelativeTolerance.length)
+ });
+ }
+ if (Math.abs(t - t0) <= 1.0e-12 * Math.max(Math.abs(t0), Math.abs(t))) {
+ throw new IntegratorException("too small integration interval: length
= {0}",
+ new String[] {
+ Double.toString(Math.abs(t - t0))
+ });
+ }
+
+ }
+
/** Initialize the integration step.
* @param equations differential equations set
* @param forward forward integration indicator
Modified:
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/GraggBulirschStoerIntegrator.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/ode/GraggBulirschStoerIntegrator.java?rev=574365&r1=574364&r2=574365&view=diff
==============================================================================
---
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/GraggBulirschStoerIntegrator.java
(original)
+++
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/GraggBulirschStoerIntegrator.java
Mon Sep 10 13:42:13 2007
@@ -508,23 +508,7 @@
double t0, double[] y0, double t, double[] y)
throws DerivativeException, IntegratorException {
- // sanity check
- if (equations.getDimension() != y0.length) {
- throw new IntegratorException("dimensions mismatch: "
- + "ODE problem has dimension {0}"
- + ", state vector has dimension {1}",
- new String[] {
-
Integer.toString(equations.getDimension()),
- Integer.toString(y0.length)
- });
- }
- if (Math.abs(t - t0) <= 1.0e-12 * Math.max(Math.abs(t0), Math.abs(t))) {
- throw new IntegratorException("too small integration interval: length =
{0}",
- new String[] {
- Double.toString(Math.abs(t - t0))
- });
- }
-
+ sanityChecks(equations, t0, y0, t, y);
boolean forward = (t > t0);
// create some internal working arrays
Modified:
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/RungeKuttaFehlbergIntegrator.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/ode/RungeKuttaFehlbergIntegrator.java?rev=574365&r1=574364&r2=574365&view=diff
==============================================================================
---
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/RungeKuttaFehlbergIntegrator.java
(original)
+++
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/RungeKuttaFehlbergIntegrator.java
Mon Sep 10 13:42:13 2007
@@ -162,22 +162,7 @@
double t, double[] y)
throws DerivativeException, IntegratorException {
- // sanity check
- if (equations.getDimension() != y0.length) {
- throw new IntegratorException("dimensions mismatch: ODE problem has
dimension {0},"
- + " state vector has dimension {1}",
- new String[] {
-
Integer.toString(equations.getDimension()),
- Integer.toString(y0.length)
- });
- }
- if (Math.abs(t - t0) <= 1.0e-12 * Math.max(Math.abs(t0), Math.abs(t))) {
- throw new IntegratorException("too small integration interval: length =
{0}",
- new String[] {
- Double.toString(Math.abs(t - t0))
- });
- }
-
+ sanityChecks(equations, t0, y0, t, y);
boolean forward = (t > t0);
// create some internal working arrays
Modified:
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/RungeKuttaIntegrator.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/ode/RungeKuttaIntegrator.java?rev=574365&r1=574364&r2=574365&view=diff
==============================================================================
---
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/RungeKuttaIntegrator.java
(original)
+++
commons/proper/math/trunk/src/java/org/apache/commons/math/ode/RungeKuttaIntegrator.java
Mon Sep 10 13:42:13 2007
@@ -114,27 +114,47 @@
switchesHandler.add(function, maxCheckInterval, convergence);
}
- public void integrate(FirstOrderDifferentialEquations equations,
- double t0, double[] y0,
- double t, double[] y)
- throws DerivativeException, IntegratorException {
-
- // sanity check
+ /** Perform some sanity checks on the integration parameters.
+ * @param equations differential equations set
+ * @param t0 start time
+ * @param y0 state vector at t0
+ * @param t target time for the integration
+ * @param y placeholder where to put the state vector
+ * @exception IntegratorException if some inconsistency is detected
+ */
+ private void sanityChecks(FirstOrderDifferentialEquations equations,
+ double t0, double[] y0, double t, double[] y)
+ throws IntegratorException {
if (equations.getDimension() != y0.length) {
throw new IntegratorException("dimensions mismatch: ODE problem has
dimension {0},"
- + " state vector has dimension {1}",
+ + " initial state vector has dimension
{1}",
new String[] {
Integer.toString(equations.getDimension()),
Integer.toString(y0.length)
});
}
+ if (equations.getDimension() != y.length) {
+ throw new IntegratorException("dimensions mismatch: ODE problem has
dimension {0},"
+ + " final state vector has dimension
{1}",
+ new String[] {
+
Integer.toString(equations.getDimension()),
+ Integer.toString(y.length)
+ });
+ }
if (Math.abs(t - t0) <= 1.0e-12 * Math.max(Math.abs(t0), Math.abs(t))) {
throw new IntegratorException("too small integration interval: length =
{0}",
new String[] {
Double.toString(Math.abs(t - t0))
});
- }
-
+ }
+ }
+
+ public void integrate(FirstOrderDifferentialEquations equations,
+ double t0, double[] y0,
+ double t, double[] y)
+ throws DerivativeException, IntegratorException {
+
+ sanityChecks(equations, t0, y0, t, y);
boolean forward = (t > t0);
// create some internal working arrays