From 9687ff1fa9c7afc3a104e6ce97dfcf969b4d789c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Dr=C3=A4ger?= Date: Thu, 18 Feb 2010 17:52:39 +0000 Subject: [PATCH] Changed usage of ArrayList in interface to regular List. --- src/eva2/tools/math/des/EventDESystem.java | 9 ++-- src/eva2/tools/math/des/RKEventSolver.java | 54 ++++++++++------------ src/eva2/tools/math/des/RKSolverV2.java | 37 +++++++-------- 3 files changed, 49 insertions(+), 51 deletions(-) diff --git a/src/eva2/tools/math/des/EventDESystem.java b/src/eva2/tools/math/des/EventDESystem.java index a7ef5a7f..05db4011 100644 --- a/src/eva2/tools/math/des/EventDESystem.java +++ b/src/eva2/tools/math/des/EventDESystem.java @@ -3,7 +3,7 @@ */ package eva2.tools.math.des; -import java.util.ArrayList; +import java.util.List; @@ -22,13 +22,14 @@ public interface EventDESystem extends DESystem { * of the species stored in Y. The new values for the species * are stored in res. The positions in the array returned by this method * correspond to the positions in Y/res. + * @param res * * @return Returns an array with delays for the change of concentration due to events */ - public ArrayList processEvents(double t, double Y[]); + public List processEvents(double t, double Y[], double[] res); - public ArrayList processAssignmentRules(double t, double Y[]); + public List processAssignmentRules(double t, double Y[]); - public ArrayList processAlgebraicRules(double t, double Y[]); + public List processAlgebraicRules(double t, double Y[]); } diff --git a/src/eva2/tools/math/des/RKEventSolver.java b/src/eva2/tools/math/des/RKEventSolver.java index 04f820d1..a011bad3 100644 --- a/src/eva2/tools/math/des/RKEventSolver.java +++ b/src/eva2/tools/math/des/RKEventSolver.java @@ -3,19 +3,19 @@ package eva2.tools.math.des; import java.io.Serializable; import java.util.ArrayList; - import eva2.tools.math.Mathematics; /** - * Title: JAVA-EVA Description: Runge-Kutta Method with Events Copyright: Copyright (c) 2002 - * Company: University of Tübingen, Computer Architecture + * Title: JAVA-EVA Description: Runge-Kutta Method with Events Copyright: + * Copyright (c) 2002 Company: University of Tübingen, Computer + * Architecture * * @author Hannes Planatscher * @author Andreas Dräger * @author Marcel Kronfeld * @author Alexander Dörr - * @version 1.1 Status: works, but numerical inaccurate. Modified to process events, e.g. sudden - * changes in the absolute values of the system + * @version 1.1 Status: works, but numerical inaccurate. Modified to process + * events, e.g. sudden changes in the absolute values of the system */ public class RKEventSolver extends AbstractDESSolver implements Serializable { /** @@ -26,6 +26,7 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable { * */ private static boolean useLinearCalc = true; + /** * * @param args @@ -70,7 +71,7 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable { */ public RKEventSolver(boolean withLinearCalc) { useLinearCalc = withLinearCalc; - + } /** @@ -78,7 +79,7 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable { */ public RKEventSolver(double stepSize) { this.stepSize = stepSize; - + } /** @@ -327,8 +328,7 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable { } /** - * Processes sudden changes in the system due to events in - * the EDES + * Processes sudden changes in the system due to events in the EDES * * @param time * @param Ytemp @@ -339,21 +339,23 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable { public double[] processEvents(double time, double[] Ytemp, EventDESystem EDES, double[] change) { double[] newYtemp = new double[Ytemp.length]; - int index; + int index; for (DESAssignment event : EDES.processEvents(time, Ytemp)) { index = event.getIndex(); - //newYtemp[index] = event.getValue() - (Ytemp[index]); + // newYtemp[index] = event.getValue() - (Ytemp[index]); newYtemp[index] = event.getValue() - (Ytemp[index] - change[index]); - System.out.printf("time %s: \tYtemp[%s]_old = %s\tYtemp[%s]_new = %s\t change %s \n", - time,index, Ytemp[index], index, (event.getValue() - (Ytemp[index])),change[index]); - } + System.out + .printf( + "time %s: \tYtemp[%s]_old = %s\tYtemp[%s]_new = %s\t change %s \n", + time, index, Ytemp[index], index, + (event.getValue() - (Ytemp[index])), change[index]); + } return newYtemp; } - - + /** * * @param time @@ -361,16 +363,14 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable { * @param EDES * @return */ - public void processRules(double time, double[] Ytemp, - EventDESystem EDES){ + public void processRules(double time, double[] Ytemp, EventDESystem EDES) { int index; for (DESAssignment event : EDES.processAssignmentRules(time, Ytemp)) { index = event.getIndex(); Ytemp[index] = event.getValue(); } - + } - /** * When set to TRUE, includeTimes will make the @@ -418,21 +418,17 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable { else Ytemp = result[i - 1].clone(); - // Ytemp = processEventsVoid(x, Ytemp,EDES); for (int j = 0; j < inbetweensteps; j++) { - if (useLinearCalc) rkTerm2(EDES, h, x, Ytemp, change); else change = rkTerm(EDES, h, x, Ytemp); // System.out.println("aft change 0 " + change[0]); - - + Mathematics.vvAdd(Ytemp, change, Ytemp); - if (this.nonnegative) { for (int k = 0; k < Ytemp.length; k++) { @@ -443,7 +439,7 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable { x += h; - // process events + // process events double[] YtempClone2 = processEvents(x, Ytemp, EDES, change); Mathematics.vvAdd(Ytemp, YtempClone2, Ytemp); processRules(x, Ytemp, EDES); @@ -469,7 +465,7 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable { double[] YtempClone = processEvents(x, Ytemp, EDES, change); Mathematics.vvAdd(Ytemp, YtempClone, Ytemp); processRules(x, Ytemp, EDES); - + if (includeTimes) { result[i][0] = timePoints[i]; System.arraycopy(Ytemp, 0, result[i], 1, Ytemp.length); @@ -537,14 +533,14 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable { return result; } - @Override + // @Override public double[][] solveAtTimePoints(DESystem DES, double[] initialvalue, double[] timepoints) { // TODO Auto-generated method stub return null; } - @Override + // @Override public double[][] solveAtTimePointsWithInitialConditions(DESystem DES, double[][] initconditions, double[] timepoints) { // TODO Auto-generated method stub diff --git a/src/eva2/tools/math/des/RKSolverV2.java b/src/eva2/tools/math/des/RKSolverV2.java index ae67855e..ea428a88 100644 --- a/src/eva2/tools/math/des/RKSolverV2.java +++ b/src/eva2/tools/math/des/RKSolverV2.java @@ -326,24 +326,26 @@ public class RKSolverV2 extends AbstractDESSolver implements Serializable { double[] res = new double[Ytemp.length]; // Arrays.fill(res, 0); double[] delays = EDES.processEvents(time, Ytemp, res); - System.out.println("delay " +Arrays.toString(delays)); + System.out.println("delay " + Arrays.toString(delays)); for (int j = 0; j < delays.length; j++) - if (!Double.isNaN(delays[j])) { - System.out.printf("time %s :Ytemp[%s]_old = %s\tYtemp[%s]_new = %s\n", - time,j, Ytemp[j], j, (res[j] - Ytemp[j])); - Ytemp[j] = res[j] - Ytemp[j]; - } else Ytemp[j] = 0d; + if (!Double.isNaN(delays[j])) { + System.out.printf( + "time %s :Ytemp[%s]_old = %s\tYtemp[%s]_new = %s\n", + time, j, Ytemp[j], j, (res[j] - Ytemp[j])); + Ytemp[j] = res[j] - Ytemp[j]; + } else + Ytemp[j] = 0d; return Ytemp; } - - public static boolean containsNaN(double[] arr){ + + public static boolean containsNaN(double[] arr) { for (int i = 0; i < arr.length; i++) { if (Double.isNaN(arr[i])) return true; } - + return false; } @@ -408,19 +410,18 @@ public class RKSolverV2 extends AbstractDESSolver implements Serializable { Ytemp = result[i - 1].clone(); // process events - //double[] YtempClone = processEvents(x, Ytemp.clone(), EDES); + // double[] YtempClone = processEvents(x, Ytemp.clone(), EDES); // Ytemp = processEventsVoid(x, Ytemp,EDES); for (int j = 0; j < inbetweensteps; j++) { - + if (useLinearCalc) rkTerm2(EDES, h, x, Ytemp, change); else change = rkTerm(EDES, h, x, Ytemp); // System.out.println("aft change 0 " + change[0]); - + Mathematics.vvAdd(Ytemp, change, Ytemp); - if (this.nonnegative) { for (int k = 0; k < Ytemp.length; k++) { @@ -431,14 +432,14 @@ public class RKSolverV2 extends AbstractDESSolver implements Serializable { x += h; - // process events + // process events double[] YtempClone2 = processEvents(x, Ytemp.clone(), EDES); Mathematics.vvAdd(Ytemp, YtempClone2, Ytemp); - //processEventsVoid(x, Ytemp,EDES); + // processEventsVoid(x, Ytemp,EDES); } // ohne wirkung - //Mathematics.vvAdd(Ytemp, YtempClone, Ytemp); + // Mathematics.vvAdd(Ytemp, YtempClone, Ytemp); h = timePoints[i] - x; @@ -523,14 +524,14 @@ public class RKSolverV2 extends AbstractDESSolver implements Serializable { return result; } - @Override + // @Override public double[][] solveAtTimePoints(DESystem DES, double[] initialvalue, double[] timepoints) { // TODO Auto-generated method stub return null; } - @Override + // @Override public double[][] solveAtTimePointsWithInitialConditions(DESystem DES, double[][] initconditions, double[] timepoints) { // TODO Auto-generated method stub