aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Carpet/Carpet/param.ccl6
-rw-r--r--Carpet/Carpet/src/CallFunction.cc7
-rw-r--r--Carpet/Carpet/src/Cycle.cc86
-rw-r--r--Carpet/Carpet/src/Initialise.cc358
-rw-r--r--Carpet/Carpet/src/carpet.hh4
5 files changed, 217 insertions, 244 deletions
diff --git a/Carpet/Carpet/param.ccl b/Carpet/Carpet/param.ccl
index ebf602a3a..6e7280b44 100644
--- a/Carpet/Carpet/param.ccl
+++ b/Carpet/Carpet/param.ccl
@@ -1,5 +1,5 @@
# Parameter definitions for thorn Carpet
-# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/param.ccl,v 1.21 2002/09/25 19:55:04 schnetter Exp $
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/param.ccl,v 1.22 2002/11/16 19:10:49 schnetter Exp $
shares: Cactus
@@ -63,6 +63,8 @@ CCTK_INT ghost_size "Ghost zones in each spatial direction"
+private:
+
CCTK_INT max_refinement_levels "Maximum number of refinement levels (including the base level)"
{
1:* :: "must be positive"
@@ -198,7 +200,7 @@ CCTK_INT processor_topology_3d_z "Number of processors in z-direction"
STRING grid_structure_filename "File name to output grid structure to (empty = no output)"
{
- .* :: "must be a file name"
+ ".*" :: "must be a legal file name"
} ""
diff --git a/Carpet/Carpet/src/CallFunction.cc b/Carpet/Carpet/src/CallFunction.cc
index 4b042f0ba..cc2ee5913 100644
--- a/Carpet/Carpet/src/CallFunction.cc
+++ b/Carpet/Carpet/src/CallFunction.cc
@@ -9,7 +9,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/CallFunction.cc,v 1.5 2002/10/24 10:39:37 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/CallFunction.cc,v 1.6 2002/11/16 19:10:50 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_CallFunction_cc);
}
@@ -34,6 +34,8 @@ namespace Carpet {
if (attribute->global) {
// Global operation: call once per refinement level
+ Waypoint ("%*sGlobal mode call at %s to %s::%s", 2*reflevel, "",
+ attribute->where, attribute->thorn, attribute->routine);
const int res = CCTK_CallFunction (function, attribute, data);
assert (res==0);
@@ -42,6 +44,9 @@ namespace Carpet {
BEGIN_LOCAL_COMPONENT_LOOP(cgh) {
+ Waypoint ("%*sLocal mode call on component %d at %s to %s::%s",
+ 2*reflevel, "", component,
+ attribute->where, attribute->thorn, attribute->routine);
const int res = CCTK_CallFunction (function, attribute, data);
assert (res==0);
diff --git a/Carpet/Carpet/src/Cycle.cc b/Carpet/Carpet/src/Cycle.cc
index 8e741f6f0..b3d4745a2 100644
--- a/Carpet/Carpet/src/Cycle.cc
+++ b/Carpet/Carpet/src/Cycle.cc
@@ -9,7 +9,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Cycle.cc,v 1.11 2002/10/24 10:39:38 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Cycle.cc,v 1.12 2002/11/16 19:10:50 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_Cycle_cc);
}
@@ -45,74 +45,38 @@ namespace Carpet {
void FlipTimeLevels (const cGH* cgh)
{
- Checkpoint ("%*sFlipTimeLevels", 2*reflevel, "");
+ Checkpoint ("FlipTimeLevels");
for (int group=0; group<CCTK_NumGroups(); ++group) {
- if (CCTK_GroupTypeI(group) == CCTK_GF
- && CCTK_QueryGroupStorageI(cgh, group)) {
- for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
-
- assert (group<(int)arrdata.size());
- assert (var<(int)arrdata[group].data.size());
- for (int rl=0; rl<arrdata[group].hh->reflevels(); ++rl) {
- for (int c=0; c<arrdata[group].hh->components(rl); ++c) {
- arrdata[group].data[var]->flip (rl, c, mglevel);
- }
- }
-
- }
- }
- }
- }
-
-
- void FlipTimeLevelsOnCoarser (const cGH* cgh, const int cur_rl)
- {
- Checkpoint ("%*sFlipTimeLevels", 2*reflevel, "");
-
- for (int group=0; group<CCTK_NumGroups(); ++group) {
- if (CCTK_GroupTypeI(group) == CCTK_GF
- && CCTK_QueryGroupStorageI(cgh, group)) {
- for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
-
- assert (group<(int)arrdata.size());
- assert (var<(int)arrdata[group].data.size());
- for (int rl=0; rl<arrdata[group].hh->reflevels(); ++rl) {
- if (rl <= cur_rl) {
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
+
+ const int var0 = CCTK_FirstVarIndexI(group);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(var0);
+ switch (num_tl) {
+ case 1:
+ // Do nothing
+ break;
+ case 3:
+ // Flip
+ for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+
+ assert (group<(int)arrdata.size());
+ assert (var<(int)arrdata[group].data.size());
+ for (int rl=0; rl<hh->reflevels(); ++rl) {
for (int c=0; c<arrdata[group].hh->components(rl); ++c) {
- arrdata[group].data[var]->flip (rl, c, mglevel);
+ arrdata[group].data[var]->flip (rl, c, mglevel);
}
}
+
}
-
- }
+ break;
+ default:
+ // Error
+ assert (0);
+ } // switch
+
}
}
}
-
- void CopyCurrToPrevTimeLevels (const cGH* cgh, const int cur_rl)
- {
- Checkpoint ("%*sFlipTimeLevels", 2*reflevel, "");
-
- for (int group=0; group<CCTK_NumGroups(); ++group) {
- if (CCTK_GroupTypeI(group) == CCTK_GF
- && CCTK_QueryGroupStorageI(cgh, group)) {
- for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
-
- assert (group<(int)arrdata.size());
- assert (var<(int)arrdata[group].data.size());
- for (int rl=0; rl<arrdata[group].hh->reflevels(); ++rl) {
- for (int c=0; c<arrdata[group].hh->components(rl); ++c) {
- arrdata[group].data[var]->copytoprevs (rl, c, mglevel);
- }
- }
-
- }
- }
- }
- }
-
-
-
} // namespace Carpet
diff --git a/Carpet/Carpet/src/Initialise.cc b/Carpet/Carpet/src/Initialise.cc
index 15a43aaf4..1ab98cbe5 100644
--- a/Carpet/Carpet/src/Initialise.cc
+++ b/Carpet/Carpet/src/Initialise.cc
@@ -12,7 +12,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Initialise.cc,v 1.22 2002/10/24 10:39:38 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Initialise.cc,v 1.23 2002/11/16 19:10:50 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_Initialise_cc);
}
@@ -24,6 +24,10 @@ namespace Carpet {
+ void Initialise3TL (cGH* const cgh);
+
+
+
int Initialise (tFleshConfig* fc)
{
DECLARE_CCTK_PARAMETERS;
@@ -94,181 +98,6 @@ namespace Carpet {
- // Scott's algorithm for getting two extra timelevels of data
- if (init_3_timelevels) {
-
- int time_dir = 1; //Positive = forward (+t), Negative = backward (-t)
- CCTK_INFO("Initializing THREE timelevels");
- //SHH:check the current time
- BEGIN_REFLEVEL_LOOP(cgh) {
- BEGIN_MGLEVEL_LOOP(cgh) {
- cout << "Time at rl=" << reflevel << ", ml=" << mglevel << ", is "
- << tt->get_time (reflevel, mglevel) << " and "
- << cgh->cctk_time / base_delta_time << endl;
- } END_MGLEVEL_LOOP(cgh);
- } END_REFLEVEL_LOOP(cgh);
-
- // Stupid hack: Copy data at current time to all prev levels
- BEGIN_REFLEVEL_LOOP(cgh) {
- BEGIN_MGLEVEL_LOOP(cgh) {
- CopyCurrToPrevTimeLevels(cgh,reflevel);
- } END_MGLEVEL_LOOP(cgh);
- } END_REFLEVEL_LOOP(cgh);
-
- BEGIN_REFLEVEL_LOOP(cgh) {
- BEGIN_MGLEVEL_LOOP(cgh) {
- // Evolve "forward" (which may be backward for lev=1,3,5,7...)
-
- cout << "`forward': Before CycleTimeLevels & AdvanceTime, "
- << "time on rl=" << reflevel << ", ml=" << mglevel << ", is "
- << tt->get_time (reflevel, mglevel) << " and "
- << cgh->cctk_time / base_delta_time << endl;
- // Cycle time levels
- // erik: what about arrays?
- CycleTimeLevels (cgh);
-
- // Advance level times
- tt->advance_time (reflevel, mglevel);
- cgh->cctk_time = cctk_initial_time + base_delta_time * tt->get_time (reflevel, mglevel);
- cout << "`forward': After CycleTimeLevels & AdvanceTime, "
- << "time on rl=" << reflevel << ", ml=" << mglevel << ", is "
- << tt->get_time (reflevel, mglevel) << " and "
- << cgh->cctk_time / base_delta_time << endl;
- Waypoint ("%*sScheduling PRESTEP", 2*reflevel, "");
- CCTK_ScheduleTraverse ("CCTK_PRESTEP", cgh, CallFunction);
- Waypoint ("%*sScheduling EVOL", 2*reflevel, "");
- CCTK_ScheduleTraverse ("CCTK_EVOL", cgh, CallFunction);
- Waypoint ("%*sScheduling POSTSTEP", 2*reflevel, "");
- CCTK_ScheduleTraverse ("CCTK_POSTSTEP", cgh, CallFunction);
-
- // erik: what about arrays?
- //SHH: There was an error in the way I wrote it.
- // FlipTimeLevels should ONLY flip on levels reflevel and lower
- //FlipTimeLevelsOnCoarser(cgh,reflevel);
- cout << "Flipping time levels" << endl;
- FlipTimeLevels(cgh);
- for (int rl=0; rl<hh->reflevels(); ++rl) {
- tt->set_time (rl, mglevel, -1*tt->get_time (rl, mglevel) );
- tt->set_delta (rl, mglevel,-1*tt->get_delta (rl, mglevel));
- }
- cgh->cctk_time = cctk_initial_time + base_delta_time * tt->get_time (reflevel, mglevel);
- // Keep track of which direction (in time) we're integrating
- time_dir *= -1;
- cgh->cctk_delta_time = time_dir * base_delta_time / reflevelfact * mglevelfact;
-
- cout << "`post-flip': "
- << "time on rl=" << reflevel << ", ml=" << mglevel << ", is "
- << tt->get_time (reflevel, mglevel) << " and "
- << cgh->cctk_time / base_delta_time << endl;
-
- cout << "Evolving in the opposite time-direction" << endl;
- // Note: Since we just flipped, we don't need to cycle or advancetime
- // erik: what about arrays?
- Waypoint ("%*sScheduling PRESTEP", 2*reflevel, "");
- CCTK_ScheduleTraverse ("CCTK_PRESTEP", cgh, CallFunction);
- Waypoint ("%*sScheduling EVOL", 2*reflevel, "");
- CCTK_ScheduleTraverse ("CCTK_EVOL", cgh, CallFunction);
- Waypoint ("%*sScheduling POSTSTEP", 2*reflevel, "");
- CCTK_ScheduleTraverse ("CCTK_POSTSTEP", cgh, CallFunction);
-
- } END_MGLEVEL_LOOP(cgh);
- } END_REFLEVEL_LOOP(cgh);
-
- cout << "Hourglass structure in place." << endl;
-
- //SHH:check the current time
- BEGIN_REFLEVEL_LOOP(cgh) {
- BEGIN_MGLEVEL_LOOP(cgh) {
- cgh->cctk_time = cctk_initial_time + base_delta_time * tt->get_time (reflevel, mglevel);
- cout << "Time at rl=" << reflevel << ", ml=" << mglevel << ", is "
- << tt->get_time (reflevel, mglevel) << " and "
- << cgh->cctk_time / base_delta_time << endl;
- } END_MGLEVEL_LOOP(cgh);
- } END_REFLEVEL_LOOP(cgh);
-
- cout << "Evolving backwards one extra step." << endl;
- // Make sure we're pointed backwards, in order to get 2 "previous"
- // timelevels. We could change the if statement to
- // "if (mod(MaxLevels,2) == 0)", but I prefer to check time_dir
- // explicitly, because it's easier to follow and I don't have to
- // worry about having made a mistake
- if (time_dir > 0) {
- // erik: what about arrays?
- BEGIN_REFLEVEL_LOOP(cgh) {
- BEGIN_MGLEVEL_LOOP(cgh) {
- FlipTimeLevels(cgh);
- for (int rl=0; rl<hh->reflevels(); ++rl) {
- tt->set_time (rl, mglevel, -1*tt->get_time (rl, mglevel) );
- tt->set_delta (rl, mglevel,-1*tt->get_delta (rl, mglevel));
- }
- } END_MGLEVEL_LOOP(cgh);
- } END_REFLEVEL_LOOP(cgh);
- time_dir *= -1;
- cgh->cctk_delta_time = time_dir * base_delta_time / reflevelfact * mglevelfact;
- }
-
- // Evolve each level "backwards" one more timestep
- // Starting with the finest level and proceeding to the coarsest
- BEGIN_REVERSE_REFLEVEL_LOOP(cgh) {
- BEGIN_MGLEVEL_LOOP(cgh) {
-
- // Restrict from reflevel+1 to reflevel
- // (it checks and does nothing if reflevel is the finest level
- cgh->cctk_time = cctk_initial_time + base_delta_time * tt->get_time (reflevel, mglevel);
- cout << "Calling Restrict for revlevel = " << reflevel
- << " at time = " << tt->get_time (reflevel, mglevel) << " and "
- << cgh->cctk_time / base_delta_time << endl;
- Restrict (cgh);
-
- // Cycle time levels
- // erik: advance time here
- CycleTimeLevels (cgh);
- // Advance level times
- tt->advance_time (reflevel, mglevel);
- cgh->cctk_time = cctk_initial_time + base_delta_time * tt->get_time (reflevel, mglevel);
- // SHH: What's with this "2*" stuff?
- Waypoint ("%*sScheduling PRESTEP", 2*reflevel, "");
- CCTK_ScheduleTraverse ("CCTK_PRESTEP", cgh, CallFunction);
- Waypoint ("%*sScheduling EVOL", 2*reflevel, "");
- CCTK_ScheduleTraverse ("CCTK_EVOL", cgh, CallFunction);
- Waypoint ("%*sScheduling POSTSTEP", 2*reflevel, "");
- CCTK_ScheduleTraverse ("CCTK_POSTSTEP", cgh, CallFunction);
-
- } END_MGLEVEL_LOOP(cgh);
- } END_REVERSE_REFLEVEL_LOOP(cgh);
-
- // One final flip to get everything pointed "forward" again
- assert (time_dir < 0);
- // erik: what about arrays?
- BEGIN_MGLEVEL_LOOP(cgh) {
- FlipTimeLevels(cgh);
- for (int rl=0; rl<hh->reflevels(); ++rl) {
- tt->set_time (rl, mglevel, 0);
- }
- } END_MGLEVEL_LOOP(cgh);
- time_dir *= -1;
- cgh->cctk_delta_time = time_dir * base_delta_time / reflevelfact * mglevelfact;
-
- //SHH:check the current time
- // At this point all "current times" should be the same
- BEGIN_REFLEVEL_LOOP(cgh) {
- BEGIN_MGLEVEL_LOOP(cgh) {
- cgh->cctk_time = cctk_initial_time + base_delta_time * tt->get_time (reflevel, mglevel);
- cout << "Time at rl=" << reflevel << ", ml=" << mglevel << ", is "
- << tt->get_time(reflevel, mglevel) << " and "
- << cgh->cctk_time / base_delta_time << endl;
- } END_MGLEVEL_LOOP(cgh);
- } END_REFLEVEL_LOOP(cgh);
-
- cgh->cctk_time = cctk_initial_time;
-
- CCTK_INFO("Finished initializing three timelevels");
-
- } // end of init_3_timelevels
- // end of Scott's algorithm for getting two extra timelevels of data
-
-
-
BEGIN_REVERSE_REFLEVEL_LOOP(cgh) {
BEGIN_MGLEVEL_LOOP(cgh) {
@@ -287,6 +116,23 @@ namespace Carpet {
// Checking
PoisonCheck (cgh, alltimes);
+ } END_MGLEVEL_LOOP(cgh);
+
+ } END_REVERSE_REFLEVEL_LOOP(cgh);
+
+
+
+ if (init_3_timelevels) {
+ // Call Scott's algorithm for getting two extra timelevels of data
+ Initialise3TL (cgh);
+ }
+
+
+
+ BEGIN_REVERSE_REFLEVEL_LOOP(cgh) {
+
+ BEGIN_MGLEVEL_LOOP(cgh) {
+
// Checking
CalculateChecksums (cgh, allbutcurrenttime);
@@ -316,5 +162,163 @@ namespace Carpet {
return 0;
}
-
+
+
+ void Initialise3TL (cGH* const cgh)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ CCTK_INFO ("Initialising three timelevels");
+
+ // Act as if this was the first iteration
+ cgh->cctk_iteration = 1;
+
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+
+ cgh->cctk_time = cctk_initial_time;
+
+ // Cycle time levels (ignore arrays)
+ cout << "3TL rl=" << reflevel << " cycling" << endl;
+ CycleTimeLevels (cgh);
+
+ // Advance level times
+ tt->advance_time (reflevel, mglevel);
+ cgh->cctk_time += cgh->cctk_delta_time;
+ cout << "3TL rl=" << reflevel << " ml=" << mglevel
+ << " time=" << tt->get_time (reflevel, mglevel)
+ << " time=" << cgh->cctk_time / base_delta_time << endl;
+
+ // Evolve forward
+ Waypoint ("%*sScheduling PRESTEP", 2*reflevel, "");
+ CCTK_ScheduleTraverse ("CCTK_PRESTEP", cgh, CallFunction);
+ Waypoint ("%*sScheduling EVOL", 2*reflevel, "");
+ CCTK_ScheduleTraverse ("CCTK_EVOL", cgh, CallFunction);
+ Waypoint ("%*sScheduling POSTSTEP", 2*reflevel, "");
+ CCTK_ScheduleTraverse ("CCTK_POSTSTEP", cgh, CallFunction);
+
+ // Flip time levels
+ cout << "3TL rl=" << reflevel << " flipping" << endl;
+ FlipTimeLevels (cgh);
+
+ // Invert level times
+ for (int rl=0; rl<hh->reflevels(); ++rl) {
+ tt->set_delta (rl, mglevel, - tt->get_delta (rl, mglevel));
+ tt->advance_time (rl, mglevel);
+ tt->advance_time (rl, mglevel);
+ }
+ cgh->cctk_delta_time *= -1;
+ cgh->cctk_time += cgh->cctk_delta_time;
+ cgh->cctk_time += cgh->cctk_delta_time;
+ cout << "3TL rl=" << reflevel << " ml=" << mglevel
+ << " time=" << tt->get_time (reflevel, mglevel)
+ << " time=" << cgh->cctk_time / base_delta_time << endl;
+
+ // Evolve backward
+ Waypoint ("%*sScheduling PRESTEP", 2*reflevel, "");
+ CCTK_ScheduleTraverse ("CCTK_PRESTEP", cgh, CallFunction);
+ Waypoint ("%*sScheduling EVOL", 2*reflevel, "");
+ CCTK_ScheduleTraverse ("CCTK_EVOL", cgh, CallFunction);
+ Waypoint ("%*sScheduling POSTSTEP", 2*reflevel, "");
+ CCTK_ScheduleTraverse ("CCTK_POSTSTEP", cgh, CallFunction);
+
+ // Flip time levels back
+ cout << "3TL rl=" << reflevel << " flipping back" << endl;
+ FlipTimeLevels (cgh);
+
+ // Invert level times back
+ for (int rl=0; rl<hh->reflevels(); ++rl) {
+ tt->set_delta (rl, mglevel, - tt->get_delta (rl, mglevel));
+ tt->advance_time (rl, mglevel);
+ tt->advance_time (rl, mglevel);
+ }
+ cgh->cctk_delta_time *= -1;
+ cgh->cctk_time += cgh->cctk_delta_time;
+ cgh->cctk_time += cgh->cctk_delta_time;
+ cout << "3TL rl=" << reflevel << " ml=" << mglevel
+ << " time=" << tt->get_time (reflevel, mglevel)
+ << " time=" << cgh->cctk_time / base_delta_time << endl;
+
+ } END_MGLEVEL_LOOP(cgh);
+ } END_REFLEVEL_LOOP(cgh);
+
+ cout << "Hourglass structure in place" << endl;
+
+ // Act as if this was the second iteration
+ cgh->cctk_iteration = 2;
+
+ // Evolve each level "backwards" one more timestep
+ // Starting with the finest level and proceeding to the coarsest
+ BEGIN_REVERSE_REFLEVEL_LOOP(cgh) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+
+ cgh->cctk_time = cctk_initial_time + cgh->cctk_delta_time;
+
+ // Restrict
+ cout << "3TL rl=" << reflevel << " restricting" << endl;
+ Restrict (cgh);
+
+ // Flip time levels
+ cout << "3TL rl=" << reflevel << " flipping" << endl;
+ FlipTimeLevels (cgh);
+
+ // Invert level times
+ for (int rl=0; rl<hh->reflevels(); ++rl) {
+ tt->set_delta (rl, mglevel, - tt->get_delta (rl, mglevel));
+ tt->advance_time (rl, mglevel);
+ tt->advance_time (rl, mglevel);
+ }
+ cgh->cctk_delta_time *= -1;
+ cgh->cctk_time += cgh->cctk_delta_time;
+ cgh->cctk_time += cgh->cctk_delta_time;
+ cout << "3TL rl=" << reflevel << " ml=" << mglevel
+ << " time=" << tt->get_time (reflevel, mglevel)
+ << " time=" << cgh->cctk_time / base_delta_time << endl;
+
+ // Cycle time levels
+ cout << "3TL rl=" << reflevel << " cycling" << endl;
+ CycleTimeLevels (cgh);
+
+ // Advance level times
+ tt->advance_time (reflevel, mglevel);
+ cgh->cctk_time += cgh->cctk_delta_time;
+ cout << "3TL rl=" << reflevel << " ml=" << mglevel
+ << " time=" << tt->get_time (reflevel, mglevel)
+ << " time=" << cgh->cctk_time / base_delta_time << endl;
+
+ // Evolve backward
+ Waypoint ("%*sScheduling PRESTEP", 2*reflevel, "");
+ CCTK_ScheduleTraverse ("CCTK_PRESTEP", cgh, CallFunction);
+ Waypoint ("%*sScheduling EVOL", 2*reflevel, "");
+ CCTK_ScheduleTraverse ("CCTK_EVOL", cgh, CallFunction);
+ Waypoint ("%*sScheduling POSTSTEP", 2*reflevel, "");
+ CCTK_ScheduleTraverse ("CCTK_POSTSTEP", cgh, CallFunction);
+
+ // Flip time levels back
+ cout << "3TL rl=" << reflevel << " flipping back" << endl;
+ FlipTimeLevels (cgh);
+
+ // Invert level times back
+ for (int rl=0; rl<hh->reflevels(); ++rl) {
+ tt->set_delta (rl, mglevel, - tt->get_delta (rl, mglevel));
+ tt->advance_time (rl, mglevel);
+ tt->advance_time (rl, mglevel);
+ }
+ cgh->cctk_delta_time *= -1;
+ cgh->cctk_time += cgh->cctk_delta_time;
+ cgh->cctk_time += cgh->cctk_delta_time;
+ cout << "3TL rl=" << reflevel << " ml=" << mglevel
+ << " time=" << tt->get_time (reflevel, mglevel)
+ << " time=" << cgh->cctk_time / base_delta_time << endl;
+
+ } END_MGLEVEL_LOOP(cgh);
+ } END_REVERSE_REFLEVEL_LOOP(cgh);
+
+ // Reset stuff
+ cgh->cctk_iteration = 0;
+ cgh->cctk_time = cctk_initial_time;
+
+ CCTK_INFO ("Finished initialising three timelevels");
+ }
+
} // namespace Carpet
diff --git a/Carpet/Carpet/src/carpet.hh b/Carpet/Carpet/src/carpet.hh
index eb2134fde..ed504c119 100644
--- a/Carpet/Carpet/src/carpet.hh
+++ b/Carpet/Carpet/src/carpet.hh
@@ -1,4 +1,4 @@
-// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet.hh,v 1.20 2002/09/01 14:52:23 schnetter Exp $
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet.hh,v 1.21 2002/11/16 19:10:50 schnetter Exp $
#ifndef CARPET_HH
#define CARPET_HH
@@ -14,8 +14,6 @@ namespace Carpet {
void Regrid (const cGH* cgh);
void CycleTimeLevels (const cGH* cgh);
void FlipTimeLevels (const cGH* cgh);
- void FlipTimeLevelsOnCoarser (const cGH* cgh, const int cur_rl);
- void CopyCurrToPrevTimeLevels (const cGH* cgh, const int cur_rl);
void Restrict (const cGH* cgh);
void Recompose (const cGH* cgh,