Changed usage of ArrayList in interface to regular List.
This commit is contained in:
		@@ -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<DESAssignment> processEvents(double t, double Y[]);
 | 
			
		||||
	public List<DESAssignment> processEvents(double t, double Y[], double[] res);
 | 
			
		||||
	
 | 
			
		||||
	public ArrayList<DESAssignment>  processAssignmentRules(double t, double Y[]);
 | 
			
		||||
	public List<DESAssignment>  processAssignmentRules(double t, double Y[]);
 | 
			
		||||
	
 | 
			
		||||
	public ArrayList<DESAssignment>  processAlgebraicRules(double t, double Y[]);
 | 
			
		||||
	public List<DESAssignment>  processAlgebraicRules(double t, double Y[]);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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 <code>TRUE</code>, <code>includeTimes</code> 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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user