diff options
Diffstat (limited to 'Carpet/CarpetLib/src/dh.cc')
-rw-r--r-- | Carpet/CarpetLib/src/dh.cc | 62 |
1 files changed, 56 insertions, 6 deletions
diff --git a/Carpet/CarpetLib/src/dh.cc b/Carpet/CarpetLib/src/dh.cc index b82337685..7f914e1f6 100644 --- a/Carpet/CarpetLib/src/dh.cc +++ b/Carpet/CarpetLib/src/dh.cc @@ -1,5 +1,6 @@ #include <cctk.h> #include <cctk_Parameters.h> +#include <unistd.h> #include <cassert> #include <cstddef> @@ -772,7 +773,10 @@ regrid (bool const do_init) ibset oneedrecv = obox.active; - i2vect const stencil_size = i2vect (prolongation_stencil_size(rl)); + int ssize = prolongation_stencil_size(rl); + ivect ss = ivect(ssize, 0, ssize); + i2vect const stencil_size = i2vect (ss, ss); + //i2vect const stencil_size = i2vect (prolongation_stencil_size(rl)); ibset const expanded_active (box.active.expanded_for (obox.interior)); ibset const ovlp = oneedrecv & expanded_active; @@ -811,8 +815,20 @@ regrid (bool const do_init) // Refinement prolongation must fill all active points ibset needrecv = box.active + box.overlaps; + + //for (ibset::iterator ri = needrecv.bs.begin(); ri != needrecv.bs.end(); ++ ri) { + // static int center; + // if (!center) + // center = (ri->_lower.elt[1] + ri->_upper.elt[1]) / 2; + + // ri->_lower.elt[1] = center; + // ri->_upper.elt[1] = center; + //} - i2vect const stencil_size = i2vect (prolongation_stencil_size(rl)); + int ssize = prolongation_stencil_size(rl); + ivect ss = ivect(ssize, 0, ssize); + i2vect const stencil_size = i2vect (ss, ss); + //i2vect const stencil_size = i2vect (prolongation_stencil_size(rl)); ASSERT_c (all (h.reffacts.at(rl) % h.reffacts.at(orl) == 0), "Refinement factors must be integer multiples of each other"); @@ -888,6 +904,15 @@ regrid (bool const do_init) // Outer boundaries are synchronised for backward // compatibility. ibset needrecv = box.ghosts; + + //for (ibset::iterator ri = needrecv.bs.begin(); ri != needrecv.bs.end(); ++ ri) { + // static int center; + // if (!center) + // center = (ri->_lower.elt[1] + ri->_upper.elt[1]) / 2; + + // ri->_lower.elt[1] = center; + // ri->_upper.elt[1] = center; + //} #endif ibset & sync = box.sync; @@ -898,14 +923,14 @@ regrid (bool const do_init) #if 0 ibset const ovlp = needrecv & obox.owned; #else - ibset const ovlp = needrecv & obox.interior; + ibset ovlp = needrecv & obox.interior; #endif if (cc == c) { ASSERT_cc (ovlp.empty(), "A region may not synchronise from itself"); } - + for (ibset::const_iterator ri = ovlp.begin(); ri != ovlp.end(); ++ ri) { @@ -948,6 +973,7 @@ regrid (bool const do_init) // Outer boundaries are synchronised for backward // compatibility. ibset needrecv = box.ghosts; + #endif // Points which are synchronised need not be boundary @@ -960,10 +986,23 @@ regrid (bool const do_init) // Prolongation must fill what cannot be synchronised, and // also all buffer zones needrecv += box.buffers; + + //for (ibset::iterator ri = needrecv.bs.begin(); ri != needrecv.bs.end(); ++ ri) + //{ + // static int center; + // if (!center) + // center = (ri->_lower.elt[1] + ri->_upper.elt[1]) / 2; + + // ri->_lower.elt[1] = center; + // ri->_upper.elt[1] = center; + //} ibset & bndref = box.bndref; - i2vect const stencil_size = i2vect (prolongation_stencil_size(rl)); + int ssize = prolongation_stencil_size(rl); + ivect ss = ivect(ssize, 0, ssize); + i2vect const stencil_size = i2vect (ss, ss); + //i2vect const stencil_size = i2vect (prolongation_stencil_size(rl)); ASSERT_c (all (h.reffacts.at(rl) % h.reffacts.at(orl) == 0), "Refinement factors must be integer multiples of each other"); @@ -1061,6 +1100,14 @@ regrid (bool const do_init) // NOTE: b/c of this we need a low-level sync after the restrict needrecv = allrestricted & obox.interior; } + //for (ibset::iterator ri = needrecv.bs.begin(); ri != needrecv.bs.end(); ++ ri) { + // static int center; + // if (!center) + // center = (ri->_lower.elt[1] + ri->_upper.elt[1]) / 2; + + // ri->_lower.elt[1] = center; + // ri->_upper.elt[1] = center; + //} // Cannot restrict into buffer zones assert ((allrestricted & obox.buffers).empty()); @@ -1787,7 +1834,10 @@ regrid (bool const do_init) // of the new grid structure. It must fill what cannot be // synchronised. - i2vect const stencil_size = i2vect (prolongation_stencil_size(rl)); + int ssize = prolongation_stencil_size(rl); + ivect ss = ivect(ssize, 0, ssize); + i2vect const stencil_size = i2vect (ss, ss); + //i2vect const stencil_size = i2vect (prolongation_stencil_size(rl)); ASSERT_c (all (h.reffacts.at(rl) % h.reffacts.at(orl) == 0), "Refinement factors must be integer multiples of each other"); |