aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetEvolutionMask
diff options
context:
space:
mode:
authorRoland Haas <roland.haas@physics.gatech.edu>2012-11-09 09:39:42 -0800
committerRoland Haas <rhaas@tapir.caltech.edu>2013-02-11 13:13:13 -0800
commit4e166b68d40ec9ced2acdbebaccace667f6f6eeb (patch)
tree5f2e3e457dbf0bd3b32a5a3e0414c91e3cfc64bb /Carpet/CarpetEvolutionMask
parentcb1399a1072460b74e75b7d5c54389fbd7dffbb6 (diff)
CarpetEvolutionMask: compute a mask indicating where buffers are
this is s first implementatoion of this functionality. Eventually I want to extend it to label buffer points by the last MoL substep at which the grid point needs to have a RHS computed. Zero will mean "all the time" large numbers will mean "never".
Diffstat (limited to 'Carpet/CarpetEvolutionMask')
-rw-r--r--Carpet/CarpetEvolutionMask/interface.ccl5
-rw-r--r--Carpet/CarpetEvolutionMask/param.ccl4
-rw-r--r--Carpet/CarpetEvolutionMask/schedule.ccl4
-rw-r--r--Carpet/CarpetEvolutionMask/src/evolution_mask.cc56
-rw-r--r--Carpet/CarpetEvolutionMask/src/evolution_mask_init.c3
-rw-r--r--Carpet/CarpetEvolutionMask/test/buffer_mask.par81
-rw-r--r--Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.par79
-rw-r--r--Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.x.asc132
-rw-r--r--Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.y.asc135
-rw-r--r--Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.z.asc135
10 files changed, 634 insertions, 0 deletions
diff --git a/Carpet/CarpetEvolutionMask/interface.ccl b/Carpet/CarpetEvolutionMask/interface.ccl
index ee09bf695..06f9ce09b 100644
--- a/Carpet/CarpetEvolutionMask/interface.ccl
+++ b/Carpet/CarpetEvolutionMask/interface.ccl
@@ -19,3 +19,8 @@ USES INCLUDE HEADER: carpet.hh
PUBLIC:
CCTK_REAL evolution_mask TYPE=gf TAGS='prolongation="none" InterpNumTimelevels=1' "mask function"
+
+# value key:
+# 0 - grid point is not in buffer region
+# 1 - grid point is in buffer region
+CCTK_INT buffer_mask TYPE=gf TAGS='prolongation="none" InterpNumTimelevels=1' "buffer mask function"
diff --git a/Carpet/CarpetEvolutionMask/param.ccl b/Carpet/CarpetEvolutionMask/param.ccl
index 7f890e10a..b72b84923 100644
--- a/Carpet/CarpetEvolutionMask/param.ccl
+++ b/Carpet/CarpetEvolutionMask/param.ccl
@@ -26,3 +26,7 @@ INT enlarge_evolved_region_by "enlarge or shrink evolved region" STEERABLE=alway
0:* :: "positive values enlarge the evolved region"
*:0) :: "negative values shrink the evolved region. Up to buffer_width + nghostzones points can be removed"
} 0
+
+BOOLEAN provide_buffer_mask "Compute mask indicating which points need only be computed for some MoL substeps"
+{
+} "no"
diff --git a/Carpet/CarpetEvolutionMask/schedule.ccl b/Carpet/CarpetEvolutionMask/schedule.ccl
index 57b73eca5..bd9befc96 100644
--- a/Carpet/CarpetEvolutionMask/schedule.ccl
+++ b/Carpet/CarpetEvolutionMask/schedule.ccl
@@ -2,6 +2,10 @@
STORAGE: evolution_mask
+if (provide_buffer_mask) {
+ STORAGE: buffer_mask
+}
+
SCHEDULE GROUP EvolutionMaskBase_SetupEvolutionMask AT basegrid
{
diff --git a/Carpet/CarpetEvolutionMask/src/evolution_mask.cc b/Carpet/CarpetEvolutionMask/src/evolution_mask.cc
index 85670f700..5f39fac42 100644
--- a/Carpet/CarpetEvolutionMask/src/evolution_mask.cc
+++ b/Carpet/CarpetEvolutionMask/src/evolution_mask.cc
@@ -104,6 +104,11 @@ namespace CarpetEvolutionMask {
ibset antishrunk
(antirefined.expand(antishrinkby).
expanded_for(coarsebase));
+ // TODO: look up how this is done in regrid.cc
+ ibset buffers
+ (antirefined.expand(antishrinkby) & base);
+ buffers -= antirefined;
+ buffers &= base;
// cout << "antishrunk1: " << antishrunk << endl;
@@ -212,6 +217,57 @@ namespace CarpetEvolutionMask {
enter_level_mode (cctkGH, oldreflevel);
enter_singlemap_mode (cctkGH, oldmap, oldgrouptype);
}
+
+ // Indicate which points are in the buffer region on current level
+ if (provide_buffer_mask) {
+ BEGIN_LOCAL_COMPONENT_LOOP (cctkGH, CCTK_GF) {
+
+ DECLARE_CCTK_ARGUMENTS;
+
+ ibbox const & ext
+ = dd.light_boxes.at(mglevel).at(reflevel).at(component).exterior;
+
+ for (ibset::const_iterator bi = buffers.begin();
+ bi != buffers.end();
+ ++bi)
+ {
+
+ ibbox const & box = (*bi) & ext;
+ if (! box.empty()) {
+
+ assert (all ((box.lower() - ext.lower() ) >= 0));
+ assert (all ((box.upper() - ext.lower() + ext.stride()) >= 0));
+ assert (all ((box.lower() - ext.lower() ) % ext.stride() == 0));
+ assert (all ((box.upper() - ext.lower() + ext.stride()) % ext.stride() == 0));
+ ivect const imin = (box.lower() - ext.lower() ) / ext.stride();
+ ivect const imax = (box.upper() - ext.lower() + ext.stride()) / ext.stride();
+ assert (all (izero <= imin));
+ assert (box.empty() || all (imin <= imax));
+ assert (all (imax <= ivect::ref(cctk_lsh)));
+
+ if (verbose) {
+ ostringstream buf;
+ buf << "Setting buffer region on level " << reflevel << ": " << imin << ":" << imax-ione;
+ CCTK_INFO (buf.str().c_str());
+ }
+
+ // Set mask in the buffer region to 1
+ assert (dim == 3);
+ for (int k=imin[2]; k<imax[2]; ++k) {
+ for (int j=imin[1]; j<imax[1]; ++j) {
+ for (int i=imin[0]; i<imax[0]; ++i) {
+ int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k);
+ buffer_mask[ind] = 1;
+ }
+ }
+ }
+
+ } // if box not empty
+
+ } // for box
+
+ } END_LOCAL_COMPONENT_LOOP;
+ }
} // if reflevel>0
}
diff --git a/Carpet/CarpetEvolutionMask/src/evolution_mask_init.c b/Carpet/CarpetEvolutionMask/src/evolution_mask_init.c
index 193b0fab5..18848d1af 100644
--- a/Carpet/CarpetEvolutionMask/src/evolution_mask_init.c
+++ b/Carpet/CarpetEvolutionMask/src/evolution_mask_init.c
@@ -27,6 +27,9 @@ EvolutionMaskBase_InitEvolutionMask (CCTK_ARGUMENTS)
int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k);
evolution_mask[ind] = 1.0;
+ if (provide_buffer_mask) {
+ buffer_mask[ind] = 0;
+ }
}
}
diff --git a/Carpet/CarpetEvolutionMask/test/buffer_mask.par b/Carpet/CarpetEvolutionMask/test/buffer_mask.par
new file mode 100644
index 000000000..3806b2bdd
--- /dev/null
+++ b/Carpet/CarpetEvolutionMask/test/buffer_mask.par
@@ -0,0 +1,81 @@
+!DESC "Carpet mesh refined, test buffer mask computation"
+ActiveThorns = "time MoL coordbase symbase cartgrid3d ioutil boundary Carpet CarpetLib CarpetInterp CarpetReduce CarpetIOScalar CarpetIOBasic LoopControl InitBase CarpetRegrid2 ReflectionSymmetry CarpetIOASCII CarpetEvolutionMask"
+
+time::dtfac = 0.375
+
+boundary::radpower = 2
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_origin = "no"
+CoordBase::domainsize = minmax
+
+Carpet::domain_from_coordbase = "yes"
+CoordBase::spacing = "numcells"
+CoordBase::xmin = -15.0
+CoordBase::ymin = 0.0
+CoordBase::zmin = 0.0
+CoordBase::xmax = 15.0
+CoordBase::ymax = 15.0
+CoordBase::zmax = 15.0
+CoordBase::ncells_x = 24
+CoordBase::ncells_y = 12
+CoordBase::ncells_z = 12
+
+CoordBase::boundary_size_x_lower = 2
+CoordBase::boundary_size_y_lower = 2
+CoordBase::boundary_size_z_lower = 2
+CoordBase::boundary_shiftout_x_lower = 0
+CoordBase::boundary_shiftout_y_lower = 1
+CoordBase::boundary_shiftout_z_lower = 1
+CoordBase::boundary_size_x_upper = 2
+CoordBase::boundary_size_y_upper = 2
+CoordBase::boundary_size_z_upper = 2
+CoordBase::boundary_shiftout_x_upper = 0
+CoordBase::boundary_shiftout_y_upper = 0
+CoordBase::boundary_shiftout_z_upper = 0
+
+Carpet::max_refinement_levels = 3
+Carpet::use_buffer_zones = "yes"
+CarpetRegrid2::num_centres = 1
+CarpetRegrid2::num_levels_1 = 3
+CarpetRegrid2::radius_1[1] = 10
+CarpetRegrid2::radius_1[2] = 5
+
+Carpet::poison_new_timelevels = "yes"
+Carpet::init_fill_timelevels = "yes"
+CarpetLib::poison_new_memory = "yes"
+
+ReflectionSymmetry::reflection_x = "no"
+ReflectionSymmetry::reflection_y = "yes"
+ReflectionSymmetry::reflection_z = "yes"
+ReflectionSymmetry::avoid_origin_x = "no"
+ReflectionSymmetry::avoid_origin_y = "no"
+ReflectionSymmetry::avoid_origin_z = "no"
+ReflectionSymmetry::verbose = "no"
+
+driver::ghost_size = 2
+
+carpetevolutionmask::provide_buffer_mask = "yes"
+
+cactus::cctk_itlast = 0
+
+methodoflines::ode_method = "rk2"
+methodoflines::mol_intermediate_steps = 2
+methodoflines::mol_num_scratch_levels = 0
+
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+
+IO::out_dir = $parfile
+IO::out_fileinfo = "none"
+
+ioascii::compact_format = no
+ioascii::output_ghost_points = yes
+ioascii::output_symmetry_points = yes
+
+IOBasic::outInfo_every = -1
+
+IOASCII::out1D_every = 1
+IOASCII::out1D_d = "no"
+IOASCII::out1D_vars = "carpetevolutionmask::buffer_mask"
diff --git a/Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.par b/Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.par
new file mode 100644
index 000000000..c67541743
--- /dev/null
+++ b/Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.par
@@ -0,0 +1,79 @@
+!DESC "Carpet mesh refined, test buffer mask computation"
+ActiveThorns = "time MoL coordbase symbase cartgrid3d ioutil boundary Carpet CarpetLib CarpetInterp CarpetReduce CarpetIOScalar CarpetIOBasic LoopControl InitBase CarpetRegrid2 ReflectionSymmetry CarpetIOASCII CarpetEvolutionMask"
+
+time::dtfac = 0.375
+
+boundary::radpower = 2
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_origin = "no"
+CoordBase::domainsize = minmax
+
+Carpet::domain_from_coordbase = "yes"
+CoordBase::spacing = "numcells"
+CoordBase::xmin = -15.0
+CoordBase::ymin = 0.0
+CoordBase::zmin = 0.0
+CoordBase::xmax = 15.0
+CoordBase::ymax = 15.0
+CoordBase::zmax = 15.0
+CoordBase::ncells_x = 24
+CoordBase::ncells_y = 12
+CoordBase::ncells_z = 12
+
+CoordBase::boundary_size_x_lower = 2
+CoordBase::boundary_size_y_lower = 2
+CoordBase::boundary_size_z_lower = 2
+CoordBase::boundary_shiftout_x_lower = 0
+CoordBase::boundary_shiftout_y_lower = 1
+CoordBase::boundary_shiftout_z_lower = 1
+CoordBase::boundary_size_x_upper = 2
+CoordBase::boundary_size_y_upper = 2
+CoordBase::boundary_size_z_upper = 2
+CoordBase::boundary_shiftout_x_upper = 0
+CoordBase::boundary_shiftout_y_upper = 0
+CoordBase::boundary_shiftout_z_upper = 0
+
+Carpet::max_refinement_levels = 3
+Carpet::use_buffer_zones = "yes"
+CarpetRegrid2::num_centres = 1
+CarpetRegrid2::num_levels_1 = 3
+CarpetRegrid2::radius_1[1] = 10
+CarpetRegrid2::radius_1[2] = 5
+
+Carpet::poison_new_timelevels = "yes"
+Carpet::init_fill_timelevels = "yes"
+CarpetLib::poison_new_memory = "yes"
+
+ReflectionSymmetry::reflection_x = "no"
+ReflectionSymmetry::reflection_y = "yes"
+ReflectionSymmetry::reflection_z = "yes"
+ReflectionSymmetry::avoid_origin_x = "no"
+ReflectionSymmetry::avoid_origin_y = "no"
+ReflectionSymmetry::avoid_origin_z = "no"
+ReflectionSymmetry::verbose = "no"
+
+driver::ghost_size = 2
+
+cactus::cctk_itlast = 0
+
+methodoflines::ode_method = "rk2"
+methodoflines::mol_intermediate_steps = 2
+methodoflines::mol_num_scratch_levels = 0
+
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+
+IO::out_dir = $parfile
+IO::out_fileinfo = "none"
+
+ioascii::compact_format = no
+ioascii::output_ghost_points = yes
+ioascii::output_symmetry_points = yes
+
+IOBasic::outInfo_every = -1
+
+IOASCII::out1D_every = 1
+IOASCII::out1D_d = "no"
+IOASCII::out1D_vars = "carpetevolutionmask::buffer_mask"
diff --git a/Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.x.asc b/Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.x.asc
new file mode 100644
index 000000000..69e0498ed
--- /dev/null
+++ b/Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.x.asc
@@ -0,0 +1,132 @@
+# 1D ASCII output created by CarpetIOASCII
+#
+0 0 0 0 0 0 8 8 0 -16.25 0 0 0
+0 0 0 0 0 4 8 8 0 -15 0 0 0
+0 0 0 0 0 8 8 8 0 -13.75 0 0 0
+0 0 0 0 0 12 8 8 0 -12.5 0 0 0
+0 0 0 0 0 16 8 8 0 -11.25 0 0 0
+0 0 0 0 0 20 8 8 0 -10 0 0 0
+0 0 0 0 0 24 8 8 0 -8.75 0 0 0
+0 0 0 0 0 28 8 8 0 -7.5 0 0 0
+0 0 0 0 0 32 8 8 0 -6.25 0 0 0
+0 0 0 0 0 36 8 8 0 -5 0 0 0
+0 0 0 0 0 40 8 8 0 -3.75 0 0 0
+0 0 0 0 0 44 8 8 0 -2.5 0 0 0
+0 0 0 0 0 48 8 8 0 -1.25 0 0 0
+0 0 0 0 0 52 8 8 0 0 0 0 0
+0 0 0 0 0 56 8 8 0 1.25 0 0 0
+0 0 0 0 0 60 8 8 0 2.5 0 0 0
+
+0 0 0 1 0 48 8 8 0 -1.25 0 0 0
+0 0 0 1 0 52 8 8 0 0 0 0 0
+0 0 0 1 0 56 8 8 0 1.25 0 0 0
+0 0 0 1 0 60 8 8 0 2.5 0 0 0
+0 0 0 1 0 64 8 8 0 3.75 0 0 0
+0 0 0 1 0 68 8 8 0 5 0 0 0
+0 0 0 1 0 72 8 8 0 6.25 0 0 0
+0 0 0 1 0 76 8 8 0 7.5 0 0 0
+0 0 0 1 0 80 8 8 0 8.75 0 0 0
+0 0 0 1 0 84 8 8 0 10 0 0 0
+0 0 0 1 0 88 8 8 0 11.25 0 0 0
+0 0 0 1 0 92 8 8 0 12.5 0 0 0
+0 0 0 1 0 96 8 8 0 13.75 0 0 0
+0 0 0 1 0 100 8 8 0 15 0 0 0
+0 0 0 1 0 104 8 8 0 16.25 0 0 0
+
+
+0 0 1 0 0 12 8 8 0 -12.5 0 0 0
+0 0 1 0 0 14 8 8 0 -11.875 0 0 0
+0 0 1 0 0 16 8 8 0 -11.25 0 0 1
+0 0 1 0 0 18 8 8 0 -10.625 0 0 1
+0 0 1 0 0 20 8 8 0 -10 0 0 1
+0 0 1 0 0 22 8 8 0 -9.375 0 0 1
+0 0 1 0 0 24 8 8 0 -8.75 0 0 1
+0 0 1 0 0 26 8 8 0 -8.125 0 0 0
+0 0 1 0 0 28 8 8 0 -7.5 0 0 0
+0 0 1 0 0 30 8 8 0 -6.875 0 0 0
+0 0 1 0 0 32 8 8 0 -6.25 0 0 0
+0 0 1 0 0 34 8 8 0 -5.625 0 0 0
+0 0 1 0 0 36 8 8 0 -5 0 0 0
+0 0 1 0 0 38 8 8 0 -4.375 0 0 0
+0 0 1 0 0 40 8 8 0 -3.75 0 0 0
+0 0 1 0 0 42 8 8 0 -3.125 0 0 0
+0 0 1 0 0 44 8 8 0 -2.5 0 0 0
+0 0 1 0 0 46 8 8 0 -1.875 0 0 0
+0 0 1 0 0 48 8 8 0 -1.25 0 0 0
+0 0 1 0 0 50 8 8 0 -0.625 0 0 0
+0 0 1 0 0 52 8 8 0 0 0 0 0
+0 0 1 0 0 54 8 8 0 0.625 0 0 0
+0 0 1 0 0 56 8 8 0 1.25 0 0 0
+
+0 0 1 1 0 50 8 8 0 -0.625 0 0 0
+0 0 1 1 0 52 8 8 0 0 0 0 0
+0 0 1 1 0 54 8 8 0 0.625 0 0 0
+0 0 1 1 0 56 8 8 0 1.25 0 0 0
+0 0 1 1 0 58 8 8 0 1.875 0 0 0
+0 0 1 1 0 60 8 8 0 2.5 0 0 0
+0 0 1 1 0 62 8 8 0 3.125 0 0 0
+0 0 1 1 0 64 8 8 0 3.75 0 0 0
+0 0 1 1 0 66 8 8 0 4.375 0 0 0
+0 0 1 1 0 68 8 8 0 5 0 0 0
+0 0 1 1 0 70 8 8 0 5.625 0 0 0
+0 0 1 1 0 72 8 8 0 6.25 0 0 0
+0 0 1 1 0 74 8 8 0 6.875 0 0 0
+0 0 1 1 0 76 8 8 0 7.5 0 0 0
+0 0 1 1 0 78 8 8 0 8.125 0 0 0
+0 0 1 1 0 80 8 8 0 8.75 0 0 1
+0 0 1 1 0 82 8 8 0 9.375 0 0 1
+0 0 1 1 0 84 8 8 0 10 0 0 1
+0 0 1 1 0 86 8 8 0 10.625 0 0 1
+0 0 1 1 0 88 8 8 0 11.25 0 0 1
+0 0 1 1 0 90 8 8 0 11.875 0 0 0
+0 0 1 1 0 92 8 8 0 12.5 0 0 0
+
+
+0 0 2 0 0 32 8 8 0 -6.25 0 0 0
+0 0 2 0 0 33 8 8 0 -5.9375 0 0 0
+0 0 2 0 0 34 8 8 0 -5.625 0 0 1
+0 0 2 0 0 35 8 8 0 -5.3125 0 0 1
+0 0 2 0 0 36 8 8 0 -5 0 0 1
+0 0 2 0 0 37 8 8 0 -4.6875 0 0 1
+0 0 2 0 0 38 8 8 0 -4.375 0 0 1
+0 0 2 0 0 39 8 8 0 -4.0625 0 0 0
+0 0 2 0 0 40 8 8 0 -3.75 0 0 0
+0 0 2 0 0 41 8 8 0 -3.4375 0 0 0
+0 0 2 0 0 42 8 8 0 -3.125 0 0 0
+0 0 2 0 0 43 8 8 0 -2.8125 0 0 0
+0 0 2 0 0 44 8 8 0 -2.5 0 0 0
+0 0 2 0 0 45 8 8 0 -2.1875 0 0 0
+0 0 2 0 0 46 8 8 0 -1.875 0 0 0
+0 0 2 0 0 47 8 8 0 -1.5625 0 0 0
+0 0 2 0 0 48 8 8 0 -1.25 0 0 0
+0 0 2 0 0 49 8 8 0 -0.9375 0 0 0
+0 0 2 0 0 50 8 8 0 -0.625 0 0 0
+0 0 2 0 0 51 8 8 0 -0.3125 0 0 0
+0 0 2 0 0 52 8 8 0 0 0 0 0
+0 0 2 0 0 53 8 8 0 0.3125 0 0 0
+0 0 2 0 0 54 8 8 0 0.625 0 0 0
+
+0 0 2 1 0 51 8 8 0 -0.3125 0 0 0
+0 0 2 1 0 52 8 8 0 0 0 0 0
+0 0 2 1 0 53 8 8 0 0.3125 0 0 0
+0 0 2 1 0 54 8 8 0 0.625 0 0 0
+0 0 2 1 0 55 8 8 0 0.9375 0 0 0
+0 0 2 1 0 56 8 8 0 1.25 0 0 0
+0 0 2 1 0 57 8 8 0 1.5625 0 0 0
+0 0 2 1 0 58 8 8 0 1.875 0 0 0
+0 0 2 1 0 59 8 8 0 2.1875 0 0 0
+0 0 2 1 0 60 8 8 0 2.5 0 0 0
+0 0 2 1 0 61 8 8 0 2.8125 0 0 0
+0 0 2 1 0 62 8 8 0 3.125 0 0 0
+0 0 2 1 0 63 8 8 0 3.4375 0 0 0
+0 0 2 1 0 64 8 8 0 3.75 0 0 0
+0 0 2 1 0 65 8 8 0 4.0625 0 0 0
+0 0 2 1 0 66 8 8 0 4.375 0 0 1
+0 0 2 1 0 67 8 8 0 4.6875 0 0 1
+0 0 2 1 0 68 8 8 0 5 0 0 1
+0 0 2 1 0 69 8 8 0 5.3125 0 0 1
+0 0 2 1 0 70 8 8 0 5.625 0 0 1
+0 0 2 1 0 71 8 8 0 5.9375 0 0 0
+0 0 2 1 0 72 8 8 0 6.25 0 0 0
+
+
diff --git a/Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.y.asc b/Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.y.asc
new file mode 100644
index 000000000..1af8eaab8
--- /dev/null
+++ b/Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.y.asc
@@ -0,0 +1,135 @@
+# 1D ASCII output created by CarpetIOASCII
+#
+0 0 0 0 0 52 0 8 0 0 -2.5 0 0
+0 0 0 0 0 52 4 8 0 0 -1.25 0 0
+0 0 0 0 0 52 8 8 0 0 0 0 0
+0 0 0 0 0 52 12 8 0 0 1.25 0 0
+0 0 0 0 0 52 16 8 0 0 2.5 0 0
+0 0 0 0 0 52 20 8 0 0 3.75 0 0
+0 0 0 0 0 52 24 8 0 0 5 0 0
+0 0 0 0 0 52 28 8 0 0 6.25 0 0
+0 0 0 0 0 52 32 8 0 0 7.5 0 0
+0 0 0 0 0 52 36 8 0 0 8.75 0 0
+0 0 0 0 0 52 40 8 0 0 10 0 0
+0 0 0 0 0 52 44 8 0 0 11.25 0 0
+0 0 0 0 0 52 48 8 0 0 12.5 0 0
+0 0 0 0 0 52 52 8 0 0 13.75 0 0
+0 0 0 0 0 52 56 8 0 0 15 0 0
+0 0 0 0 0 52 60 8 0 0 16.25 0 0
+
+0 0 0 1 0 52 0 8 0 0 -2.5 0 0
+0 0 0 1 0 52 4 8 0 0 -1.25 0 0
+0 0 0 1 0 52 8 8 0 0 0 0 0
+0 0 0 1 0 52 12 8 0 0 1.25 0 0
+0 0 0 1 0 52 16 8 0 0 2.5 0 0
+0 0 0 1 0 52 20 8 0 0 3.75 0 0
+0 0 0 1 0 52 24 8 0 0 5 0 0
+0 0 0 1 0 52 28 8 0 0 6.25 0 0
+0 0 0 1 0 52 32 8 0 0 7.5 0 0
+0 0 0 1 0 52 36 8 0 0 8.75 0 0
+0 0 0 1 0 52 40 8 0 0 10 0 0
+0 0 0 1 0 52 44 8 0 0 11.25 0 0
+0 0 0 1 0 52 48 8 0 0 12.5 0 0
+0 0 0 1 0 52 52 8 0 0 13.75 0 0
+0 0 0 1 0 52 56 8 0 0 15 0 0
+0 0 0 1 0 52 60 8 0 0 16.25 0 0
+
+
+0 0 1 0 0 52 4 8 0 0 -1.25 0 0
+0 0 1 0 0 52 6 8 0 0 -0.625 0 0
+0 0 1 0 0 52 8 8 0 0 0 0 0
+0 0 1 0 0 52 10 8 0 0 0.625 0 0
+0 0 1 0 0 52 12 8 0 0 1.25 0 0
+0 0 1 0 0 52 14 8 0 0 1.875 0 0
+0 0 1 0 0 52 16 8 0 0 2.5 0 0
+0 0 1 0 0 52 18 8 0 0 3.125 0 0
+0 0 1 0 0 52 20 8 0 0 3.75 0 0
+0 0 1 0 0 52 22 8 0 0 4.375 0 0
+0 0 1 0 0 52 24 8 0 0 5 0 0
+0 0 1 0 0 52 26 8 0 0 5.625 0 0
+0 0 1 0 0 52 28 8 0 0 6.25 0 0
+0 0 1 0 0 52 30 8 0 0 6.875 0 0
+0 0 1 0 0 52 32 8 0 0 7.5 0 0
+0 0 1 0 0 52 34 8 0 0 8.125 0 0
+0 0 1 0 0 52 36 8 0 0 8.75 0 1
+0 0 1 0 0 52 38 8 0 0 9.375 0 1
+0 0 1 0 0 52 40 8 0 0 10 0 1
+0 0 1 0 0 52 42 8 0 0 10.625 0 1
+0 0 1 0 0 52 44 8 0 0 11.25 0 1
+0 0 1 0 0 52 46 8 0 0 11.875 0 0
+0 0 1 0 0 52 48 8 0 0 12.5 0 0
+
+0 0 1 1 0 52 4 8 0 0 -1.25 0 0
+0 0 1 1 0 52 6 8 0 0 -0.625 0 0
+0 0 1 1 0 52 8 8 0 0 0 0 0
+0 0 1 1 0 52 10 8 0 0 0.625 0 0
+0 0 1 1 0 52 12 8 0 0 1.25 0 0
+0 0 1 1 0 52 14 8 0 0 1.875 0 0
+0 0 1 1 0 52 16 8 0 0 2.5 0 0
+0 0 1 1 0 52 18 8 0 0 3.125 0 0
+0 0 1 1 0 52 20 8 0 0 3.75 0 0
+0 0 1 1 0 52 22 8 0 0 4.375 0 0
+0 0 1 1 0 52 24 8 0 0 5 0 0
+0 0 1 1 0 52 26 8 0 0 5.625 0 0
+0 0 1 1 0 52 28 8 0 0 6.25 0 0
+0 0 1 1 0 52 30 8 0 0 6.875 0 0
+0 0 1 1 0 52 32 8 0 0 7.5 0 0
+0 0 1 1 0 52 34 8 0 0 8.125 0 0
+0 0 1 1 0 52 36 8 0 0 8.75 0 1
+0 0 1 1 0 52 38 8 0 0 9.375 0 1
+0 0 1 1 0 52 40 8 0 0 10 0 1
+0 0 1 1 0 52 42 8 0 0 10.625 0 1
+0 0 1 1 0 52 44 8 0 0 11.25 0 1
+0 0 1 1 0 52 46 8 0 0 11.875 0 0
+0 0 1 1 0 52 48 8 0 0 12.5 0 0
+
+
+0 0 2 0 0 52 6 8 0 0 -0.625 0 0
+0 0 2 0 0 52 7 8 0 0 -0.3125 0 0
+0 0 2 0 0 52 8 8 0 0 0 0 0
+0 0 2 0 0 52 9 8 0 0 0.3125 0 0
+0 0 2 0 0 52 10 8 0 0 0.625 0 0
+0 0 2 0 0 52 11 8 0 0 0.9375 0 0
+0 0 2 0 0 52 12 8 0 0 1.25 0 0
+0 0 2 0 0 52 13 8 0 0 1.5625 0 0
+0 0 2 0 0 52 14 8 0 0 1.875 0 0
+0 0 2 0 0 52 15 8 0 0 2.1875 0 0
+0 0 2 0 0 52 16 8 0 0 2.5 0 0
+0 0 2 0 0 52 17 8 0 0 2.8125 0 0
+0 0 2 0 0 52 18 8 0 0 3.125 0 0
+0 0 2 0 0 52 19 8 0 0 3.4375 0 0
+0 0 2 0 0 52 20 8 0 0 3.75 0 0
+0 0 2 0 0 52 21 8 0 0 4.0625 0 0
+0 0 2 0 0 52 22 8 0 0 4.375 0 1
+0 0 2 0 0 52 23 8 0 0 4.6875 0 1
+0 0 2 0 0 52 24 8 0 0 5 0 1
+0 0 2 0 0 52 25 8 0 0 5.3125 0 1
+0 0 2 0 0 52 26 8 0 0 5.625 0 1
+0 0 2 0 0 52 27 8 0 0 5.9375 0 0
+0 0 2 0 0 52 28 8 0 0 6.25 0 0
+
+0 0 2 1 0 52 6 8 0 0 -0.625 0 0
+0 0 2 1 0 52 7 8 0 0 -0.3125 0 0
+0 0 2 1 0 52 8 8 0 0 0 0 0
+0 0 2 1 0 52 9 8 0 0 0.3125 0 0
+0 0 2 1 0 52 10 8 0 0 0.625 0 0
+0 0 2 1 0 52 11 8 0 0 0.9375 0 0
+0 0 2 1 0 52 12 8 0 0 1.25 0 0
+0 0 2 1 0 52 13 8 0 0 1.5625 0 0
+0 0 2 1 0 52 14 8 0 0 1.875 0 0
+0 0 2 1 0 52 15 8 0 0 2.1875 0 0
+0 0 2 1 0 52 16 8 0 0 2.5 0 0
+0 0 2 1 0 52 17 8 0 0 2.8125 0 0
+0 0 2 1 0 52 18 8 0 0 3.125 0 0
+0 0 2 1 0 52 19 8 0 0 3.4375 0 0
+0 0 2 1 0 52 20 8 0 0 3.75 0 0
+0 0 2 1 0 52 21 8 0 0 4.0625 0 0
+0 0 2 1 0 52 22 8 0 0 4.375 0 1
+0 0 2 1 0 52 23 8 0 0 4.6875 0 1
+0 0 2 1 0 52 24 8 0 0 5 0 1
+0 0 2 1 0 52 25 8 0 0 5.3125 0 1
+0 0 2 1 0 52 26 8 0 0 5.625 0 1
+0 0 2 1 0 52 27 8 0 0 5.9375 0 0
+0 0 2 1 0 52 28 8 0 0 6.25 0 0
+
+
diff --git a/Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.z.asc b/Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.z.asc
new file mode 100644
index 000000000..e8f354236
--- /dev/null
+++ b/Carpet/CarpetEvolutionMask/test/buffer_mask/buffer_mask.z.asc
@@ -0,0 +1,135 @@
+# 1D ASCII output created by CarpetIOASCII
+#
+0 0 0 0 0 52 8 0 0 0 0 -2.5 0
+0 0 0 0 0 52 8 4 0 0 0 -1.25 0
+0 0 0 0 0 52 8 8 0 0 0 0 0
+0 0 0 0 0 52 8 12 0 0 0 1.25 0
+0 0 0 0 0 52 8 16 0 0 0 2.5 0
+0 0 0 0 0 52 8 20 0 0 0 3.75 0
+0 0 0 0 0 52 8 24 0 0 0 5 0
+0 0 0 0 0 52 8 28 0 0 0 6.25 0
+0 0 0 0 0 52 8 32 0 0 0 7.5 0
+0 0 0 0 0 52 8 36 0 0 0 8.75 0
+0 0 0 0 0 52 8 40 0 0 0 10 0
+0 0 0 0 0 52 8 44 0 0 0 11.25 0
+0 0 0 0 0 52 8 48 0 0 0 12.5 0
+0 0 0 0 0 52 8 52 0 0 0 13.75 0
+0 0 0 0 0 52 8 56 0 0 0 15 0
+0 0 0 0 0 52 8 60 0 0 0 16.25 0
+
+0 0 0 1 0 52 8 0 0 0 0 -2.5 0
+0 0 0 1 0 52 8 4 0 0 0 -1.25 0
+0 0 0 1 0 52 8 8 0 0 0 0 0
+0 0 0 1 0 52 8 12 0 0 0 1.25 0
+0 0 0 1 0 52 8 16 0 0 0 2.5 0
+0 0 0 1 0 52 8 20 0 0 0 3.75 0
+0 0 0 1 0 52 8 24 0 0 0 5 0
+0 0 0 1 0 52 8 28 0 0 0 6.25 0
+0 0 0 1 0 52 8 32 0 0 0 7.5 0
+0 0 0 1 0 52 8 36 0 0 0 8.75 0
+0 0 0 1 0 52 8 40 0 0 0 10 0
+0 0 0 1 0 52 8 44 0 0 0 11.25 0
+0 0 0 1 0 52 8 48 0 0 0 12.5 0
+0 0 0 1 0 52 8 52 0 0 0 13.75 0
+0 0 0 1 0 52 8 56 0 0 0 15 0
+0 0 0 1 0 52 8 60 0 0 0 16.25 0
+
+
+0 0 1 0 0 52 8 4 0 0 0 -1.25 0
+0 0 1 0 0 52 8 6 0 0 0 -0.625 0
+0 0 1 0 0 52 8 8 0 0 0 0 0
+0 0 1 0 0 52 8 10 0 0 0 0.625 0
+0 0 1 0 0 52 8 12 0 0 0 1.25 0
+0 0 1 0 0 52 8 14 0 0 0 1.875 0
+0 0 1 0 0 52 8 16 0 0 0 2.5 0
+0 0 1 0 0 52 8 18 0 0 0 3.125 0
+0 0 1 0 0 52 8 20 0 0 0 3.75 0
+0 0 1 0 0 52 8 22 0 0 0 4.375 0
+0 0 1 0 0 52 8 24 0 0 0 5 0
+0 0 1 0 0 52 8 26 0 0 0 5.625 0
+0 0 1 0 0 52 8 28 0 0 0 6.25 0
+0 0 1 0 0 52 8 30 0 0 0 6.875 0
+0 0 1 0 0 52 8 32 0 0 0 7.5 0
+0 0 1 0 0 52 8 34 0 0 0 8.125 0
+0 0 1 0 0 52 8 36 0 0 0 8.75 1
+0 0 1 0 0 52 8 38 0 0 0 9.375 1
+0 0 1 0 0 52 8 40 0 0 0 10 1
+0 0 1 0 0 52 8 42 0 0 0 10.625 1
+0 0 1 0 0 52 8 44 0 0 0 11.25 1
+0 0 1 0 0 52 8 46 0 0 0 11.875 0
+0 0 1 0 0 52 8 48 0 0 0 12.5 0
+
+0 0 1 1 0 52 8 4 0 0 0 -1.25 0
+0 0 1 1 0 52 8 6 0 0 0 -0.625 0
+0 0 1 1 0 52 8 8 0 0 0 0 0
+0 0 1 1 0 52 8 10 0 0 0 0.625 0
+0 0 1 1 0 52 8 12 0 0 0 1.25 0
+0 0 1 1 0 52 8 14 0 0 0 1.875 0
+0 0 1 1 0 52 8 16 0 0 0 2.5 0
+0 0 1 1 0 52 8 18 0 0 0 3.125 0
+0 0 1 1 0 52 8 20 0 0 0 3.75 0
+0 0 1 1 0 52 8 22 0 0 0 4.375 0
+0 0 1 1 0 52 8 24 0 0 0 5 0
+0 0 1 1 0 52 8 26 0 0 0 5.625 0
+0 0 1 1 0 52 8 28 0 0 0 6.25 0
+0 0 1 1 0 52 8 30 0 0 0 6.875 0
+0 0 1 1 0 52 8 32 0 0 0 7.5 0
+0 0 1 1 0 52 8 34 0 0 0 8.125 0
+0 0 1 1 0 52 8 36 0 0 0 8.75 1
+0 0 1 1 0 52 8 38 0 0 0 9.375 1
+0 0 1 1 0 52 8 40 0 0 0 10 1
+0 0 1 1 0 52 8 42 0 0 0 10.625 1
+0 0 1 1 0 52 8 44 0 0 0 11.25 1
+0 0 1 1 0 52 8 46 0 0 0 11.875 0
+0 0 1 1 0 52 8 48 0 0 0 12.5 0
+
+
+0 0 2 0 0 52 8 6 0 0 0 -0.625 0
+0 0 2 0 0 52 8 7 0 0 0 -0.3125 0
+0 0 2 0 0 52 8 8 0 0 0 0 0
+0 0 2 0 0 52 8 9 0 0 0 0.3125 0
+0 0 2 0 0 52 8 10 0 0 0 0.625 0
+0 0 2 0 0 52 8 11 0 0 0 0.9375 0
+0 0 2 0 0 52 8 12 0 0 0 1.25 0
+0 0 2 0 0 52 8 13 0 0 0 1.5625 0
+0 0 2 0 0 52 8 14 0 0 0 1.875 0
+0 0 2 0 0 52 8 15 0 0 0 2.1875 0
+0 0 2 0 0 52 8 16 0 0 0 2.5 0
+0 0 2 0 0 52 8 17 0 0 0 2.8125 0
+0 0 2 0 0 52 8 18 0 0 0 3.125 0
+0 0 2 0 0 52 8 19 0 0 0 3.4375 0
+0 0 2 0 0 52 8 20 0 0 0 3.75 0
+0 0 2 0 0 52 8 21 0 0 0 4.0625 0
+0 0 2 0 0 52 8 22 0 0 0 4.375 1
+0 0 2 0 0 52 8 23 0 0 0 4.6875 1
+0 0 2 0 0 52 8 24 0 0 0 5 1
+0 0 2 0 0 52 8 25 0 0 0 5.3125 1
+0 0 2 0 0 52 8 26 0 0 0 5.625 1
+0 0 2 0 0 52 8 27 0 0 0 5.9375 0
+0 0 2 0 0 52 8 28 0 0 0 6.25 0
+
+0 0 2 1 0 52 8 6 0 0 0 -0.625 0
+0 0 2 1 0 52 8 7 0 0 0 -0.3125 0
+0 0 2 1 0 52 8 8 0 0 0 0 0
+0 0 2 1 0 52 8 9 0 0 0 0.3125 0
+0 0 2 1 0 52 8 10 0 0 0 0.625 0
+0 0 2 1 0 52 8 11 0 0 0 0.9375 0
+0 0 2 1 0 52 8 12 0 0 0 1.25 0
+0 0 2 1 0 52 8 13 0 0 0 1.5625 0
+0 0 2 1 0 52 8 14 0 0 0 1.875 0
+0 0 2 1 0 52 8 15 0 0 0 2.1875 0
+0 0 2 1 0 52 8 16 0 0 0 2.5 0
+0 0 2 1 0 52 8 17 0 0 0 2.8125 0
+0 0 2 1 0 52 8 18 0 0 0 3.125 0
+0 0 2 1 0 52 8 19 0 0 0 3.4375 0
+0 0 2 1 0 52 8 20 0 0 0 3.75 0
+0 0 2 1 0 52 8 21 0 0 0 4.0625 0
+0 0 2 1 0 52 8 22 0 0 0 4.375 1
+0 0 2 1 0 52 8 23 0 0 0 4.6875 1
+0 0 2 1 0 52 8 24 0 0 0 5 1
+0 0 2 1 0 52 8 25 0 0 0 5.3125 1
+0 0 2 1 0 52 8 26 0 0 0 5.625 1
+0 0 2 1 0 52 8 27 0 0 0 5.9375 0
+0 0 2 1 0 52 8 28 0 0 0 6.25 0
+
+