aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet/src/Evolve.cc
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2008-02-26 14:04:00 +0000
committerErik Schnetter <schnetter@cct.lsu.edu>2008-02-26 14:04:00 +0000
commitdd754fc5be4955b18b6f0a6911d5a589bd5d0c0a (patch)
tree3ceabd0f69f93d7b4e6d27dc778f6760c0c97278 /Carpet/Carpet/src/Evolve.cc
parent4d1aa9dbb9b0a89c6524d6e8028a0453d8af5a78 (diff)
Carpet: Set time on refinement levels explicitly from global time
Set time on the refinement levels explicitly from the global time. This avoids accumulation of round-off errors. darcs-hash:20080226140439-dae7b-999dc372d9586fa34ccc181d39572338d5f23e9e.gz
Diffstat (limited to 'Carpet/Carpet/src/Evolve.cc')
-rw-r--r--Carpet/Carpet/src/Evolve.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/Carpet/Carpet/src/Evolve.cc b/Carpet/Carpet/src/Evolve.cc
index 574dbc246..1cf712c8b 100644
--- a/Carpet/Carpet/src/Evolve.cc
+++ b/Carpet/Carpet/src/Evolve.cc
@@ -1,3 +1,4 @@
+#include <algorithm>
#include <cassert>
#include <cstdio>
#include <cstdlib>
@@ -358,13 +359,21 @@ namespace Carpet {
have_done_anything = true;
// Advance times
- for (int m=0; m<maps; ++m) {
- vtt.at(m)->advance_time (reflevel, mglevel);
- }
cctkGH->cctk_time
= (global_time
- delta_time / maxtimereflevelfact
+ delta_time * mglevelfact / timereflevelfact);
+ 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);
+ }
CycleTimeLevels (cctkGH);
Waypoint ("Evolution I at iteration %d time %g%s%s",