aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschnetter <>2002-11-16 18:10:00 +0000
committerschnetter <>2002-11-16 18:10:00 +0000
commit268355779dc482c32e26893a3610889a4610cde1 (patch)
tree41736402b5afc4f7a0aa5acc4cf9c855a95c7f64
parentb778dac68604f5eebe997235797ce0433aa36ed0 (diff)
Rearranged the three timelevel initialisation. It now happens later,
Rearranged the three timelevel initialisation. It now happens later, after the postinitial timebin. It is still not clear whether its calling sequence of evol and poststep is consistent. darcs-hash:20021116181049-07bb3-35ffbf63479365b4453a73ae6a25feff47d0757f.gz
-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,