diff options
28 files changed, 368 insertions, 481 deletions
diff --git a/Carpet/Carpet/interface.ccl b/Carpet/Carpet/interface.ccl index 9ed5c4cc3..79bf01f29 100644 --- a/Carpet/Carpet/interface.ccl +++ b/Carpet/Carpet/interface.ccl @@ -1,5 +1,5 @@ # Interface definition for thorn Carpet -# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/interface.ccl,v 1.10 2004/03/29 16:14:14 hawke Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/interface.ccl,v 1.11 2004/04/18 13:29:43 schnetter Exp $ implements: Driver @@ -79,13 +79,6 @@ USES FUNCTION ConvertFromExteriorBoundary # gh<dim>::rbnds * obss, # gh<dim>::rprocs * pss); CCTK_INT FUNCTION Carpet_Regrid (CCTK_POINTER_TO_CONST IN cctkGH, \ - CCTK_INT IN reflevel, \ - CCTK_INT IN map, \ - CCTK_INT IN size, \ - CCTK_INT IN ARRAY nboundaryzones, \ - CCTK_INT IN ARRAY is_internal, \ - CCTK_INT IN ARRAY is_staggered, \ - CCTK_INT IN ARRAY shiftout, \ CCTK_POINTER IN bsss, \ CCTK_POINTER IN obss, \ CCTK_POINTER IN pss) diff --git a/Carpet/Carpet/param.ccl b/Carpet/Carpet/param.ccl index 5b8d32043..500137b7b 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.37 2004/03/24 08:38:07 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/param.ccl,v 1.38 2004/04/18 13:29:43 schnetter Exp $ shares: Cactus @@ -283,7 +283,10 @@ BOOLEAN init_each_timelevel "Call initial data routines once for each timelevel" { } "no" -BOOLEAN prolongate_initial_data "Prolongate the refined regions during initial data generation" STEERABLE=always +#BOOLEAN prolongate_initial_data "Prolongate the refined regions during initial data generation" STEERABLE=always +#{ +#} "no" +BOOLEAN prolongate_initial_data "unused" STEERABLE=always { } "no" diff --git a/Carpet/Carpet/src/Evolve.cc b/Carpet/Carpet/src/Evolve.cc index 24cf051a7..de7e35cbe 100644 --- a/Carpet/Carpet/src/Evolve.cc +++ b/Carpet/Carpet/src/Evolve.cc @@ -31,7 +31,7 @@ #include "carpet.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Evolve.cc,v 1.42 2004/03/23 19:41:11 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Evolve.cc,v 1.44 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_Carpet_Evolve_cc); } @@ -134,11 +134,18 @@ namespace Carpet { for (int rl=0; rl<reflevels; ++rl) { const int do_every = maxreflevelfact / ipow(reffact, rl); if (cgh->cctk_iteration % do_every == 0) { - - Checkpoint ("Regrid"); - Regrid (cgh, rl, rl+1, true); - - } + { + const int ml=0; + enter_global_mode (cgh, ml); + enter_level_mode (cgh, rl); + + Checkpoint ("Regrid"); + Regrid (cgh); + + leave_level_mode (cgh); + leave_global_mode (cgh); + } // ml + } // if do_every } // for rl @@ -286,11 +293,11 @@ namespace Carpet { // Analysis Checkpoint ("Scheduling ANALYSIS"); CCTK_ScheduleTraverse ("CCTK_ANALYSIS", cgh, CallFunction); - + // Output Checkpoint ("OutputGH"); CCTK_OutputGH (cgh); - + // Checking CheckChecksums (cgh, alltimes); diff --git a/Carpet/Carpet/src/Initialise.cc b/Carpet/Carpet/src/Initialise.cc index afeefa764..bf4a8c06b 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.43 2004/03/23 19:43:59 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Initialise.cc,v 1.44 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_Carpet_Initialise_cc); } @@ -98,10 +98,19 @@ namespace Carpet { leave_level_mode (cgh); } END_MGLEVEL_LOOP; - - // Regrid - Checkpoint ("Regrid"); - Regrid (cgh, rl, rl+1, false); + + { + const int ml=0; + enter_global_mode (cgh, ml); + enter_level_mode (cgh, rl); + + // Regrid + Checkpoint ("Regrid"); + Regrid (cgh); + + leave_level_mode (cgh); + leave_global_mode (cgh); + } // ml } // for rl @@ -200,8 +209,18 @@ namespace Carpet { } END_MGLEVEL_LOOP; // Regrid - Checkpoint ("Regrid"); - Regrid (cgh, rl, rl+1, prolongate_initial_data); + { + const int ml=0; + enter_global_mode (cgh, ml); + enter_level_mode (cgh, rl); + + // Regrid + Checkpoint ("Regrid"); + Regrid (cgh); + + leave_level_mode (cgh); + leave_global_mode (cgh); + } // ml } // for rl diff --git a/Carpet/Carpet/src/Recompose.cc b/Carpet/Carpet/src/Recompose.cc index 50d0eb3cf..402857f03 100644 --- a/Carpet/Carpet/src/Recompose.cc +++ b/Carpet/Carpet/src/Recompose.cc @@ -27,7 +27,7 @@ #include "modes.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Recompose.cc,v 1.63 2004/03/23 19:50:26 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Recompose.cc,v 1.64 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_Carpet_Recompose_cc); } @@ -119,10 +119,9 @@ namespace Carpet { - void Regrid (const cGH* cgh, const int rl, - const int initialise_from, const bool do_prolongate) + void Regrid (const cGH* cgh) { - assert (is_meta_mode()); + assert (is_level_mode()); if (! CCTK_IsFunctionAliased ("Carpet_Regrid")) { static bool didtell = false; @@ -133,45 +132,36 @@ namespace Carpet { return; } - for (int m=0; m<maps; ++m) { - - jjvect nboundaryzones, is_internal, is_staggered, shiftout; - CCTK_INT const ierr = GetBoundarySpecification - (2*dim, &nboundaryzones[0][0], &is_internal[0][0], - &is_staggered[0][0], &shiftout[0][0]); - assert (!ierr); + BEGIN_MAP_LOOP(cgh, CCTK_GF) { - gh<dim>::rexts bbsss = vhh.at(m)->extents; - gh<dim>::rbnds obss = vhh.at(m)->outer_boundaries; - gh<dim>::rprocs pss = vhh.at(m)->processors; + gh<dim>::rexts bbsss = vhh.at(map)->extents; + gh<dim>::rbnds obss = vhh.at(map)->outer_boundaries; + gh<dim>::rprocs pss = vhh.at(map)->processors; // Check whether to recompose - CCTK_INT const do_recompose = Carpet_Regrid - (cgh, rl, m, - 2*dim, &nboundaryzones[0][0], &is_internal[0][0], - &is_staggered[0][0], &shiftout[0][0], - &bbsss, &obss, &pss); + CCTK_INT const do_recompose = Carpet_Regrid (cgh, &bbsss, &obss, &pss); assert (do_recompose >= 0); if (do_recompose) { + CCTK_INFO ("Recomposing the grid hierarchy"); + // Check the regions CheckRegions (bbsss, obss, pss); // TODO: check also that the current and all coarser levels // did not change // Write grid structure to file - OutputGridStructure (cgh, m, bbsss, obss, pss); + OutputGridStructure (cgh, map, bbsss, obss, pss); // Recompose - vhh.at(m)->recompose (bbsss, obss, pss, - initialise_from, do_prolongate); + vhh.at(map)->recompose (bbsss, obss, pss); - OutputGrids (cgh, m, *vhh.at(m)); + OutputGrids (cgh, map, *vhh.at(map)); } - - } // for m + + } END_MAP_LOOP; // Calculate new number of levels reflevels = vhh.at(0)->reflevels(); @@ -180,37 +170,13 @@ namespace Carpet { } // One cannot switch off the current level - assert (reflevels>rl); + assert (reflevels > reflevel); } void OutputGrids (const cGH* cgh, const int m, const gh<dim>& hh) { - DECLARE_CCTK_PARAMETERS; - - if (verbose) { - CCTK_INFO ("New bounding boxes:"); - for (int rl=0; rl<hh.reflevels(); ++rl) { - for (int c=0; c<hh.components(rl); ++c) { - for (int ml=0; ml<hh.mglevels(rl,c); ++ml) { - cout << " m " << m << " rl " << rl << " c " << c - << " ml " << ml - << " bbox " << hh.extents.at(rl).at(c).at(ml) - << endl; - } - } - } - CCTK_INFO ("New processor distribution:"); - for (int rl=0; rl<hh.reflevels(); ++rl) { - for (int c=0; c<hh.components(rl); ++c) { - cout << " m " << m << " rl " << rl << " c " << c - << " processor " << hh.processors.at(rl).at(c) << endl; - } - } - cout << endl; - } - CCTK_INFO ("New grid structure (grid points):"); for (int rl=0; rl<hh.reflevels(); ++rl) { for (int c=0; c<hh.components(rl); ++c) { @@ -224,13 +190,17 @@ namespace Carpet { assert (all(((upper - lower) * levfact / maxreflevelfact) % convfact == 0)); cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" - << " exterior extent: " + << " exterior: " + << "proc " + << hh.processors.at(rl).at(c) + << " " << lower * levfact / maxreflevelfact << " : " << upper * levfact / maxreflevelfact << " (" << (upper - lower) * levfact / maxreflevelfact / convfact + 1 - << ")" << endl; + << ")" + << endl; } } } @@ -246,7 +216,7 @@ namespace Carpet { const int convfact = ipow(mgfact, ml); const int levfact = ipow(reffact, rl); cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" - << " exterior extent: " + << " exterior: " << origin + delta * lower / maxreflevelfact << " : " << origin + delta * upper / maxreflevelfact @@ -816,11 +786,6 @@ namespace Carpet { static void MakeMultigridBoxes (const cGH* cgh, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, ibbox const & base, ibbox const & bb, bbvect const & ob, @@ -829,7 +794,11 @@ namespace Carpet { bbs.resize (mglevels); bbs.at(0) = bb; // boundary offsets - assert (size==2*dim); + jjvect nboundaryzones, is_internal, is_staggered, shiftout; + const int ierr = GetBoundarySpecification + (2*dim, &nboundaryzones[0][0], &is_internal[0][0], + &is_staggered[0][0], &shiftout[0][0]); + assert (!ierr); // (distance in grid points between the exterior and the physical boundary) iivect offset; for (int d=0; d<dim; ++d) { @@ -868,11 +837,6 @@ namespace Carpet { } void MakeMultigridBoxes (const cGH* cgh, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, vector<ibbox> const & bbs, vector<bbvect> const & obs, vector<vector<ibbox> >& bbss) @@ -884,10 +848,7 @@ namespace Carpet { } bbss.resize(bbs.size()); for (size_t c=0; c<bbs.size(); ++c) { - MakeMultigridBoxes - (cgh, - size, nboundaryzones, is_internal, is_staggered, shiftout, - base, bbs.at(c), obs.at(c), bbss.at(c)); + MakeMultigridBoxes (cgh, base, bbs.at(c), obs.at(c), bbss.at(c)); } } diff --git a/Carpet/Carpet/src/SetupGH.cc b/Carpet/Carpet/src/SetupGH.cc index d9916492d..e82d305b2 100644 --- a/Carpet/Carpet/src/SetupGH.cc +++ b/Carpet/Carpet/src/SetupGH.cc @@ -24,7 +24,7 @@ #include "carpet.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.75 2004/04/07 16:53:39 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.76 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_Carpet_SetupGH_cc); } @@ -467,10 +467,7 @@ namespace Carpet { // Create all multigrid levels vector<vector<ibbox> > bbss; - MakeMultigridBoxes - (cgh, - 2*dim, nboundaryzones, is_internal, is_staggered, shiftout, - bbs, obs, bbss); + MakeMultigridBoxes (cgh, bbs, obs, bbss); // Only one refinement level vector<vector<vector<ibbox> > > bbsss(1); diff --git a/Carpet/Carpet/src/carpet.hh b/Carpet/Carpet/src/carpet.hh index 034d02616..02924095c 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.27 2004/01/25 14:57:27 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet.hh,v 1.28 2004/04/18 13:29:43 schnetter Exp $ #ifndef CARPET_HH #define CARPET_HH @@ -34,8 +34,7 @@ namespace Carpet { int CallFunction (void* function, cFunctionData* attribute, void* data); // Other functions - void Regrid (const cGH* cgh, const int rl, - const int initialise_from, const bool do_prolongate); + void Regrid (const cGH* cgh); void CycleTimeLevels (const cGH* cgh); void FlipTimeLevels (const cGH* cgh); void Restrict (const cGH* cgh); diff --git a/Carpet/Carpet/src/functions.hh b/Carpet/Carpet/src/functions.hh index 99a201ff1..56170dbed 100644 --- a/Carpet/Carpet/src/functions.hh +++ b/Carpet/Carpet/src/functions.hh @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/functions.hh,v 1.3 2004/03/23 17:58:40 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/functions.hh,v 1.4 2004/04/18 13:29:43 schnetter Exp $ #ifndef FUNCTIONS_HH #define FUNCTIONS_HH @@ -64,11 +64,6 @@ namespace Carpet { vector<bbvect>& obs, vector<int>& ps); void MakeMultigridBoxes (const cGH* cgh, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, vector<ibbox> const & bbs, vector<bbvect> const & obs, vector<vector<ibbox> > & bbss); diff --git a/Carpet/CarpetLib/src/dh.cc b/Carpet/CarpetLib/src/dh.cc index 1cd9772e7..f7b7b88e5 100644 --- a/Carpet/CarpetLib/src/dh.cc +++ b/Carpet/CarpetLib/src/dh.cc @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.cc,v 1.50 2004/04/07 16:56:42 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.cc,v 1.51 2004/04/18 13:29:43 schnetter Exp $ #include <assert.h> @@ -31,7 +31,7 @@ dh<D>::dh (gh<D>& h, assert (buffer_width>=0); h.add(this); CHECKPOINT; - recompose (0, true); + recompose (); } // Destructors @@ -51,7 +51,7 @@ int dh<D>::prolongation_stencil_size () const { // Modifiers template<int D> -void dh<D>::recompose (const int initialise_from, const bool do_prolongate) { +void dh<D>::recompose () { DECLARE_CCTK_PARAMETERS; CHECKPOINT; @@ -574,7 +574,7 @@ void dh<D>::recompose (const int initialise_from, const bool do_prolongate) { for (typename list<ggf<D>*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) { - (*f)->recompose (initialise_from, do_prolongate); + (*f)->recompose (); } } diff --git a/Carpet/CarpetLib/src/dh.hh b/Carpet/CarpetLib/src/dh.hh index d525a0be4..c78d31291 100644 --- a/Carpet/CarpetLib/src/dh.hh +++ b/Carpet/CarpetLib/src/dh.hh @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.hh,v 1.17 2004/03/03 16:20:19 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.hh,v 1.18 2004/04/18 13:29:43 schnetter Exp $ #ifndef DH_HH #define DH_HH @@ -115,7 +115,7 @@ public: int prolongation_stencil_size () const; // Modifiers - void recompose (const int initialise_from, const bool do_prolongate); + void recompose (); // Grid function management void add (ggf<D>* f); diff --git a/Carpet/CarpetLib/src/gf.cc b/Carpet/CarpetLib/src/gf.cc index 462c179b8..36b601850 100644 --- a/Carpet/CarpetLib/src/gf.cc +++ b/Carpet/CarpetLib/src/gf.cc @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gf.cc,v 1.17 2004/03/23 19:30:14 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gf.cc,v 1.18 2004/04/18 13:29:43 schnetter Exp $ #include <assert.h> @@ -23,7 +23,7 @@ gf<T,D>::gf (const int varindex, const operator_type transport_operator, t, d, tmin, tmax, prolongation_order_time, vectorlength, vectorindex, vectorleader) { - this->recompose (0, true); + this->recompose (); } // Destructors diff --git a/Carpet/CarpetLib/src/ggf.cc b/Carpet/CarpetLib/src/ggf.cc index 38657d367..6b78c43dd 100644 --- a/Carpet/CarpetLib/src/ggf.cc +++ b/Carpet/CarpetLib/src/ggf.cc @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/ggf.cc,v 1.36 2004/03/23 19:30:14 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/ggf.cc,v 1.37 2004/04/18 13:28:25 schnetter Exp $ #include <assert.h> #include <stdlib.h> @@ -55,7 +55,7 @@ bool ggf<D>::operator== (const ggf<D>& f) const { // Modifiers template<int D> -void ggf<D>::recompose (const int initialise_from, const bool do_prolongate) { +void ggf<D>::recompose () { // TODO: restructure storage only when needed @@ -66,7 +66,7 @@ void ggf<D>::recompose (const int initialise_from, const bool do_prolongate) { storage.resize(tmax-tmin+1); for (int tl=tmin; tl<=tmax; ++tl) { storage.at(tl-tmin).resize(h.reflevels()); - for (int rl=initialise_from; rl<h.reflevels(); ++rl) { + for (int rl=0; rl<h.reflevels(); ++rl) { storage.at(tl-tmin).at(rl).resize(h.components(rl)); for (int c=0; c<h.components(rl); ++c) { storage.at(tl-tmin).at(rl).at(c).resize(h.mglevels(rl,c)); @@ -78,53 +78,73 @@ void ggf<D>::recompose (const int initialise_from, const bool do_prolongate) { } // for tl // Initialise the new storage - for (int rl=initialise_from; rl<h.reflevels(); ++rl) { - for (int tl=tmin; tl<=tmax; ++tl) { - for (int c=0; c<h.components(rl); ++c) { - for (int ml=0; ml<h.mglevels(rl,c); ++ml) { - - storage.at(tl-tmin).at(rl).at(c).at(ml) = typed_data(tl,rl,c,ml); - - // Allocate storage - storage.at(tl-tmin).at(rl).at(c).at(ml)->allocate - (d.boxes.at(rl).at(c).at(ml).exterior, h.proc(rl,c)); - - if (do_prolongate) { - // Initialise from coarser level, if possible - // TODO: init only un-copied regions - if (rl>0) { - for (comm_state<D> state; !state.done(); state.step()) { - const CCTK_REAL time = t.time(tl,rl,ml); - ref_prolongate (state,tl,rl,c,ml,time); - } - } // if rl - } // if do_prolongate - - // Copy from old storage, if possible - // todo: copy only from interior regions? - if (rl<(int)oldstorage.at(tl-tmin).size()) { - for (comm_state<D> state; !state.done(); state.step()) { + // TODO: overlap this initialisation for all variables + for (int rl=0; rl<h.reflevels(); ++rl) { + bool firsttime=true; + for (comm_state<D> state; !state.done(); state.step(), firsttime=false) { + for (int tl=tmin; tl<=tmax; ++tl) { + for (int c=0; c<h.components(rl); ++c) { + for (int ml=0; ml<h.mglevels(rl,c); ++ml) { + + if (firsttime) { + storage.at(tl-tmin).at(rl).at(c).at(ml) = typed_data(tl,rl,c,ml); + + // Allocate storage + storage.at(tl-tmin).at(rl).at(c).at(ml)->allocate + (d.boxes.at(rl).at(c).at(ml).exterior, h.proc(rl,c)); + } + + // Find out which regions need to be prolongated + // TODO: do this once in the dh instead of for each variable here + ibset work (d.boxes.at(rl).at(c).at(ml).exterior); + + // Copy from old storage, if possible + // TODO: copy only from interior regions? + if (rl<(int)oldstorage.at(tl-tmin).size()) { for (int cc=0; cc<(int)oldstorage.at(tl-tmin).at(rl).size(); ++cc) { if (ml<(int)oldstorage.at(tl-tmin).at(rl).at(cc).size()) { - const ibbox ovlp = - (d.boxes.at(rl).at(c).at(ml).exterior - & oldstorage.at(tl-tmin).at(rl).at(cc).at(ml)->extent()); - storage.at(tl-tmin).at(rl).at(c).at(ml)->copy_from - (state, oldstorage.at(tl-tmin).at(rl).at(cc).at(ml), ovlp); + // TODO: prefer same processor, etc., see dh.cc + ibset ovlp = work & oldstorage.at(tl-tmin).at(rl).at(cc).at(ml)->extent(); + ovlp.normalize(); + work -= ovlp; + for (typename ibset::const_iterator r=ovlp.begin(); r!=ovlp.end(); ++r) { + storage.at(tl-tmin).at(rl).at(c).at(ml)->copy_from (state, oldstorage.at(tl-tmin).at(rl).at(cc).at(ml), *r); + } } // if ml } // for cc - } // for step - } // if rl - - } // for ml - } // for c - - } // for tl + } // if rl + work.normalize(); + + // Initialise from coarser level, if possible + if (rl>0) { + if (transport_operator != op_none) { + assert (tmax-tmin+1 >= prolongation_order_time+1); + vector<int> tls(prolongation_order_time+1); + for (int i=0; i<=prolongation_order_time; ++i) { + tls.at(i) = tmax - i; + } + vector<const gdata<D>*> gsrcs(tls.size()); + vector<CCTK_REAL> times(tls.size()); + for (int i=0; i<(int)gsrcs.size(); ++i) { + gsrcs.at(i) = storage.at(tls.at(i)-tmin).at(rl-1).at(c).at(ml); + times.at(i) = t.time(tls.at(i),rl-1,ml); + } + const CCTK_REAL time = t.time(tl,rl,ml); + for (typename ibset::const_iterator r=work.begin(); r!=work.end(); ++r) { + storage.at(tl-tmin).at(rl).at(c).at(ml)->interpolate_from (state, gsrcs, times, *r, time, d.prolongation_order_space, prolongation_order_time); + } + } // if transport_operator + } // if rl + + } // for ml + } // for c + } // for tl + } // for step } // for rl // Delete old storage for (int tl=tmin; tl<=tmax; ++tl) { - for (int rl=initialise_from; rl<(int)oldstorage.at(tl-tmin).size(); ++rl) { + for (int rl=0; rl<(int)oldstorage.at(tl-tmin).size(); ++rl) { for (int c=0; c<(int)oldstorage.at(tl-tmin).at(rl).size(); ++c) { for (int ml=0; ml<(int)oldstorage.at(tl-tmin).at(rl).at(c).size(); ++ml) { delete oldstorage.at(tl-tmin).at(rl).at(c).at(ml); @@ -134,21 +154,19 @@ void ggf<D>::recompose (const int initialise_from, const bool do_prolongate) { } // for tl for (int tl=tmin; tl<=tmax; ++tl) { - for (int rl=initialise_from; rl<h.reflevels(); ++rl) { + for (int rl=0; rl<h.reflevels(); ++rl) { // Set boundaries for (int c=0; c<h.components(rl); ++c) { for (int ml=0; ml<h.mglevels(rl,c); ++ml) { - if (do_prolongate) { - // TODO: assert that reflevel 0 boundaries are copied - if (rl>0) { - for (comm_state<D> state; !state.done(); state.step()) { - const CCTK_REAL time = t.time(tl,rl,ml); - ref_bnd_prolongate (state,tl,rl,c,ml,time); - } - } // if rl - } + // TODO: assert that reflevel 0 boundaries are copied + if (rl>0) { + for (comm_state<D> state; !state.done(); state.step()) { + const CCTK_REAL time = t.time(tl,rl,ml); + ref_bnd_prolongate (state,tl,rl,c,ml,time); + } + } // if rl for (comm_state<D> state; !state.done(); state.step()) { sync (state,tl,rl,c,ml); diff --git a/Carpet/CarpetLib/src/ggf.hh b/Carpet/CarpetLib/src/ggf.hh index 64998c8a2..d228a863e 100644 --- a/Carpet/CarpetLib/src/ggf.hh +++ b/Carpet/CarpetLib/src/ggf.hh @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/ggf.hh,v 1.20 2004/03/23 12:40:27 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/ggf.hh,v 1.21 2004/04/18 13:29:43 schnetter Exp $ #ifndef GGF_HH #define GGF_HH @@ -87,7 +87,7 @@ public: // Modifiers - void recompose (const int initialise_from, const bool do_prolongate); + void recompose (); // Cycle the time levels by rotating the data sets void cycle (int rl, int c, int ml); diff --git a/Carpet/CarpetLib/src/gh.cc b/Carpet/CarpetLib/src/gh.cc index 172da013d..b68be34d8 100644 --- a/Carpet/CarpetLib/src/gh.cc +++ b/Carpet/CarpetLib/src/gh.cc @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gh.cc,v 1.26 2004/04/07 16:59:47 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gh.cc,v 1.28 2004/04/18 13:29:43 schnetter Exp $ #include <assert.h> #include <stdlib.h> @@ -36,9 +36,7 @@ gh<D>::~gh () { } template<int D> void gh<D>::recompose (const rexts& exts, const rbnds& outer_bounds, - const rprocs& procs, - const int initialise_from, - const bool do_prolongate) + const rprocs& procs) { DECLARE_CCTK_PARAMETERS; @@ -96,7 +94,11 @@ void gh<D>::recompose (const rexts& exts, // Check base grid extent if (reflevels()>0) { for (int c=0; c<components(0); ++c) { + // TODO: put the check back in, taking outer boundaries into + // account +#if 0 assert (extents.at(0).at(c).at(0).is_contained_in(baseextent)); +#endif } } @@ -169,7 +171,7 @@ void gh<D>::recompose (const rexts& exts, } for (typename list<dh<D>*>::iterator d=dhs.begin(); d!=dhs.end(); ++d) { - (*d)->recompose (initialise_from, do_prolongate); + (*d)->recompose (); } } diff --git a/Carpet/CarpetLib/src/gh.hh b/Carpet/CarpetLib/src/gh.hh index babc85cfb..69f9f31c0 100644 --- a/Carpet/CarpetLib/src/gh.hh +++ b/Carpet/CarpetLib/src/gh.hh @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gh.hh,v 1.16 2004/03/23 19:30:14 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gh.hh,v 1.17 2004/04/18 13:29:43 schnetter Exp $ #ifndef GH_HH #define GH_HH @@ -85,9 +85,7 @@ public: // Modifiers void recompose (const rexts& exts, const rbnds& outer_bounds, - const rprocs& procs, - const int initialise_from, - const bool do_prolongate); + const rprocs& procs); // Accessors int reflevels () const { diff --git a/Carpet/CarpetRegrid/interface.ccl b/Carpet/CarpetRegrid/interface.ccl index efc701a73..483ded51b 100644 --- a/Carpet/CarpetRegrid/interface.ccl +++ b/Carpet/CarpetRegrid/interface.ccl @@ -1,5 +1,5 @@ # Interface definition for thorn CarpetRegrid -# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/interface.ccl,v 1.6 2004/01/25 14:57:30 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/interface.ccl,v 1.7 2004/04/18 13:29:43 schnetter Exp $ implements: CarpetRegrid @@ -16,19 +16,35 @@ uses include header: gh.hh +# The location of the boundary points +CCTK_INT FUNCTION GetBoundarySpecification \ + (CCTK_INT IN size, \ + CCTK_INT OUT ARRAY nboundaryzones, \ + CCTK_INT OUT ARRAY is_internal, \ + CCTK_INT OUT ARRAY is_staggered, \ + CCTK_INT OUT ARRAY shiftout) +USES FUNCTION GetBoundarySpecification + +# The overall size of the domain +CCTK_INT FUNCTION GetDomainSpecification \ + (CCTK_INT IN size, \ + CCTK_REAL OUT ARRAY physical_min, \ + CCTK_REAL OUT ARRAY physical_max, \ + CCTK_REAL OUT ARRAY interior_min, \ + CCTK_REAL OUT ARRAY interior_max, \ + CCTK_REAL OUT ARRAY exterior_min, \ + CCTK_REAL OUT ARRAY exterior_max, \ + CCTK_REAL OUT ARRAY spacing) +USES FUNCTION GetDomainSpecification + + + # The true prototype of the routine below: # int Carpet_Regrid (const cGH * cctkGH, # gh<dim>::rexts * bbsss, # gh<dim>::rbnds * obss, # gh<dim>::rprocs * pss); CCTK_INT FUNCTION Carpet_Regrid (CCTK_POINTER_TO_CONST IN cctkGH, \ - CCTK_INT IN reflevel, \ - CCTK_INT IN map, \ - CCTK_INT IN size, \ - CCTK_INT IN ARRAY nboundaryzones, \ - CCTK_INT IN ARRAY is_internal, \ - CCTK_INT IN ARRAY is_staggered, \ - CCTK_INT IN ARRAY shiftout, \ CCTK_POINTER IN bsss, \ CCTK_POINTER IN obss, \ CCTK_POINTER IN pss) diff --git a/Carpet/CarpetRegrid/param.ccl b/Carpet/CarpetRegrid/param.ccl index ca830a75f..733b3c8e3 100644 --- a/Carpet/CarpetRegrid/param.ccl +++ b/Carpet/CarpetRegrid/param.ccl @@ -1,5 +1,5 @@ # Parameter definitions for thorn CarpetRegrid -# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/param.ccl,v 1.17 2004/04/14 22:19:44 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/param.ccl,v 1.18 2004/04/18 13:29:43 schnetter Exp $ @@ -52,6 +52,12 @@ KEYWORD refined_regions "Regions where the grid is refined" STEERABLE=always +BOOLEAN smart_outer_boundaries "Use the CoordBase interface for outer boundaries" +{ +} no + + + # Region specifications for centre refinement BOOLEAN symmetry_x "Refine the lower half in x-direction" diff --git a/Carpet/CarpetRegrid/src/automatic.cc b/Carpet/CarpetRegrid/src/automatic.cc index 6add8c770..2f5651b2e 100644 --- a/Carpet/CarpetRegrid/src/automatic.cc +++ b/Carpet/CarpetRegrid/src/automatic.cc @@ -16,7 +16,7 @@ #include "regrid.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/automatic.cc,v 1.1 2004/01/25 14:57:30 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/automatic.cc,v 1.2 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_CarpetRegrid_automatic_cc); } @@ -31,22 +31,12 @@ namespace CarpetRegrid { int Automatic (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss) { DECLARE_CCTK_PARAMETERS; - assert (reflevel>=0 && reflevel<maxreflevels); - assert (map>=0 && map<maps); - assert (refinement_levels >= 1); assert (bbsss.size() >= 1); @@ -64,15 +54,17 @@ namespace CarpetRegrid { assert (CCTK_VarTypeI(vi) == CCTK_VARIABLE_REAL); assert (CCTK_GroupDimI(gi) == dim); - assert (arrdata.at(gi).at(map).data.at(vi-v1)); + assert (arrdata.at(gi).at(Carpet::map).data.at(vi-v1)); const gf<CCTK_REAL,dim>& errorvar = (*dynamic_cast<const gf<CCTK_REAL,dim>*> - (arrdata.at(gi).at(map).data.at(vi-v1))); - + (arrdata.at(gi).at(Carpet::map).data.at(vi-v1))); + vector<ibbox> bbs; gh<dim>::cbnds obs; Automatic_OneLevel - (cctkGH, hh, reflevel, minwidth, minfraction, maxerror, errorvar, + (cctkGH, hh, + reflevel, min(reflevels+1, maxreflevels), + minwidth, minfraction, maxerror, errorvar, bbs, obs); // make multiprocessor aware @@ -81,10 +73,7 @@ namespace CarpetRegrid { // make multigrid aware vector<vector<ibbox> > bbss; - MakeMultigridBoxes - (cctkGH, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbs, obs, bbss); + MakeMultigridBoxes (cctkGH, bbs, obs, bbss); @@ -115,7 +104,8 @@ namespace CarpetRegrid { void Automatic_OneLevel (const cGH * const cctkGH, const gh<dim> & hh, - const int reflevel, + const int rl, + const int numrl, const int minwidth, const CCTK_REAL minfraction, const CCTK_REAL maxerror, @@ -123,20 +113,20 @@ namespace CarpetRegrid { vector<ibbox> & bbs, vector<bbvect> & obs) { - if (reflevel+1 >= maxreflevels) return; + if (rl+1 >= numrl) return; // Arbitrary const int tl = 0; const int ml = 0; -// cout << endl << "MRA: Choosing regions to refine in " << hh.components(reflevel) << " components" << endl; +// cout << endl << "MRA: Choosing regions to refine in " << hh.components(rl) << " components" << endl; list<ibbox> bbl; - for (int c=0; c<hh.components(reflevel); ++c) { - const ibbox region = hh.extents.at(reflevel).at(c).at(ml); + for (int c=0; c<hh.components(rl); ++c) { + const ibbox region = hh.extents.at(rl).at(c).at(ml); assert (! region.empty()); - const data<CCTK_REAL,dim>& errdata = *errorvar(tl,reflevel,c,ml); + const data<CCTK_REAL,dim>& errdata = *errorvar(tl,rl,c,ml); Automatic_Recursive (cctkGH, hh, minwidth, minfraction, maxerror, errdata, bbl, region); diff --git a/Carpet/CarpetRegrid/src/baselevel.cc b/Carpet/CarpetRegrid/src/baselevel.cc index 18cc8a95c..c380c6844 100644 --- a/Carpet/CarpetRegrid/src/baselevel.cc +++ b/Carpet/CarpetRegrid/src/baselevel.cc @@ -9,7 +9,7 @@ #include "regrid.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/baselevel.cc,v 1.1 2004/01/25 14:57:30 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/baselevel.cc,v 1.2 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_CarpetRegrid_baselevel_cc); } @@ -24,22 +24,12 @@ namespace CarpetRegrid { int BaseLevel (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss) { DECLARE_CCTK_PARAMETERS; - assert (reflevel>=0 && reflevel<maxreflevels); - assert (map>=0 && map<maps); - assert (refinement_levels == 1); assert (bbsss.size() == 1); diff --git a/Carpet/CarpetRegrid/src/centre.cc b/Carpet/CarpetRegrid/src/centre.cc index 46a23f794..ef347b099 100644 --- a/Carpet/CarpetRegrid/src/centre.cc +++ b/Carpet/CarpetRegrid/src/centre.cc @@ -9,7 +9,7 @@ #include "regrid.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/centre.cc,v 1.1 2004/01/25 14:57:30 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/centre.cc,v 1.2 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_CarpetRegrid_centre_cc); } @@ -24,22 +24,12 @@ namespace CarpetRegrid { int Centre (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss) { DECLARE_CCTK_PARAMETERS; - assert (reflevel>=0 && reflevel<maxreflevels); - assert (map>=0 && map<maps); - assert (refinement_levels >= 1); // do nothing if the levels already exist @@ -89,10 +79,7 @@ namespace CarpetRegrid { // make multigrid aware vector<vector<ibbox> > bbss; - MakeMultigridBoxes - (cctkGH, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbs, obs, bbss); + MakeMultigridBoxes (cctkGH, bbs, obs, bbss); bbsss.at(rl) = bbss; obss.at(rl) = obs; diff --git a/Carpet/CarpetRegrid/src/manualcoordinatelist.cc b/Carpet/CarpetRegrid/src/manualcoordinatelist.cc index 92ab6900a..6cc8d719c 100644 --- a/Carpet/CarpetRegrid/src/manualcoordinatelist.cc +++ b/Carpet/CarpetRegrid/src/manualcoordinatelist.cc @@ -12,7 +12,7 @@ #include "regrid.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/manualcoordinatelist.cc,v 1.1 2004/01/25 14:57:30 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/manualcoordinatelist.cc,v 1.2 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_CarpetRegrid_manualcoordinatelist_cc); } @@ -27,21 +27,12 @@ namespace CarpetRegrid { int ManualCoordinateList (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss) { DECLARE_CCTK_PARAMETERS; - - assert (reflevel>=0 && reflevel<maxreflevels); - assert (map>=0 && map<maps); + int ierr; assert (refinement_levels >= 1); @@ -50,6 +41,21 @@ namespace CarpetRegrid { assert (bbsss.size() >= 1); + jjvect nboundaryzones, is_internal, is_staggered, shiftout; + ierr = GetBoundarySpecification + (2*dim, &nboundaryzones[0][0], &is_internal[0][0], + &is_staggered[0][0], &shiftout[0][0]); + assert (!ierr); + rvect physical_min, physical_max; + rvect interior_min, interior_max; + rvect exterior_min, exterior_max; + rvect base_spacing; + ierr = GetDomainSpecification + (dim, &physical_min[0], &physical_max[0], + &interior_min[0], &interior_max[0], + &exterior_min[0], &exterior_max[0], &base_spacing[0]); + assert (!ierr); + bbsss.resize (refinement_levels); obss.resize (refinement_levels); pss.resize (refinement_levels); @@ -63,35 +69,68 @@ namespace CarpetRegrid { CCTK_WARN (0, "Could not parse parameter \"coordinates\""); } } - + vector<vector<bbvect> > newobss; - if (strcmp(outerbounds, "") !=0 ) { - istringstream ob_str (outerbounds); - try { - ob_str >> newobss; - } catch (input_error) { - CCTK_WARN (0, "Could not parse parameter \"outerbounds\""); - } - bool good = newobss.size() == newbbss.size(); - if (good) { - for (size_t rl=0; rl<newobss.size(); ++rl) { - good = good && newobss.at(rl).size() == newbbss.at(rl).size(); - } - } - if (! good) { - cout << "coordinates: " << newbbss << endl; - cout << "outerbounds: " << newobss << endl; - CCTK_WARN (0, "The parameters \"outerbounds\" and \"coordinates\" must have the same structure"); - } - } else { + if (smart_outer_boundaries) { +#warning "TODO" + // assert (domain_from_coordbase); + newobss.resize(newbbss.size()); for (size_t rl=0; rl<newobss.size(); ++rl) { newobss.at(rl).resize(newbbss.at(rl).size()); for (size_t c=0; c<newobss.at(rl).size(); ++c) { - newobss.at(rl).at(c) = bbvect(false); + for (int d=0; d<dim; ++d) { + newobss.at(rl).at(c)[d][0] = abs(newbbss.at(rl).at(c).lower()[d] - physical_min[d]) < 1.0e-6 * base_spacing[d] / ipow(reffact, rl); + if (newobss.at(rl).at(c)[d][0]) { + rvect lo = newbbss.at(rl).at(c).lower(); + rvect up = newbbss.at(rl).at(c).upper(); + rvect str = newbbss.at(rl).at(c).stride(); + lo[d] = exterior_min[d]; + newbbss.at(rl).at(c) = rbbox(lo, up, str); + } + newobss.at(rl).at(c)[d][1] = abs(newbbss.at(rl).at(c).upper()[d] - physical_max[d]) < 1.0e-6 * base_spacing[d] / ipow(reffact, rl); + if (newobss.at(rl).at(c)[d][1]) { + rvect lo = newbbss.at(rl).at(c).lower(); + rvect up = newbbss.at(rl).at(c).upper(); + rvect str = newbbss.at(rl).at(c).stride(); + up[d] = exterior_max[d]; + newbbss.at(rl).at(c) = rbbox(lo, up, str); + } + } } } - } + + } else { // if ! smart_outer_boundaries + + if (strcmp(outerbounds, "") !=0 ) { + istringstream ob_str (outerbounds); + try { + ob_str >> newobss; + } catch (input_error) { + CCTK_WARN (0, "Could not parse parameter \"outerbounds\""); + } + bool good = newobss.size() == newbbss.size(); + if (good) { + for (size_t rl=0; rl<newobss.size(); ++rl) { + good = good && newobss.at(rl).size() == newbbss.at(rl).size(); + } + } + if (! good) { + cout << "coordinates: " << newbbss << endl; + cout << "outerbounds: " << newobss << endl; + CCTK_WARN (0, "The parameters \"outerbounds\" and \"coordinates\" must have the same structure"); + } + } else { + newobss.resize(newbbss.size()); + for (size_t rl=0; rl<newobss.size(); ++rl) { + newobss.at(rl).resize(newbbss.at(rl).size()); + for (size_t c=0; c<newobss.at(rl).size(); ++c) { + newobss.at(rl).at(c) = bbvect(false); + } + } + } + + } // if ! smart_outer_boundaries if (newbbss.size() < refinement_levels-1) { CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, @@ -120,10 +159,7 @@ namespace CarpetRegrid { // make multigrid aware vector<vector<ibbox> > bbss; - MakeMultigridBoxes - (cctkGH, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbs, obs, bbss); + MakeMultigridBoxes (cctkGH, bbs, obs, bbss); bbsss.at(rl) = bbss; obss.at(rl) = obs; diff --git a/Carpet/CarpetRegrid/src/manualcoordinates.cc b/Carpet/CarpetRegrid/src/manualcoordinates.cc index 54474d863..cf6ce3f94 100644 --- a/Carpet/CarpetRegrid/src/manualcoordinates.cc +++ b/Carpet/CarpetRegrid/src/manualcoordinates.cc @@ -11,7 +11,7 @@ #include "regrid.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/manualcoordinates.cc,v 1.2 2004/02/27 16:24:06 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/manualcoordinates.cc,v 1.3 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_CarpetRegrid_manualcoordinates_cc); } @@ -26,22 +26,12 @@ namespace CarpetRegrid { int ManualCoordinates (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss) { DECLARE_CCTK_PARAMETERS; - assert (reflevel>=0 && reflevel<maxreflevels); - assert (map>=0 && map<maps); - if (refinement_levels > 4) { CCTK_WARN (0, "Cannot currently specify manual refinement regions for more than 4 refinement levels"); } @@ -81,10 +71,7 @@ namespace CarpetRegrid { // make multigrid aware vector<vector<ibbox> > bbss; - MakeMultigridBoxes - (cctkGH, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbs, obs, bbss); + MakeMultigridBoxes (cctkGH, bbs, obs, bbss); bbsss.at(rl) = bbss; obss.at(rl) = obs; @@ -99,27 +86,27 @@ namespace CarpetRegrid { void ManualCoordinates_OneLevel (const cGH * const cctkGH, const gh<dim> & hh, - const int reflevel, - const int reflevels, + const int rl, + const int numrl, const rvect lower, const rvect upper, const bbvect obound, vector<ibbox> & bbs, vector<bbvect> & obs) { - if (reflevel >= reflevels) return; + if (rl >= numrl) return; - jvect const ilower = pos2int (cctkGH, hh, lower, reflevel); - jvect const iupper = pos2int (cctkGH, hh, upper, reflevel); + jvect const ilower = pos2int (cctkGH, hh, lower, rl); + jvect const iupper = pos2int (cctkGH, hh, upper, rl); ManualGridpoints_OneLevel - (cctkGH, hh, reflevel, reflevels, ilower, iupper, obound, bbs, obs); + (cctkGH, hh, rl, numrl, ilower, iupper, obound, bbs, obs); } ivect delta2int (const cGH * const cctkGH, const gh<dim>& hh, - const rvect & rpos, const int reflevel) + const rvect & rpos, const int rl) { rvect global_lower, global_upper; for (int d=0; d<dim; ++d) { @@ -133,7 +120,7 @@ namespace CarpetRegrid { const ivect global_extent (hh.baseextent.upper() - hh.baseextent.lower()); const rvect scale = rvect(global_extent) / (global_upper - global_lower); - const int levfac = ipow(hh.reffact, reflevel); + const int levfac = ipow(hh.reffact, rl); assert (all (hh.baseextent.stride() % levfac == 0)); const ivect istride = hh.baseextent.stride() / levfac; @@ -149,7 +136,7 @@ namespace CarpetRegrid { ivect pos2int (const cGH* const cctkGH, const gh<dim>& hh, - const rvect & rpos, const int reflevel) + const rvect & rpos, const int rl) { rvect global_lower, global_upper; for (int d=0; d<dim; ++d) { @@ -163,7 +150,7 @@ namespace CarpetRegrid { const ivect global_extent (hh.baseextent.upper() - hh.baseextent.lower()); const rvect scale = rvect(global_extent) / (global_upper - global_lower); - const int levfac = ipow(hh.reffact, reflevel); + const int levfac = ipow(hh.reffact, rl); assert (all (hh.baseextent.stride() % levfac == 0)); const ivect istride = hh.baseextent.stride() / levfac; diff --git a/Carpet/CarpetRegrid/src/manualgridpointlist.cc b/Carpet/CarpetRegrid/src/manualgridpointlist.cc index 6976b982b..6d5c4cd78 100644 --- a/Carpet/CarpetRegrid/src/manualgridpointlist.cc +++ b/Carpet/CarpetRegrid/src/manualgridpointlist.cc @@ -12,7 +12,7 @@ #include "regrid.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/manualgridpointlist.cc,v 1.1 2004/01/25 14:57:30 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/manualgridpointlist.cc,v 1.2 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_CarpetRegrid_manualgridpointlist_cc); } @@ -27,22 +27,12 @@ namespace CarpetRegrid { int ManualGridpointList (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss) { DECLARE_CCTK_PARAMETERS; - assert (reflevel>=0 && reflevel<maxreflevels); - assert (map>=0 && map<maps); - assert (refinement_levels >= 1); // do nothing if the levels already exist @@ -120,10 +110,7 @@ namespace CarpetRegrid { // make multigrid aware vector<vector<ibbox> > bbss; - MakeMultigridBoxes - (cctkGH, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbs, obs, bbss); + MakeMultigridBoxes (cctkGH, bbs, obs, bbss); bbsss.at(rl) = bbss; obss.at(rl) = obs; diff --git a/Carpet/CarpetRegrid/src/manualgridpoints.cc b/Carpet/CarpetRegrid/src/manualgridpoints.cc index e8cd6c17a..f8be5eb57 100644 --- a/Carpet/CarpetRegrid/src/manualgridpoints.cc +++ b/Carpet/CarpetRegrid/src/manualgridpoints.cc @@ -11,7 +11,7 @@ #include "regrid.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/manualgridpoints.cc,v 1.1 2004/01/25 14:57:30 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/manualgridpoints.cc,v 1.2 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_CarpetRegrid_manualgridpoints_cc); } @@ -26,22 +26,12 @@ namespace CarpetRegrid { int ManualGridpoints (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss) { DECLARE_CCTK_PARAMETERS; - assert (reflevel>=0 && reflevel<maxreflevels); - assert (map>=0 && map<maps); - if (refinement_levels > 4) { CCTK_WARN (0, "Cannot currently specify manual refinement regions for more than 4 refinement levels"); } @@ -72,7 +62,7 @@ namespace CarpetRegrid { gh<dim>::cbnds obs; ManualGridpoints_OneLevel - (cctkGH, hh, rl, refinement_levels, + (cctkGH, hh, rl,refinement_levels, ilower.at(rl-1), iupper.at(rl-1), ob, bbs, obs); // make multiprocessor aware @@ -81,10 +71,7 @@ namespace CarpetRegrid { // make multigrid aware vector<vector<ibbox> > bbss; - MakeMultigridBoxes - (cctkGH, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbs, obs, bbss); + MakeMultigridBoxes (cctkGH, bbs, obs, bbss); bbsss.at(rl) = bbss; obss.at(rl) = obs; @@ -99,38 +86,36 @@ namespace CarpetRegrid { void ManualGridpoints_OneLevel (const cGH * const cctkGH, const gh<dim> & hh, - const int reflevel, - const int reflevels, + const int rl, + const int numrl, const ivect ilower, const ivect iupper, const bbvect obound, vector<ibbox> & bbs, vector<bbvect> & obs) { - if (reflevel >= reflevels) return; - const ivect rstr = hh.baseextent.stride(); const ivect rlb = hh.baseextent.lower(); const ivect rub = hh.baseextent.upper(); - const int levfac = ipow(hh.reffact, reflevel); + const int levfac = ipow(hh.reffact, rl); assert (all (rstr % levfac == 0)); const ivect str (rstr / levfac); const ivect lb (ilower); const ivect ub (iupper); if (! all(lb>=rlb && ub<=rub)) { ostringstream buf; - buf << "The refinement region boundaries for refinement level #" << reflevel << " are not within the main grid. Allowed are the grid point boundaries " << rlb << " - " << rub << "; specified were " << lb << " - " << ub << ends; + buf << "The refinement region boundaries for refinement level #" << rl << " are not within the main grid. Allowed are the grid point boundaries " << rlb << " - " << rub << "; specified were " << lb << " - " << ub << ends; CCTK_WARN (0, buf.str().c_str()); } if (! all(lb<=ub)) { ostringstream buf; - buf << "The refinement region boundaries for refinement level #" << reflevel << " have the upper boundary (" << ub << ") less than the lower boundary (" << lb << ")" << ends; + buf << "The refinement region boundaries for refinement level #" << rl << " have the upper boundary (" << ub << ") less than the lower boundary (" << lb << ")" << ends; CCTK_WARN (0, buf.str().c_str()); } if (! all(lb%str==0 && ub%str==0)) { CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, - "The refinement region boundaries for refinement level #%d are not a multiple of the stride for that level", reflevel); + "The refinement region boundaries for refinement level #%d are not a multiple of the stride for that level", rl); } assert (all(lb>=rlb && ub<=rub)); assert (all(lb<=ub)); diff --git a/Carpet/CarpetRegrid/src/moving.cc b/Carpet/CarpetRegrid/src/moving.cc index 411286940..cfcb6496c 100644 --- a/Carpet/CarpetRegrid/src/moving.cc +++ b/Carpet/CarpetRegrid/src/moving.cc @@ -9,7 +9,7 @@ #include "regrid.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/moving.cc,v 1.2 2004/04/16 18:41:33 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/moving.cc,v 1.3 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_CarpetRegrid_moving_cc); } @@ -24,13 +24,6 @@ namespace CarpetRegrid { int Moving (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss) @@ -38,9 +31,6 @@ namespace CarpetRegrid { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; - assert (reflevel>=0 && reflevel<maxreflevels); - assert (map>=0 && map<maps); - assert (refinement_levels >= 1); // do nothing if the levels already exist @@ -95,10 +85,7 @@ namespace CarpetRegrid { // make multigrid aware vector<vector<ibbox> > bbss; - MakeMultigridBoxes - (cctkGH, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbs, obs, bbss); + MakeMultigridBoxes (cctkGH, bbs, obs, bbss); bbsss.at(rl) = bbss; obss.at(rl) = obs; diff --git a/Carpet/CarpetRegrid/src/paramcheck.cc b/Carpet/CarpetRegrid/src/paramcheck.cc index ad2c4819e..d0a463647 100644 --- a/Carpet/CarpetRegrid/src/paramcheck.cc +++ b/Carpet/CarpetRegrid/src/paramcheck.cc @@ -1,3 +1,5 @@ +#include <assert.h> + #include "cctk.h" #include "cctk_Arguments.h" #include "cctk_Parameters.h" @@ -5,7 +7,7 @@ #include "carpet.hh" #include "regrid.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/paramcheck.cc,v 1.1 2002/05/16 23:25:54 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/paramcheck.cc,v 1.2 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(CarpetRegrid_paramcheck_cc) @@ -22,6 +24,22 @@ namespace CarpetRegrid { if (refinement_levels > maxreflevels) { CCTK_PARAMWARN ("The parameter CarpetRegrid::refinement_levels is larger than Carpet::max_refinement_levels"); } + + if (smart_outer_boundaries) { + int type; + const CCTK_INT * const domain_from_coordbase + = (const CCTK_INT *) CCTK_ParameterGet ("domain_from_coordbase", "Carpet", &type); + assert (domain_from_coordbase); + assert (type == PARAMETER_BOOLEAN); + if (! *domain_from_coordbase) { + CCTK_PARAMWARN ("The parameter CarpetRegrid::smart_outer_boundaries can only be used when Carpet::domain_from_coordbase=yes"); + } + if (CCTK_Equals(refined_regions, "manual-coordinate-list")) { + // do nothing + } else { + CCTK_PARAMWARN ("The parameter CarpetRegrid::smart_outer_boundaries can currently only be used when CarpetRegrid::refined_regions=manual-coordinate-list"); + } + } return 0; } diff --git a/Carpet/CarpetRegrid/src/regrid.cc b/Carpet/CarpetRegrid/src/regrid.cc index 279044927..317c84381 100644 --- a/Carpet/CarpetRegrid/src/regrid.cc +++ b/Carpet/CarpetRegrid/src/regrid.cc @@ -13,7 +13,7 @@ #include "regrid.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/regrid.cc,v 1.38 2004/04/14 22:19:44 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/regrid.cc,v 1.39 2004/04/18 13:29:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_CarpetRegrid_regrid_cc); } @@ -25,13 +25,6 @@ namespace CarpetRegrid { using namespace Carpet; CCTK_INT CarpetRegrid_Regrid (CCTK_POINTER_TO_CONST const cctkGH_, - CCTK_INT const reflevel, - CCTK_INT const map, - CCTK_INT const size, - CCTK_INT const * const nboundaryzones_, - CCTK_INT const * const is_internal_, - CCTK_INT const * const is_staggered_, - CCTK_INT const * const shiftout_, CCTK_POINTER const bbsss_, CCTK_POINTER const obss_, CCTK_POINTER const pss_) @@ -40,22 +33,13 @@ namespace CarpetRegrid { const cGH * const cctkGH = (const cGH *) cctkGH_; - assert (reflevel>=0 && reflevel<maxreflevels); - assert (map>=0 && map<maps); - - assert (size == 2*dim); - jjvect const nboundaryzones (* (jjvect const *) nboundaryzones_); - jjvect const is_internal (* (jjvect const *) is_internal_); - jjvect const is_staggered (* (jjvect const *) is_staggered_); - jjvect const shiftout (* (jjvect const *) shiftout_); - gh<dim>::rexts & bbsss = * (gh<dim>::rexts *) bbsss_; gh<dim>::rbnds & obss = * (gh<dim>::rbnds *) obss_; gh<dim>::rprocs & pss = * (gh<dim>::rprocs *) pss_; - gh<dim> const & hh = *vhh.at(map); + gh<dim> const & hh = *vhh.at(Carpet::map); - assert (is_meta_mode()); + assert (is_singlemap_mode()); @@ -135,59 +119,39 @@ namespace CarpetRegrid { if (CCTK_EQUALS(refined_regions, "none")) { - do_recompose = BaseLevel - (cctkGH, hh, reflevel, map, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbsss, obss, pss); + do_recompose = BaseLevel (cctkGH, hh, bbsss, obss, pss); } else if (CCTK_EQUALS(refined_regions, "centre")) { - do_recompose = Centre - (cctkGH, hh, reflevel, map, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbsss, obss, pss); + do_recompose = Centre (cctkGH, hh, bbsss, obss, pss); } else if (CCTK_EQUALS(refined_regions, "manual-gridpoints")) { - do_recompose = ManualGridpoints - (cctkGH, hh, reflevel, map, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbsss, obss, pss); + do_recompose + = ManualGridpoints (cctkGH, hh, bbsss, obss, pss); } else if (CCTK_EQUALS(refined_regions, "manual-coordinates")) { - do_recompose = ManualCoordinates - (cctkGH, hh, reflevel, map, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbsss, obss, pss); + do_recompose + = ManualCoordinates (cctkGH, hh, bbsss, obss, pss); } else if (CCTK_EQUALS(refined_regions, "manual-gridpoint-list")) { - do_recompose = ManualGridpointList - (cctkGH, hh, reflevel, map, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbsss, obss, pss); + do_recompose + = ManualGridpointList (cctkGH, hh, bbsss, obss, pss); } else if (CCTK_EQUALS(refined_regions, "manual-coordinate-list")) { - do_recompose = ManualCoordinateList - (cctkGH, hh, reflevel, map, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbsss, obss, pss); + do_recompose + = ManualCoordinateList (cctkGH, hh, bbsss, obss, pss); } else if (CCTK_EQUALS(refined_regions, "moving")) { - do_recompose = Moving - (cctkGH, hh, reflevel, map, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbsss, obss, pss); + do_recompose = Moving (cctkGH, hh, bbsss, obss, pss); } else if (CCTK_EQUALS(refined_regions, "automatic")) { - do_recompose = Automatic - (cctkGH, hh, reflevel, map, - size, nboundaryzones, is_internal, is_staggered, shiftout, - bbsss, obss, pss); + do_recompose = Automatic (cctkGH, hh, bbsss, obss, pss); } else { assert (0); diff --git a/Carpet/CarpetRegrid/src/regrid.hh b/Carpet/CarpetRegrid/src/regrid.hh index 2de83f094..9228e23c3 100644 --- a/Carpet/CarpetRegrid/src/regrid.hh +++ b/Carpet/CarpetRegrid/src/regrid.hh @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/regrid.hh,v 1.12 2004/04/14 22:19:44 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/regrid.hh,v 1.13 2004/04/18 13:29:43 schnetter Exp $ #ifndef CARPETREGRID_HH #define CARPETREGRID_HH @@ -35,13 +35,6 @@ namespace CarpetRegrid { // gh<dim>::rbnds * obss, // gh<dim>::rprocs * pss); CCTK_INT CarpetRegrid_Regrid (CCTK_POINTER_TO_CONST const cctkGH_, - CCTK_INT const reflevel, - CCTK_INT const map, - CCTK_INT const size, - CCTK_INT const * const nboundaryzones, - CCTK_INT const * const is_internal, - CCTK_INT const * const is_staggered, - CCTK_INT const * const shiftout, CCTK_POINTER const bbsss_, CCTK_POINTER const obss_, CCTK_POINTER const pss_); @@ -51,47 +44,26 @@ namespace CarpetRegrid { int BaseLevel (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss); int Centre (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss); int ManualGridpoints (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss); void ManualGridpoints_OneLevel (const cGH * const cctkGH, const gh<dim> & hh, - const int reflevel, - const int reflevels, + const int rl, + const int numrl, const ivect ilower, const ivect iupper, const bbvect obound, @@ -100,87 +72,57 @@ namespace CarpetRegrid { int ManualCoordinates (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss); void ManualCoordinates_OneLevel (const cGH * const cctkGH, const gh<dim> & hh, - const int reflevel, - const int reflevels, - const rvect ilower, - const rvect iupper, + const int rl, + const int numrl, + const rvect lower, + const rvect upper, const bbvect obound, vector<ibbox> & bbs, vector<bbvect> & obs); - ivect delta2int (const cGH * const cctkGH, const gh<dim>& hh, - const rvect & rpos, const int reflevel); - ivect pos2int (const cGH* const cctkGH, const gh<dim>& hh, - const rvect & rpos, const int reflevel); + ivect delta2int (const cGH * const cctkGH, + const gh<dim>& hh, + const rvect & rpos, + const int rl); + ivect pos2int (const cGH* const cctkGH, + const gh<dim>& hh, + const rvect & rpos, + const int rl); int ManualGridpointList (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss); int ManualCoordinateList (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss); int Moving (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss); int Automatic (cGH const * const cctkGH, gh<dim> const & hh, - int const reflevel, - int const map, - int const size, - jjvect const & nboundaryzones, - jjvect const & is_internal, - jjvect const & is_staggered, - jjvect const & shiftout, gh<dim>::rexts & bbsss, gh<dim>::rbnds & obss, gh<dim>::rprocs & pss); void Automatic_OneLevel (const cGH * const cctkGH, const gh<dim> & hh, - const int reflevel, + const int rl, + const int numrl, const int minwidth, const CCTK_REAL minfraction, const CCTK_REAL maxerror, |