aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2013-09-25 18:45:46 -0400
committerErik Schnetter <schnetter@gmail.com>2013-09-25 18:45:46 -0400
commiteceb64cf06c7d0e9dbf037795cbb18184cb8bfbd (patch)
treeac64b6025568733bf5e92a476d1d670fbdb10b0c
parentd64cd7ecf401f32c463f33de973c56bb6dab1710 (diff)
Carpet: Initialise number of timelevels at the right time
Also clean up code structure for setting number of time levels.
-rw-r--r--Carpet/Carpet/src/SetupGH.cc74
1 files changed, 44 insertions, 30 deletions
diff --git a/Carpet/Carpet/src/SetupGH.cc b/Carpet/Carpet/src/SetupGH.cc
index 4c26e6405..d04a80265 100644
--- a/Carpet/Carpet/src/SetupGH.cc
+++ b/Carpet/Carpet/src/SetupGH.cc
@@ -57,6 +57,8 @@ namespace Carpet {
static void
setup_map_information ();
static void
+ setup_time_information ();
+ static void
setup_domain_extents (cGH const * cctkGH);
static void
allocate_grid_hierarchy (cGH const * cctkGH,
@@ -534,19 +536,18 @@ namespace Carpet {
// Initialise current position (must be the very first thing,
// before the first output)
- mglevel = -1;
- reflevel = -1;
- mc_grouptype = -1;
- map = -1;
- component = -1;
+ mglevel = -1;
+ reflevel = -1;
+ mc_grouptype = -1;
+ map = -1;
+ component = -1;
+ local_component = -1;
+ timelevel = -1;
+ timelevel_offset = -1;
#ifdef HAVE_CGH_CCTK_MODE
cctkGH->cctk_mode = CCTK_MODE_META;
#endif
- timelevels = maxtimelevels;
- timelevel = 0;
- timelevel_offset = 0;
-
// Say hello
Timers::Timer timer("CarpetStartup");
@@ -568,6 +569,7 @@ namespace Carpet {
setup_multigrid_information (cctkGH);
setup_refinement_information ();
setup_map_information ();
+ setup_time_information ();
// Calculate domain extents for each map
setup_domain_extents (cctkGH);
@@ -637,19 +639,6 @@ namespace Carpet {
{
DECLARE_CCTK_PARAMETERS;
- // Set maximum number of time levels
- if (max_time_levels < 0) {
- // Set automatically (backward compatibility)
- maxtimelevels = prolongation_order_time + 1;
- } else {
- maxtimelevels = max_time_levels;
- }
- if (maxtimelevels < prolongation_order_time + 1) {
- CCTK_VError (__LINE__, __FILE__, CCTK_THORNSTRING,
- "There are enough time levels for this time prolongation order: max_time_levels=%d, prolongation_order_time=%d",
- int(max_time_levels), int(prolongation_order_time));
- }
-
// Set maximum number of refinement levels
maxreflevels = max_refinement_levels;
@@ -737,6 +726,27 @@ namespace Carpet {
void
+ setup_time_information ()
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ // Set maximum number of time levels
+ if (max_time_levels < 0) {
+ // Set automatically (backward compatibility)
+ maxtimelevels = prolongation_order_time + 1;
+ } else {
+ maxtimelevels = max_time_levels;
+ }
+ if (maxtimelevels < prolongation_order_time + 1) {
+ CCTK_VError (__LINE__, __FILE__, CCTK_THORNSTRING,
+ "There are enough time levels for this time prolongation order: max_time_levels=%d, prolongation_order_time=%d",
+ int(max_time_levels), int(prolongation_order_time));
+ }
+ }
+
+
+
+ void
setup_domain_extents (cGH const * const cctkGH)
{
DECLARE_CCTK_PARAMETERS;
@@ -932,7 +942,7 @@ namespace Carpet {
// We are using the gh of the first map. This works because all
// maps have the same number of refinement levels.
- tt = new th (* vhh.AT(0), timelevels, timereffacts,
+ tt = new th (* vhh.AT(0), maxtimelevels, timereffacts,
time_interpolation_during_regridding);
}
@@ -1010,6 +1020,8 @@ namespace Carpet {
for (int m=0; m<maps; ++m) {
assert (vhh.AT(m)->reflevels() == reflevels);
}
+
+ timelevels = maxtimelevels;
}
@@ -1199,7 +1211,7 @@ namespace Carpet {
ghosts, buffers, overlaps, my_prolongation_orders_space);
arrdata.AT(group).AT(m).tt =
- new th (*arrdata.AT(group).AT(m).hh, timelevels, grouptimereffacts,
+ new th (*arrdata.AT(group).AT(m).hh, maxtimelevels, grouptimereffacts,
time_interpolation_during_regridding);
}
@@ -1409,12 +1421,14 @@ namespace Carpet {
}
// Set up things as if in local mode
- mglevel = 0;
- reflevel = 0;
- mc_grouptype = CCTK_GF;
- map = 0;
- component = 0;
- local_component = -1;
+ mglevel = 0;
+ reflevel = 0;
+ mc_grouptype = CCTK_GF;
+ map = 0;
+ component = 0;
+ local_component = -1;
+ timelevel = 0;
+ timelevel_offset = 0;
// Leave everything, so that everything is set up correctly
Timers::Timer("meta mode", 1).start();