diff options
author | Erik Schnetter <schnetter@cct.lsu.edu> | 2008-02-26 14:04:00 +0000 |
---|---|---|
committer | Erik Schnetter <schnetter@cct.lsu.edu> | 2008-02-26 14:04:00 +0000 |
commit | dd754fc5be4955b18b6f0a6911d5a589bd5d0c0a (patch) | |
tree | 3ceabd0f69f93d7b4e6d27dc778f6760c0c97278 /Carpet/Carpet/src/Evolve.cc | |
parent | 4d1aa9dbb9b0a89c6524d6e8028a0453d8af5a78 (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.cc | 15 |
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", |