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 org.sbml.squeezer.math.DESEvent;
/**
* 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
*/
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.util.ArrayList;
import org.sbml.squeezer.math.DESEvent;
import eva2.tools.math.Mathematics;
@ -27,10 +26,6 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
*
*/
private static boolean useLinearCalc = true;
/*
*
*/
private ArrayList<DESEvent> events;
/**
*
* @param args
@ -64,6 +59,7 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
*
*/
public RKEventSolver() {
}
/**
@ -74,7 +70,7 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
*/
public RKEventSolver(boolean withLinearCalc) {
useLinearCalc = withLinearCalc;
events = new ArrayList<DESEvent>();
}
/**
@ -82,7 +78,7 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
*/
public RKEventSolver(double 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,
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)) {
if (event.hasDelay()){
this.events.add(event);
}
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]);
}
//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]);
}
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] - change[j]));
Ytemp[j] = res[j] - (Ytemp[j] - change[j]);
} else Ytemp[j] = 0d;
return Ytemp;
return newYtemp;
}
@ -374,10 +361,13 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
* @param EDES
* @return
*/
public double[] processRules(double time, double[] Ytemp,
public void processRules(double time, double[] Ytemp,
EventDESystem EDES){
return null;
int index;
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;
// process events
double[] YtempClone2 = processEvents(x, Ytemp.clone(), EDES, change);
double[] YtempClone2 = processEvents(x, Ytemp, EDES, change);
Mathematics.vvAdd(Ytemp, YtempClone2, Ytemp);
processRules(x, Ytemp, EDES);
}
@ -475,8 +466,9 @@ public class RKEventSolver extends AbstractDESSolver implements Serializable {
}
}
// process events
double[] YtempClone = processEvents(x, Ytemp.clone(), EDES, change);
double[] YtempClone = processEvents(x, Ytemp, EDES, change);
Mathematics.vvAdd(Ytemp, YtempClone, Ytemp);
processRules(x, Ytemp, EDES);
if (includeTimes) {
result[i][0] = timePoints[i];