aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet/src/Evolve.cc
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2008-05-14 13:34:43 -0500
committerErik Schnetter <schnetter@cct.lsu.edu>2008-05-14 13:34:43 -0500
commitbd5ed7a1103113f0d82b3694948ef9b6413154e5 (patch)
treec1c0876565013fde724ae3221c54501ceb030e0d /Carpet/Carpet/src/Evolve.cc
parent0f8df591c1bd1c7db3683c19e61163d211192253 (diff)
Carpet: Compare simulation times with relative accuracy
Diffstat (limited to 'Carpet/Carpet/src/Evolve.cc')
-rw-r--r--Carpet/Carpet/src/Evolve.cc43
1 files changed, 36 insertions, 7 deletions
diff --git a/Carpet/Carpet/src/Evolve.cc b/Carpet/Carpet/src/Evolve.cc
index 1cf712c8b..19eb748f7 100644
--- a/Carpet/Carpet/src/Evolve.cc
+++ b/Carpet/Carpet/src/Evolve.cc
@@ -2,6 +2,7 @@
#include <cassert>
#include <cstdio>
#include <cstdlib>
+#include <iostream>
#include <map>
#include <string>
#include <sstream>
@@ -90,6 +91,24 @@ namespace Carpet {
}
}
+ // Ensure that all levels have consistent times
+ {
+ // This is dangerouse because it compares floating point
+ // numbers for equality
+ assert (cctkGH->cctk_time == global_time);
+ for (int ml=0; ml<mglevels; ++ml) {
+ for (int rl=0; rl<reflevels; ++rl) {
+ int const do_every =
+ ipow (mgfact, ml) * (maxtimereflevelfact / timereffacts.at(rl));
+ if (cctkGH->cctk_iteration % do_every == 0) {
+ // This is dangerouse because it compares floating point
+ // numbers for equality
+ assert (leveltimes.at(ml).at(rl) == global_time);
+ }
+ }
+ }
+ }
+
} // end main loop
timer.stop();
@@ -366,13 +385,23 @@ namespace Carpet {
CCTK_REAL const carpet_time = cctkGH->cctk_time / delta_time;
for (int m=0; m<maps; ++m) {
vtt.at(m)->advance_time (reflevel, mglevel);
- CCTK_REAL const eps = 1.0e-12;
- static_assert (abs(0.1) > 0,
- "Function CarpetLib::abs has wrong signature");
- CCTK_REAL const level_time =
- vtt.at(m)->get_time (reflevel, mglevel);
- assert (abs (level_time - carpet_time) < eps);
- vtt.at(m)->set_time (reflevel, mglevel, carpet_time);
+ if (not adaptive_stepsize) {
+ CCTK_REAL const eps = 1.0e-12;
+ static_assert (abs(0.1) > 0,
+ "Function CarpetLib::abs has wrong signature");
+ CCTK_REAL const level_time =
+ vtt.at(m)->get_time (reflevel, mglevel);
+ if (not (abs (level_time - carpet_time) < eps)) {
+ cerr << "ml: " << ml << endl
+ << "rl: " << rl << endl
+ << "m: " << m << endl
+ << "level_time: " << level_time << endl
+ << "carpet_time: " << carpet_time << endl;
+ }
+ assert (abs (level_time - carpet_time) <
+ eps * max (carpet_time, 1.0));
+ vtt.at(m)->set_time (reflevel, mglevel, carpet_time);
+ }
}
CycleTimeLevels (cctkGH);