Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add 2 tests to handle problems when using timesteps too big.
authordonassbr <donassbr@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Wed, 4 Nov 2009 12:13:50 +0000 (12:13 +0000)
committerdonassbr <donassbr@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Wed, 4 Nov 2009 12:13:50 +0000 (12:13 +0000)
This part of code will disappear soon, but this commit can be used to retrieve this implementation of trace integration feature (with multi levels).

git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6829 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/surf/cpu_ti.c

index 0da2860..8a17197 100644 (file)
@@ -1442,6 +1442,12 @@ static double surf_cpu_integrate_exactly(surf_cpu_ti_tgmr_t trace, int index,
     return (b - a) * (trace->levels[0]->values[index]);
 
   while (a > tmgr_date) {
+    /* too big timestep */
+    if (tmgr_index >=
+        xbt_dynar_length(trace->levels[0]->power_trace->event_list)) {
+      return (b - a) * (trace->levels[0]->values[index]);
+    }
+
     xbt_dynar_get_cpy(trace->levels[0]->power_trace->event_list, tmgr_index,
                       &elem);
     tmgr_date += elem.delta;
@@ -1507,6 +1513,12 @@ static double surf_cpu_solve_exactly(surf_cpu_ti_tgmr_t trace, int index,
     return amount / (trace->levels[0]->values[index]);
 
   while (a > tmgr_date) {
+    /* too big timestep */
+    if (tmgr_index >=
+        xbt_dynar_length(trace->levels[0]->power_trace->event_list)) {
+      return (amount) * (trace->levels[0]->values[index]);
+    }
+
     xbt_dynar_get_cpy(trace->levels[0]->power_trace->event_list, tmgr_index,
                       &elem);
     tmgr_date += elem.delta;