This commit is contained in:
Alexander Dörr 2010-02-11 16:27:54 +00:00
parent cd2e3a3e49
commit 74f7bdd92d
2 changed files with 28 additions and 36 deletions

View File

@ -5,7 +5,7 @@ package eva2.tools.math.des;
import java.util.ArrayList; import java.util.ArrayList;
import org.sbml.squeezer.math.DESEvent;
/** /**
* This Class represents an event-driven DES * This Class represents an event-driven DES
@ -25,10 +25,10 @@ public interface EventDESystem extends DESystem {
* *
* @return Returns an array with delays for the change of concentration due to events * @return Returns an array with delays for the change of concentration due to events
*/ */
public ArrayList<DESEvent> processEvents(double t, double Y[]); public ArrayList<DESAssignment> processEvents(double t, double Y[]);
public double[] processAssignmentRules(double t, double Y[], double res[]); public ArrayList<DESAssignment> processAssignmentRules(double t, double Y[]);
public double[] processAlgebraicRules(double t, double Y[], double res[]); public ArrayList<DESAssignment> processAlgebraicRules(double t, double Y[]);
} }

View File

@ -3,7 +3,6 @@ package eva2.tools.math.des;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import org.sbml.squeezer.math.DESEvent;
import eva2.tools.math.Mathematics; import eva2.tools.math.Mathematics;
@ -27,10 +26,6 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
* *
*/ */
private static boolean useLinearCalc = true; private static boolean useLinearCalc = true;
/*
*
*/
private ArrayList<DESEvent> events;
/** /**
* *
* @param args * @param args
@ -64,6 +59,7 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
* *
*/ */
public RKEventSolver() { public RKEventSolver() {
} }
/** /**
@ -74,7 +70,7 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
*/ */
public RKEventSolver(boolean withLinearCalc) { public RKEventSolver(boolean withLinearCalc) {
useLinearCalc = withLinearCalc; useLinearCalc = withLinearCalc;
events = new ArrayList<DESEvent>();
} }
/** /**
@ -82,7 +78,7 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
*/ */
public RKEventSolver(double stepSize) { public RKEventSolver(double stepSize) {
this.stepSize = stepSize; this.stepSize = stepSize;
events = new ArrayList<DESEvent>();
} }
/** /**
@ -342,27 +338,18 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
*/ */
public double[] processEvents(double time, double[] Ytemp, public double[] processEvents(double time, double[] Ytemp,
EventDESystem EDES, double[] change) { EventDESystem EDES, double[] change) {
double[] YtempNew = new double[Ytemp.length]; double[] newYtemp = new double[Ytemp.length];
int index;
for (DESAssignment event : EDES.processEvents(time, Ytemp)) {
index = event.getIndex();
for (DESEvent event : EDES.processEvents(time, Ytemp)) { //newYtemp[index] = event.getValue() - (Ytemp[index]);
if (event.hasDelay()){ newYtemp[index] = event.getValue() - (Ytemp[index] - change[index]);
this.events.add(event); 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]);
else{
System.out.printf("time %s: Ytemp[%s]_old = %s\tYtemp[%s]_new = %s\n",
time,j, Ytemp[j], j, res[j] - (Ytemp[j] - change[j]));
Ytemp[j] = res[j] - (Ytemp[j] - change[j]);
}
} }
for (int j = 0; j < delays.length; j++) return newYtemp;
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] - change[j]));
Ytemp[j] = res[j] - (Ytemp[j] - change[j]);
} else Ytemp[j] = 0d;
return Ytemp;
} }
@ -374,10 +361,13 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
* @param EDES * @param EDES
* @return * @return
*/ */
public double[] processRules(double time, double[] Ytemp, public void processRules(double time, double[] Ytemp,
EventDESystem EDES){ EventDESystem EDES){
int index;
return null; for (DESAssignment event : EDES.processAssignmentRules(time, Ytemp)) {
index = event.getIndex();
Ytemp[index] = event.getValue();
}
} }
@ -454,8 +444,9 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
x += h; x += h;
// process events // process events
double[] YtempClone2 = processEvents(x, Ytemp.clone(), EDES, change); double[] YtempClone2 = processEvents(x, Ytemp, EDES, change);
Mathematics.vvAdd(Ytemp, YtempClone2, Ytemp); Mathematics.vvAdd(Ytemp, YtempClone2, Ytemp);
processRules(x, Ytemp, EDES);
} }
@ -475,8 +466,9 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
} }
} }
// process events // process events
double[] YtempClone = processEvents(x, Ytemp.clone(), EDES, change); double[] YtempClone = processEvents(x, Ytemp, EDES, change);
Mathematics.vvAdd(Ytemp, YtempClone, Ytemp); Mathematics.vvAdd(Ytemp, YtempClone, Ytemp);
processRules(x, Ytemp, EDES);
if (includeTimes) { if (includeTimes) {
result[i][0] = timePoints[i]; result[i][0] = timePoints[i];