diff options
author | schnetter <> | 2002-03-11 12:17:00 +0000 |
---|---|---|
committer | schnetter <> | 2002-03-11 12:17:00 +0000 |
commit | 4fd01aecd88bd63bf3f6a79a63657915992a42b6 (patch) | |
tree | 5d9cd07f04aab436382fe93f3f1b1fadc75774ed | |
parent | 918fcc78c5afd27cdd931a6bfeb36a2cafa6abb0 (diff) |
Added stream input routines for some CarpetLib containers.
Added stream input routines for some CarpetLib containers.
The regridder now has to explicitly say which boundaries are outer,
and which are internal. This will make outer boundaries on fine grid
possible, and is also necessary when there are multiple grid patches.
Started to add support for arbitrariliy many user-specified refinement
regions. Not yet finished.
The Carpet driver can now handle multiple grid patches.
Added example files for multiple grid patches. They use initial data
that does not "fit" the boundary conditions, and they don't use
multiple refinement levels so far.
Removed old and unused example files in CarpetLib.
darcs-hash:20020311121709-07bb3-18594c42bd7a958ee0840d29e158a343208f5711.gz
23 files changed, 563 insertions, 244 deletions
diff --git a/Carpet/Carpet/param.ccl b/Carpet/Carpet/param.ccl index 0d8456037..962f84d8e 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.17 2002/01/11 17:58:47 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/param.ccl,v 1.18 2002/03/11 13:17:09 schnetter Exp $ shares: Cactus @@ -98,6 +98,40 @@ CCTK_INT prolongation_order_time "Order of prolongation operator in time" +CCTK_STRING base_extents "Extents of base grid components, in grid point units of the finest level" +{ + "^$" :: "leave empty for one grid component covering the whole region (default)" +# We want the string to contain a list of bboxes. Each bbox contains +# three vectors specifying the lower bound, upper bound, and stride. +# (The upper bound is inclusive. All values are nonnegative integers.) +# The syntax for vectors, bboxes, and lists is described below. +# All spaces are optional. +# The () parentheses and [] brackets are literals. +# The {} braces are used for grouping. +# If you put everything together, you get the tapeworm below. +# There should be a way to define abbreviations in regexps! +# Having #defines in param.ccl files would help a lot. +# VECT := " [ 0 , 0 , 0 ]" +# BBOX := " (VECT :VECT :VECT )" +# LIST := " [{{BBOX ,}*BBOX}? ]" + "^\[(([[:space:]]*\([[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*:[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*:[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*\)[[:space:]]*,)*[[:space:]]*\([[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*:[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*:[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*\))?[[:space:]]*\]$" :: "[ ([<imin>,<jmin>,<kmin>]:[<imax>,<jmax>,<kmax>]:[<istride>,<jstride>,<kstride>]), ... ]" +} "" + +CCTK_STRING base_bboxes "Bounding boxes of base grid components" +{ + "^$" :: "leave empty for using the default, which depends on cctk_gsh" +# See above for an explanation of this syntax, and of the tapeworm below. +# Each vector element is 0 or 1, +# where 0 is handled by synchronisation or prolongation, +# and 1 stands for a user-supplied ("outer") boundary condition. +# BND := " [ 0 , 0 ]" +# VECT := " [ BND , BND , BND ]" +# LIST := " [{{VECT ,}*VECT}? ]" + "^\[(([[:space:]]*\[[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*\][[:space:]]*,)*[[:space:]]*\[[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*\])?[[:space:]]*\]$" :: "[ [ [<ilower>,<iupper>], [<jlower>,<jupper>], [<klower>,<kupper>] ], ... ]" +} "" + + + BOOLEAN enable_all_storage "Enable storage for all grid functions" { } "no" diff --git a/Carpet/Carpet/src/Recompose.cc b/Carpet/Carpet/src/Recompose.cc index 12277aa99..ec3c65047 100644 --- a/Carpet/Carpet/src/Recompose.cc +++ b/Carpet/Carpet/src/Recompose.cc @@ -21,7 +21,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Recompose.cc,v 1.20 2002/01/30 16:07:58 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Recompose.cc,v 1.21 2002/03/11 13:17:10 schnetter Exp $"; @@ -31,13 +31,22 @@ namespace Carpet { + typedef vect<int,dim> ivect; + typedef bbox<int,dim> ibbox; + + typedef vect<vect<bool,2>,dim> bvect; + + + static int (*regrid_routine) (const cGH * cckgGH, gh<dim>::rexts& bbsss, + gh<dim>::rbnds& obss, gh<dim>::rprocs& pss) = 0; static void CheckRegions (const gh<dim>::rexts& bbsss, + const gh<dim>::rbnds& obss, const gh<dim>::rprocs& pss); static void Adapt (const cGH* cgh, int reflevels, gh<dim>* hh); @@ -45,14 +54,17 @@ namespace Carpet { static void OutputGridStructure (const cGH *cgh, const gh<dim>::rexts& bbsss, + const gh<dim>::rbnds& obss, const gh<dim>::rprocs& pss); static void SplitRegions_AlongZ (const cGH* cgh, - vector<bbox<int,dim> >& bbs); + vector<ibbox>& bbs, + vector<bvect>& obs); static void SplitRegions_AsSpecified (const cGH* cgh, - vector<bbox<int,dim> >& bbs); + vector<ibbox>& bbs, + vector<bvect>& obs); static void MakeProcessors_RoundRobin (const cGH* cgh, const gh<dim>::rexts& bbss, @@ -60,7 +72,8 @@ namespace Carpet { - void CheckRegions (const gh<dim>::rexts& bbsss, const gh<dim>::rprocs& pss) + void CheckRegions (const gh<dim>::rexts& bbsss, const gh<dim>::rbnds& obss, + const gh<dim>::rprocs& pss) { // At least one level assert (bbsss.size() > 0); @@ -84,7 +97,9 @@ namespace Carpet { } assert (pss.size() == bbsss.size()); + assert (obss.size() == bbsss.size()); for (int rl=0; rl<(int)bbsss.size(); ++rl) { + assert (obss[rl].size() == bbsss[rl].size()); assert (pss[rl].size() == bbsss[rl].size()); } } @@ -93,6 +108,7 @@ namespace Carpet { void RegisterRegridRoutine (int (*routine)(const cGH * cckgGH, gh<dim>::rexts& bbsss, + gh<dim>::rbnds& obss, gh<dim>::rprocs& pss)) { assert (!regrid_routine); @@ -113,30 +129,32 @@ namespace Carpet { // Check whether to recompose gh<dim>::rexts bbsss; + gh<dim>::rbnds obss; gh<dim>::rprocs pss; - int do_recompose = (*regrid_routine) (cgh, bbsss, pss); + int do_recompose = (*regrid_routine) (cgh, bbsss, obss, pss); assert (do_recompose >= 0); if (do_recompose == 0) return; - Recompose (cgh, bbsss, pss); + Recompose (cgh, bbsss, obss, pss); } void Recompose (const cGH* const cgh, const gh<dim>::rexts& bbsss, + const gh<dim>::rbnds& obss, const gh<dim>::rprocs& pss) { assert (mglevel == -1); assert (component == -1); // Check the regions - CheckRegions (bbsss, pss); + CheckRegions (bbsss, obss, pss); // Write grid structure to file - OutputGridStructure (cgh, bbsss, pss); + OutputGridStructure (cgh, bbsss, obss, pss); // Recompose - hh->recompose (bbsss, pss); + hh->recompose (bbsss, obss, pss); Output (cgh, hh, 0); // Adapt grid scalars @@ -151,6 +169,7 @@ namespace Carpet { case CCTK_ARRAY: Adapt (cgh, hh->reflevels(), arrdata[group].hh); Output (cgh, arrdata[group].hh, CCTK_GroupName(group)); + break; case CCTK_GF: break; default: @@ -167,21 +186,21 @@ namespace Carpet { static void Adapt (const cGH* cgh, const int reflevels, gh<dim>* hh) { const int nprocs = CCTK_nProcs(cgh); - vector<vector<bbox<int,dim> > > bbss(reflevels); + vector<vector<ibbox> > bbss(reflevels); // note: what this routine calls "ub" is "ub+str" elsewhere - vect<int,dim> rstr = hh->baseextent.stride(); - vect<int,dim> rlb = hh->baseextent.lower(); - vect<int,dim> rub = hh->baseextent.upper() + rstr; + ivect rstr = hh->baseextent.stride(); + ivect rlb = hh->baseextent.lower(); + ivect rub = hh->baseextent.upper() + rstr; for (int rl=0; rl<reflevels; ++rl) { if (rl>0) { // save old values - const vect<int,dim> oldrlb = rlb; - const vect<int,dim> oldrub = rub; + const ivect oldrlb = rlb; + const ivect oldrub = rub; // calculate extent - const vect<int,dim> rextent = rub - rlb; + const ivect rextent = rub - rlb; // calculate new extent assert (all(rextent % hh->reffact == 0)); - const vect<int,dim> newrextent = rextent / hh->reffact; + const ivect newrextent = rextent / hh->reffact; // refined boxes have smaller stride assert (all(rstr%hh->reffact == 0)); rstr /= hh->reffact; @@ -191,11 +210,12 @@ namespace Carpet { // require rub<oldrub because we really want rub-rstr<=oldrub-oldstr assert (all(rlb >= oldrlb && rub < oldrub)); } - vector<bbox<int,dim> > bbs(nprocs); + vector<ibbox> bbs(nprocs); for (int c=0; c<nprocs; ++c) { - vect<int,dim> cstr = rstr; - vect<int,dim> clb = rlb; - vect<int,dim> cub = rub; + ivect cstr = rstr; + ivect clb = rlb; + ivect cub = rub; + // split the components along the z axis const int glonpz = (rub[dim-1] - rlb[dim-1]) / cstr[dim-1]; const int locnpz = (glonpz + nprocs - 1) / nprocs; const int zstep = locnpz * cstr[dim-1]; @@ -205,7 +225,7 @@ namespace Carpet { if (cub[dim-1] > rub[dim-1]) cub[dim-1] = rub[dim-1]; assert (clb[dim-1] <= cub[dim-1]); assert (cub[dim-1] <= rub[dim-1]); - bbs[c] = bbox<int,dim>(clb, cub-cstr, cstr); + bbs[c] = ibbox(clb, cub-cstr, cstr); } // bbss[rl] = bbs; bbss[rl].clear(); @@ -215,20 +235,28 @@ namespace Carpet { } } - vector<vector<vector<bbox<int,dim> > > > bbsss + vector<vector<vector<ibbox> > > bbsss = hh->make_multigrid_boxes(bbss, mglevels); vector<vector<int> > pss(bbss.size()); + vector<vector<bvect> > obss(bbss.size()); for (int rl=0; rl<reflevels; ++rl) { pss[rl] = vector<int>(bbss[rl].size()); + obss[rl] = vector<bvect>(bbss[rl].size()); // make sure all processors have the same number of components assert (bbss[rl].size() % nprocs == 0); for (int c=0; c<(int)bbss[rl].size(); ++c) { - pss[rl][c] = c % nprocs; // distribute among processors + // distribute among processors + pss[rl][c] = c % nprocs; + for (int d=0; d<dim; ++d) { + // assume the components are split along the z axis + obss[rl][c][d][0] = d<dim-1 || c==0; + obss[rl][c][d][1] = d<dim-1 || c==(int)bbss[rl].size()-1; + } } } - hh->recompose(bbsss, pss); + hh->recompose(bbsss, obss, pss); } @@ -284,6 +312,7 @@ namespace Carpet { static void OutputGridStructure (const cGH * const cgh, const gh<dim>::rexts& bbsss, + const gh<dim>::rbnds& obss, const gh<dim>::rprocs& pss) { DECLARE_CCTK_PARAMETERS; @@ -309,7 +338,7 @@ namespace Carpet { file.open (filename, ios::out | ios::trunc); assert (file.good()); file << "# grid structure" << endl - << "# format: reflevel component mglevel processor bounding-box" << endl; + << "# format: reflevel component mglevel processor bounding-box is-outer-boundary" << endl; assert (file.good()); } } @@ -325,7 +354,7 @@ namespace Carpet { for (int c=0; c<(int)bbsss[rl].size(); ++c) { file << rl << " " << c << " mglevels " << bbsss[rl][c].size() << endl; for (int ml=0; ml<(int)bbsss[rl][c].size(); ++ml) { - file << rl << " " << c << " " << ml << " " << pss[rl][c] << " " << bbsss[rl][c][ml] << endl; + file << rl << " " << c << " " << ml << " " << pss[rl][c] << " " << bbsss[rl][c][ml] << obss[rl][c] << endl; } } } @@ -337,14 +366,14 @@ namespace Carpet { - void SplitRegions (const cGH* cgh, vector<bbox<int,dim> >& bbs) + void SplitRegions (const cGH* cgh, vector<ibbox>& bbs, vector<bvect>& obs) { DECLARE_CCTK_PARAMETERS; if (CCTK_EQUALS (processor_topology, "automatic")) { - SplitRegions_AlongZ (cgh, bbs); + SplitRegions_AlongZ (cgh, bbs, obs); } else if (CCTK_EQUALS (processor_topology, "manual")) { - SplitRegions_AsSpecified (cgh, bbs); + SplitRegions_AsSpecified (cgh, bbs, obs); } else { abort(); } @@ -352,7 +381,8 @@ namespace Carpet { - void SplitRegions_AlongZ (const cGH* cgh, vector<bbox<int,dim> >& bbs) + void SplitRegions_AlongZ (const cGH* cgh, vector<ibbox>& bbs, + vector<bvect>& obs) { // Something to do? if (bbs.size() == 0) return; @@ -363,15 +393,17 @@ namespace Carpet { assert (bbs.size() == 1); - const vect<int,dim> rstr = bbs[0].stride(); - const vect<int,dim> rlb = bbs[0].lower(); - const vect<int,dim> rub = bbs[0].upper() + rstr; + const ivect rstr = bbs[0].stride(); + const ivect rlb = bbs[0].lower(); + const ivect rub = bbs[0].upper() + rstr; + const bvect obnd = obs[0]; bbs.resize(nprocs); + obs.resize(nprocs); for (int c=0; c<nprocs; ++c) { - vect<int,dim> cstr = rstr; - vect<int,dim> clb = rlb; - vect<int,dim> cub = rub; + ivect cstr = rstr; + ivect clb = rlb; + ivect cub = rub; const int glonpz = (rub[dim-1] - rlb[dim-1]) / cstr[dim-1]; const int locnpz = (glonpz + nprocs - 1) / nprocs; const int zstep = locnpz * cstr[dim-1]; @@ -381,13 +413,17 @@ namespace Carpet { if (cub[dim-1] > rub[dim-1]) cub[dim-1] = rub[dim-1]; assert (clb[dim-1] <= cub[dim-1]); assert (cub[dim-1] <= rub[dim-1]); - bbs[c] = bbox<int,dim>(clb, cub-cstr, cstr); + bbs[c] = ibbox(clb, cub-cstr, cstr); + obs[c] = obnd; + if (c>0) obs[c][dim-1][0] = false; + if (c<nprocs-1) obs[c][dim-1][1] = false; } } - void SplitRegions_AsSpecified (const cGH* cgh, vector<bbox<int,dim> >& bbs) + void SplitRegions_AsSpecified (const cGH* cgh, vector<ibbox>& bbs, + vector<bvect>& obs) { DECLARE_CCTK_PARAMETERS; @@ -400,11 +436,12 @@ namespace Carpet { assert (bbs.size() == 1); - const vect<int,dim> rstr = bbs[0].stride(); - const vect<int,dim> rlb = bbs[0].lower(); - const vect<int,dim> rub = bbs[0].upper() + rstr; + const ivect rstr = bbs[0].stride(); + const ivect rlb = bbs[0].lower(); + const ivect rub = bbs[0].upper() + rstr; + const bvect obnd = obs[0]; - const vect<int,dim> nprocs_dir + const ivect nprocs_dir (processor_topology_3d_x, processor_topology_3d_y, processor_topology_3d_z); assert (all (nprocs_dir > 0)); @@ -415,25 +452,33 @@ namespace Carpet { assert (prod(nprocs_dir) == nprocs); bbs.resize(nprocs); + obs.resize(nprocs); assert (dim==3); for (int k=0; k<nprocs_dir[2]; ++k) { for (int j=0; j<nprocs_dir[1]; ++j) { for (int i=0; i<nprocs_dir[0]; ++i) { const int c = i + nprocs_dir[0] * (j + nprocs_dir[1] * k); - const vect<int,dim> ipos (i, j, k); - vect<int,dim> cstr = rstr; - vect<int,dim> clb = rlb; - vect<int,dim> cub = rub; - const vect<int,dim> glonp = (rub - rlb) / cstr; - const vect<int,dim> locnp = (glonp + nprocs_dir - 1) / nprocs_dir; - const vect<int,dim> step = locnp * cstr; + const ivect ipos (i, j, k); + ivect cstr = rstr; + ivect clb = rlb; + ivect cub = rub; + const ivect glonp = (rub - rlb) / cstr; + const ivect locnp = (glonp + nprocs_dir - 1) / nprocs_dir; + const ivect step = locnp * cstr; clb = rlb + step * ipos; cub = rlb + step * (ipos+1); clb = min (clb, rub); cub = min (cub, rub); assert (all (clb <= cub)); assert (all (cub <= rub)); - bbs[c] = bbox<int,dim>(clb, cub-cstr, cstr); + bbs[c] = ibbox(clb, cub-cstr, cstr); + obs[c] = obnd; + if (i>0) obs[c][0][0] = false; + if (j>0) obs[c][1][0] = false; + if (k>0) obs[c][2][0] = false; + if (i<nprocs_dir[0]-1) obs[c][0][1] = false; + if (j<nprocs_dir[1]-1) obs[c][1][1] = false; + if (k<nprocs_dir[2]-1) obs[c][2][1] = false; } } } diff --git a/Carpet/Carpet/src/SetupGH.cc b/Carpet/Carpet/src/SetupGH.cc index 1bf19f64f..2fa0faf72 100644 --- a/Carpet/Carpet/src/SetupGH.cc +++ b/Carpet/Carpet/src/SetupGH.cc @@ -1,6 +1,9 @@ #include <assert.h> -#include <iostream.h> #include <stdlib.h> +#include <string.h> + +#include <iostream> +#include <sstream> #include "cctk.h" #include "cctk_Parameters.h" @@ -12,7 +15,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.23 2002/01/14 16:40:45 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.24 2002/03/11 13:17:10 schnetter Exp $"; @@ -246,14 +249,34 @@ namespace Carpet { mglevel = -1; component = -1; - // Invent a refinement structure - vector<bbox<int,dim> > bbs(1); - bbs[0] = hh->baseextent; + // Set initial refinement structure + vector<bbox<int,dim> > bbs; + vector<vect<vect<bool,2>,dim> > obs; + if (strcmp(base_extents, "")==0) { + // default: one grid component covering everything + bbs.push_back (hh->baseextent); + obs.push_back (vect<vect<bool,2>,dim>(vect<bool,2>(true))); + } else { + // explicit grid components + istringstream istr (base_extents); + istr >> bbs; + CCTK_VInfo (CCTK_THORNSTRING, "Using %d grid patches", bbs.size()); + cout << "grid-patches-are " << bbs << endl; + if (bbs.size()<=0) { + CCTK_WARN (0, "Cannot evolve with 0 grid patches"); + } + istringstream istr2 (base_bboxes); + istr2 >> obs; + cout << "outer-boundaries-are " << obs << endl; + assert (obs.size() == bbs.size()); + } - SplitRegions (cgh, bbs); + SplitRegions (cgh, bbs, obs); vector<vector<bbox<int,dim> > > bbss(1); + vector<vector<vect<vect<bool,2>,dim> > > obss(1); bbss[0] = bbs; + obss[0] = obs; gh<dim>::rexts bbsss; bbsss = hh->make_multigrid_boxes(bbss, mglevels); @@ -262,7 +285,7 @@ namespace Carpet { MakeProcessors (cgh, bbsss, pss); // Recompose grid hierarchy - Recompose (cgh, bbsss, pss); + Recompose (cgh, bbsss, obss, pss); // Initialise time step on coarse grid base_delta_time = 0; diff --git a/Carpet/Carpet/src/carpet.hh b/Carpet/Carpet/src/carpet.hh index f8803ae10..6fded25f4 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.15 2002/01/11 17:19:46 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet.hh,v 1.16 2002/03/11 13:17:10 schnetter Exp $ #include "Carpet/CarpetLib/src/gh.hh" @@ -12,6 +12,7 @@ namespace Carpet { void Recompose (const cGH* cgh, const gh<dim>::rexts& bbsss, + const gh<dim>::rbnds& obss, const gh<dim>::rprocs& pss); enum checktimes { currenttime, diff --git a/Carpet/Carpet/src/carpet_public.hh b/Carpet/Carpet/src/carpet_public.hh index b2bf7e8bb..b628dd78c 100644 --- a/Carpet/Carpet/src/carpet_public.hh +++ b/Carpet/Carpet/src/carpet_public.hh @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.hh,v 1.16 2002/01/11 17:19:46 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.hh,v 1.17 2002/03/11 13:17:11 schnetter Exp $ // It is assumed that the number of components of all arrays is equal // to the number of components of the grid functions, and that their @@ -139,9 +139,11 @@ namespace Carpet { // Functions for recomposing the grid hierarchy void RegisterRegridRoutine (int (*routine)(const cGH * cckgGH, gh<dim>::rexts& bbsss, + gh<dim>::rbnds& obss, gh<dim>::rprocs& pss)); - void SplitRegions (const cGH* cgh, vector<bbox<int,dim> >& bbs); + void SplitRegions (const cGH* cgh, vector<bbox<int,dim> >& bbs, + vector<vect<vect<bool,2>,dim> >& obs); void MakeProcessors (const cGH* cgh, const gh<dim>::rexts& bbsss, gh<dim>::rprocs& pss); diff --git a/Carpet/Carpet/src/helpers.cc b/Carpet/Carpet/src/helpers.cc index b412214fc..a2046a198 100644 --- a/Carpet/Carpet/src/helpers.cc +++ b/Carpet/Carpet/src/helpers.cc @@ -12,7 +12,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/helpers.cc,v 1.18 2002/01/14 15:56:02 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/helpers.cc,v 1.19 2002/03/11 13:17:11 schnetter Exp $"; @@ -320,8 +320,6 @@ namespace Carpet { assert (reflevel < (int)dd->boxes.size()); assert (component < (int)dd->boxes[reflevel].size()); assert (mglevel < (int)dd->boxes[reflevel][component].size()); - const bbox<int,dim>& bext = hh->baseextent; - const bbox<int,dim>& iext = hh->extents[reflevel][component][mglevel]; const bbox<int,dim>& ext = dd->boxes[reflevel][component][mglevel].exterior; for (int d=0; d<dim; ++d) { @@ -332,16 +330,8 @@ namespace Carpet { // assert (cgh->cctk_lbnd[d]>=0 && cgh->cctk_ubnd[d]<cgh->cctk_gsh[d]); assert (cgh->cctk_ubnd[d]-cgh->cctk_lbnd[d]+1 == cgh->cctk_lsh[d]); assert (cgh->cctk_lbnd[d]<=cgh->cctk_ubnd[d]+1); - // Do not allow outer boundaries on the finer grids - if (reflevel==0) { - assert (iext.lower()[d] >= bext.lower()[d]); - assert (iext.upper()[d] <= bext.upper()[d]); - cgh->cctk_bbox[2*d ] = iext.lower()[d] == bext.lower()[d]; - cgh->cctk_bbox[2*d+1] = iext.upper()[d] == bext.upper()[d]; - } else { - cgh->cctk_bbox[2*d ] = 0; - cgh->cctk_bbox[2*d+1] = 0; - } + cgh->cctk_bbox[2*d ] = hh->outer_boundaries[reflevel][component][d][0]; + cgh->cctk_bbox[2*d+1] = hh->outer_boundaries[reflevel][component][d][1]; for (int stg=0; stg<CCTK_NSTAGGER; ++stg) { // TODO: support staggering cgh->cctk_lssh[CCTK_LSSH_IDX(stg,d)] = cgh->cctk_lsh[d]; diff --git a/Carpet/CarpetLib/src/bbox.cc b/Carpet/CarpetLib/src/bbox.cc index 337857826..27c1e784f 100644 --- a/Carpet/CarpetLib/src/bbox.cc +++ b/Carpet/CarpetLib/src/bbox.cc @@ -5,7 +5,7 @@ copyright : (C) 2000 by Erik Schnetter email : schnetter@astro.psu.edu - $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/bbox.cc,v 1.7 2001/07/02 13:22:11 schnetter Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/bbox.cc,v 1.8 2002/03/11 13:17:12 schnetter Exp $ ***************************************************************************/ @@ -225,6 +225,28 @@ bbox<T,D>::iterator bbox<T,D>::end () const { +// Input +template<class T,int D> +void bbox<T,D>::input (istream& is) { + skipws (is); + assert (is.peek() == '('); + is.get(); + is >> _lower; + skipws (is); + assert (is.peek() == ':'); + is.get(); + is >> _upper; + skipws (is); + assert (is.peek() == ':'); + is.get(); + is >> _stride; + skipws (is); + assert (is.peek() == ')'); + is.get(); +} + + + // Output template<class T,int D> void bbox<T,D>::output (ostream& os) const { diff --git a/Carpet/CarpetLib/src/bbox.hh b/Carpet/CarpetLib/src/bbox.hh index 160748f27..04db295db 100644 --- a/Carpet/CarpetLib/src/bbox.hh +++ b/Carpet/CarpetLib/src/bbox.hh @@ -5,7 +5,7 @@ copyright : (C) 2000 by Erik Schnetter email : schnetter@astro.psu.edu - $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/bbox.hh,v 1.8 2001/03/27 22:26:31 eschnett Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/bbox.hh,v 1.9 2002/03/11 13:17:12 schnetter Exp $ ***************************************************************************/ @@ -33,7 +33,9 @@ using namespace std; // Forward declaration template<class T, int D> class bbox; -// Output +// Input/Output +template<class T, int D> +istream& operator>> (istream& is, bbox<T,D>& b); template<class T, int D> ostream& operator<< (ostream& os, const bbox<T,D>& b); @@ -116,12 +118,22 @@ public: iterator begin () const; iterator end () const; - // Output + // Input/Output + void input (istream& is); void output (ostream& os) const; }; +// Input +template<class T,int D> +inline istream& operator>> (istream& is, bbox<T,D>& b) { + b.input(is); + return is; +} + + + // Output template<class T,int D> inline ostream& operator<< (ostream& os, const bbox<T,D>& b) { diff --git a/Carpet/CarpetLib/src/defs.cc b/Carpet/CarpetLib/src/defs.cc index f862195d3..5a913beb0 100644 --- a/Carpet/CarpetLib/src/defs.cc +++ b/Carpet/CarpetLib/src/defs.cc @@ -5,7 +5,7 @@ copyright : (C) 2000 by Erik Schnetter email : schnetter@astro.psu.edu - $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/defs.cc,v 1.8 2001/08/26 13:59:31 schnetter Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/defs.cc,v 1.9 2002/03/11 13:17:12 schnetter Exp $ ***************************************************************************/ @@ -19,6 +19,7 @@ ***************************************************************************/ #include <assert.h> +#include <ctype.h> #include <iostream> #include <list> @@ -33,6 +34,38 @@ using namespace std; +void skipws (istream& is) { + while (is.good() && isspace(is.peek())) { + is.get(); + } +} + + + +// Vector input +template<class T> +istream& input (istream& is, vector<T>& v) { + v.clear(); + skipws (is); + assert (is.peek() == '['); + is.get(); + skipws (is); + while (is.good() && is.peek() != ']') { + v.push_back (); + is >> v[v.size()-1]; + skipws (is); + if (is.peek() != ',') break; + is.get(); + skipws (is); + } + skipws (is); + assert (is.peek() == ']'); + is.get(); + return is; +} + + + // List output template<class T> ostream& output (ostream& os, const list<T>& l) { @@ -76,6 +109,10 @@ ostream& output (ostream& os, const vector<T>& v) { #include "bbox.hh" #include "bboxset.hh" +template istream& input (istream& os, vector<bbox<int,3> >& v); +template istream& input (istream& os, vector<vector<bbox<int,3> > >& v); +template istream& input (istream& os, vector<vector<vect<vect<bool,2>,3> > >& v); + template ostream& output (ostream& os, const list<bbox<int,3> >& l); template ostream& output (ostream& os, const set<bbox<int,3> >& s); template ostream& output (ostream& os, const set<bboxset<int,3> >& s); @@ -84,5 +121,6 @@ template ostream& output (ostream& os, const vector<bbox<int,3> >& v); template ostream& output (ostream& os, const vector<list<bbox<int,3> > >& v); template ostream& output (ostream& os, const vector<vector<int> >& v); template ostream& output (ostream& os, const vector<vector<bbox<int,3> > >& v); +template ostream& output (ostream& os, const vector<vector<vect<vect<bool,2>,3> > >& v); template ostream& output (ostream& os, const vector<vector<vector<bbox<int,3> > > >& v); #endif diff --git a/Carpet/CarpetLib/src/defs.hh b/Carpet/CarpetLib/src/defs.hh index a85b164c1..8f1810bcb 100644 --- a/Carpet/CarpetLib/src/defs.hh +++ b/Carpet/CarpetLib/src/defs.hh @@ -5,7 +5,7 @@ copyright : (C) 2000 by Erik Schnetter email : schnetter@astro.psu.edu - $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/defs.hh,v 1.6 2002/01/09 13:56:26 schnetter Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/defs.hh,v 1.7 2002/03/11 13:17:13 schnetter Exp $ ***************************************************************************/ @@ -62,6 +62,23 @@ inline T ipow (const T& x, const int y) { } } + + +// Skip whitespace +void skipws (istream& is); + + + +// Container input +template<class T> istream& input (istream& is, vector<T>& v); + +template<class T> +inline istream& operator>> (istream& is, vector<T>& v) { + return input(is,v); +} + + + // Container output template<class T> ostream& output (ostream& os, const list<T>& l); template<class T> ostream& output (ostream& os, const set<T>& s); diff --git a/Carpet/CarpetLib/src/gh.cc b/Carpet/CarpetLib/src/gh.cc index 95bf16350..c0cd6df08 100644 --- a/Carpet/CarpetLib/src/gh.cc +++ b/Carpet/CarpetLib/src/gh.cc @@ -7,7 +7,7 @@ copyright : (C) 2000 by Erik Schnetter email : schnetter@astro.psu.edu - $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gh.cc,v 1.11 2002/01/09 13:56:27 schnetter Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gh.cc,v 1.12 2002/03/11 13:17:13 schnetter Exp $ ***************************************************************************/ @@ -52,8 +52,10 @@ gh<D>::~gh () { } // Modifiers template<int D> -void gh<D>::recompose (const rexts& exts, const rprocs& procs) { +void gh<D>::recompose (const rexts& exts, const rbnds& outer_bounds, + const rprocs& procs) { extents = exts; + outer_boundaries = outer_bounds; processors = procs; // Consistency checks @@ -63,8 +65,10 @@ void gh<D>::recompose (const rexts& exts, const rprocs& procs) { // Check processor number consistency for (int rl=0; rl<reflevels(); ++rl) { assert (processors.size() == extents.size()); + assert (outer_boundaries.size() == extents.size()); for (int c=0; c<components(rl); ++c) { - assert (procs[rl].size() == extents[rl].size()); + assert (processors[rl].size() == extents[rl].size()); + assert (outer_boundaries[rl].size() == extents[rl].size()); } } diff --git a/Carpet/CarpetLib/src/gh.hh b/Carpet/CarpetLib/src/gh.hh index 4748fb1de..a1f917f95 100644 --- a/Carpet/CarpetLib/src/gh.hh +++ b/Carpet/CarpetLib/src/gh.hh @@ -7,7 +7,7 @@ copyright : (C) 2000 by Erik Schnetter email : schnetter@astro.psu.edu - $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gh.hh,v 1.8 2001/12/14 16:39:43 schnetter Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gh.hh,v 1.9 2002/03/11 13:17:13 schnetter Exp $ ***************************************************************************/ @@ -56,19 +56,26 @@ public: typedef vect<int,D> ivect; typedef bbox<int,D> ibbox; - typedef vector<ibbox> mexts; // ... for each multigrid level - typedef vector<mexts> cexts; // ... for each component - typedef vector<cexts> rexts; // ... for each refinement level + typedef vect<vect<bool,2>,D> bvect; - typedef vector<int> cprocs; // ... for each component - typedef vector<cprocs> rprocs; // ... for each refinement level + typedef vector<ibbox> mexts; // ... for each multigrid level + typedef vector<mexts> cexts; // ... for each component + typedef vector<cexts> rexts; // ... for each refinement level + + typedef vector<bvect> cbnds; // ... for each component + typedef vector<cbnds> rbnds; // ... for each refinement level + + typedef vector<int> cprocs; // ... for each component + typedef vector<cprocs> rprocs; // ... for each refinement level public: // should be readonly ibbox baseextent; // bounds (inclusive) of base level vector<vector<ibbox> > bases; // [rl][ml] - rexts extents; // bounds of all grids + // TODO: invent structure for this + rexts extents; // extents of all grids + rbnds outer_boundaries; // boundary descriptions of all grids rprocs processors; // processor numbers of all grids list<dh<D>*> dhs; // list of all data hierarchies @@ -84,7 +91,8 @@ public: virtual ~gh (); // Modifiers - void recompose (const rexts& exts, const rprocs& procs); + void recompose (const rexts& exts, const rbnds& outer_bounds, + const rprocs& procs); // Helpers cexts make_reflevel_multigrid_boxes (const vector<ibbox>& exts, @@ -110,6 +118,12 @@ public: return (int)extents[rl][c].size(); } + bvect outer_boundary (const int rl, const int c) const { + assert (rl>=0 && rl<reflevels()); + assert (c>=0 && c<components(rl)); + return outer_boundaries[rl][c]; + } + int proc (const int rl, const int c) const { assert (rl>=0 && rl<reflevels()); assert (c>=0 && c<components(rl)); diff --git a/Carpet/CarpetLib/src/vect.cc b/Carpet/CarpetLib/src/vect.cc index 132e37afa..85a608ee9 100644 --- a/Carpet/CarpetLib/src/vect.cc +++ b/Carpet/CarpetLib/src/vect.cc @@ -5,7 +5,7 @@ copyright : (C) 2000 by Erik Schnetter email : schnetter@astro.psu.edu - $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/vect.cc,v 1.6 2002/01/08 12:03:55 schnetter Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/vect.cc,v 1.7 2002/03/11 13:17:13 schnetter Exp $ ***************************************************************************/ @@ -32,13 +32,34 @@ using namespace std; +// Input +template<class T,int D> +void vect<T,D>::input (istream& is) { + skipws (is); + assert (is.peek() == '['); + is.get(); + for (int d=0; d<D; ++d) { + is >> (*this)[d]; + if (d<D-1) { + skipws (is); + assert (is.peek() == ','); + is.get(); + } + } + skipws (is); + assert (is.peek() == ']'); + is.get(); +} + + + // Output template<class T,int D> void vect<T,D>::output (ostream& os) const { os << "["; for (int d=0; d<D; ++d) { - if (d>0) os << ","; os << (*this)[d]; + if (d<D-1) os << ","; } os << "]"; } @@ -52,6 +73,9 @@ template class vect<int,1>; template class vect<int,2>; template class vect<int,3>; +template void vect<double,3>::input (istream& is); +template void vect<vect<bool,2>,3>::input (istream& is); template void vect<double,3>::output (ostream& os) const; +template void vect<vect<bool,2>,3>::output (ostream& os) const; #endif diff --git a/Carpet/CarpetLib/src/vect.hh b/Carpet/CarpetLib/src/vect.hh index f53038741..beee9608d 100644 --- a/Carpet/CarpetLib/src/vect.hh +++ b/Carpet/CarpetLib/src/vect.hh @@ -5,7 +5,7 @@ copyright : (C) 2000 by Erik Schnetter email : schnetter@astro.psu.edu - $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/vect.hh,v 1.8 2002/01/09 17:45:42 schnetter Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/vect.hh,v 1.9 2002/03/11 13:17:13 schnetter Exp $ ***************************************************************************/ @@ -33,7 +33,9 @@ using namespace std; // Forward definition template<class T, int D> class vect; -// Output +// Input/Output +template<class T,int D> +istream& operator>> (istream& is, vect<T,D>& a); template<class T,int D> ostream& operator<< (ostream& os, const vect<T,D>& a); @@ -444,6 +446,8 @@ public: return r; } + // Input/Output + void input (istream& is); void output (ostream& os) const; }; @@ -598,6 +602,16 @@ inline vect<TT,D> scan1 (TT (* const func)(TT val, T x), TT val, +// Input +template<class T,int D> +inline istream& operator>> (istream& is, vect<T,D>& a) { + a.input(is); + return is; +} + + + +// Output template<class T,int D> inline ostream& operator<< (ostream& os, const vect<T,D>& a) { a.output(os); diff --git a/Carpet/CarpetReduce/src/reduce.cc b/Carpet/CarpetReduce/src/reduce.cc index 4cff31380..16b48fd88 100644 --- a/Carpet/CarpetReduce/src/reduce.cc +++ b/Carpet/CarpetReduce/src/reduce.cc @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/reduce.cc,v 1.4 2002/03/06 17:46:15 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/reduce.cc,v 1.5 2002/03/11 13:17:14 schnetter Exp $ #include <assert.h> #include <limits.h> @@ -17,7 +17,7 @@ #include "reduce.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/reduce.cc,v 1.4 2002/03/06 17:46:15 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/reduce.cc,v 1.5 2002/03/11 13:17:14 schnetter Exp $"; @@ -41,7 +41,7 @@ namespace CarpetReduce { // Poor man's RTTI enum ared { do_count, do_minimum, do_maximum, do_sum, do_sum_abs, - do_average, do_norm1, do_norm2, do_norm_inf }; + do_sum_squared, do_average, do_norm1, do_norm2, do_norm_inf }; @@ -174,6 +174,18 @@ namespace CarpetReduce { MPI_Op mpi_op () const { return MPI_SUM; } }; + struct sum_squared : reduction { + ared thered () const { return do_sum_squared; } + bool uses_cnt () const { return false; } + template<class T> + struct op { + static inline void initialise (T& accum) { accum = 0; } + static inline void reduce (T& accum, const T& val) { accum += val*val; } + static inline void finalise (T& accum, const T& cnt) { } + }; + MPI_Op mpi_op () const { return MPI_SUM; } + }; + struct average : reduction { ared thered () const { return do_average; } bool uses_cnt () const { return true; } @@ -302,6 +314,7 @@ namespace CarpetReduce { INITIALISE(maximum,T); \ INITIALISE(sum,T); \ INITIALISE(sum_abs,T); \ + INITIALISE(sum_squared,T); \ INITIALISE(average,T); \ INITIALISE(norm1,T); \ INITIALISE(norm2,T); \ @@ -373,6 +386,7 @@ namespace CarpetReduce { REDUCE(maximum,T); \ REDUCE(sum,T); \ REDUCE(sum_abs,T); \ + REDUCE(sum_squared,T); \ REDUCE(average,T); \ REDUCE(norm1,T); \ REDUCE(norm2,T); \ @@ -460,6 +474,7 @@ namespace CarpetReduce { FINALISE(maximum,T); \ FINALISE(sum,T); \ FINALISE(sum_abs,T); \ + FINALISE(sum_squared,T); \ FINALISE(average,T); \ FINALISE(norm1,T); \ FINALISE(norm2,T); \ @@ -671,6 +686,7 @@ namespace CarpetReduce { REDUCTION(maximum); REDUCTION(sum); REDUCTION(sum_abs); + REDUCTION(sum_squared); REDUCTION(average); REDUCTION(norm1); REDUCTION(norm2); @@ -682,25 +698,27 @@ namespace CarpetReduce { int CarpetReduceStartup () { - CCTK_RegisterReductionOperator (count_GVs, "count"); - CCTK_RegisterReductionOperator (minimum_GVs, "minimum"); - CCTK_RegisterReductionOperator (maximum_GVs, "maximum"); - CCTK_RegisterReductionOperator (sum_GVs, "sum"); - CCTK_RegisterReductionOperator (sum_abs_GVs, "sum_abs"); - CCTK_RegisterReductionOperator (average_GVs, "average"); - CCTK_RegisterReductionOperator (norm1_GVs, "norm1"); - CCTK_RegisterReductionOperator (norm2_GVs, "norm2"); - CCTK_RegisterReductionOperator (norm_inf_GVs, "norm_inf"); - - CCTK_RegisterReductionArrayOperator (count_arrays, "count"); - CCTK_RegisterReductionArrayOperator (minimum_arrays, "minimum"); - CCTK_RegisterReductionArrayOperator (maximum_arrays, "maximum"); - CCTK_RegisterReductionArrayOperator (sum_arrays, "sum"); - CCTK_RegisterReductionArrayOperator (sum_abs_arrays, "sum_abs"); - CCTK_RegisterReductionArrayOperator (average_arrays, "average"); - CCTK_RegisterReductionArrayOperator (norm1_arrays, "norm1"); - CCTK_RegisterReductionArrayOperator (norm2_arrays, "norm2"); - CCTK_RegisterReductionArrayOperator (norm_inf_arrays, "norm_inf"); + CCTK_RegisterReductionOperator (count_GVs, "count"); + CCTK_RegisterReductionOperator (minimum_GVs, "minimum"); + CCTK_RegisterReductionOperator (maximum_GVs, "maximum"); + CCTK_RegisterReductionOperator (sum_GVs, "sum"); + CCTK_RegisterReductionOperator (sum_abs_GVs, "sum_abs"); + CCTK_RegisterReductionOperator (sum_squared_GVs, "sum_squared"); + CCTK_RegisterReductionOperator (average_GVs, "average"); + CCTK_RegisterReductionOperator (norm1_GVs, "norm1"); + CCTK_RegisterReductionOperator (norm2_GVs, "norm2"); + CCTK_RegisterReductionOperator (norm_inf_GVs, "norm_inf"); + + CCTK_RegisterReductionArrayOperator (count_arrays, "count"); + CCTK_RegisterReductionArrayOperator (minimum_arrays, "minimum"); + CCTK_RegisterReductionArrayOperator (maximum_arrays, "maximum"); + CCTK_RegisterReductionArrayOperator (sum_arrays, "sum"); + CCTK_RegisterReductionArrayOperator (sum_abs_arrays, "sum_abs"); + CCTK_RegisterReductionArrayOperator (sum_squared_arrays, "sum_squared"); + CCTK_RegisterReductionArrayOperator (average_arrays, "average"); + CCTK_RegisterReductionArrayOperator (norm1_arrays, "norm1"); + CCTK_RegisterReductionArrayOperator (norm2_arrays, "norm2"); + CCTK_RegisterReductionArrayOperator (norm_inf_arrays, "norm_inf"); return 0; } diff --git a/Carpet/CarpetRegrid/param.ccl b/Carpet/CarpetRegrid/param.ccl index e6902bc80..951e7949b 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.3 2002/01/11 17:37:13 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/param.ccl,v 1.4 2002/03/11 13:17:15 schnetter Exp $ @@ -25,6 +25,8 @@ KEYWORD refined_regions "Regions where the grid is refined" "centre" :: "Refine around the centre of the grid only" "manual-gridpoints" :: "Refine the regions specified by integer grid points l[123]i[xyz]{min,max}" "manual-coordinates" :: "Refine the regions specified by coordinates l[123][xyz]{min,max}" + "manual-gridpoint-list" :: "" + "manual-coordinate-list" :: "" "automatic" :: "Refine automatically" } "centre" @@ -202,6 +204,24 @@ CCTK_REAL l3zmax "Upper boundary of level 3 box in z-direction" +# Refinement criteria for manual-gridpoint-list + +CCTK_STRING gridpoints "List of bounding box gridpoints" +{ + .* :: "[ [ ([<imin>,<jmin>,<kmin>]:[<imax>,<jmax>,<kmax>]:[<istride>,<jstride>,<kstride>]), ... ], ... ]" +} "" + + + +# Refinement criteria for manual-coordinate-list + +CCTK_STRING coordinates "List of bounding box coordinates" +{ + .* :: "[ [ ([<xmin>,<ymin>,<zmin>]:[<xmax>,<ymax>,<zmax>]:[<xstride>,<ystride>,<zstride>]), ... ], ... ]" +} "" + + + # Refinement criteria for automatic refining CCTK_INT minwidth "Minimum width of refined region" diff --git a/Carpet/CarpetRegrid/src/regrid.cc b/Carpet/CarpetRegrid/src/regrid.cc index 1b0b95d87..ad17ca833 100644 --- a/Carpet/CarpetRegrid/src/regrid.cc +++ b/Carpet/CarpetRegrid/src/regrid.cc @@ -19,7 +19,7 @@ #include "carpet.hh" #include "regrid.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/regrid.cc,v 1.8 2002/03/06 17:47:58 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/regrid.cc,v 1.9 2002/03/11 13:17:15 schnetter Exp $"; @@ -30,6 +30,13 @@ namespace CarpetRegrid { + typedef vect<int,dim> ivect; + typedef bbox<int,dim> ibbox; + + typedef vect<vect<bool,2>,dim> bvect; + + + int CarpetRegridStartup () { RegisterRegridRoutine (CarpetRegridRegrid); @@ -40,6 +47,7 @@ namespace CarpetRegrid { int CarpetRegridRegrid (const cGH * const cctkGH, gh<dim>::rexts& bbsss, + gh<dim>::rbnds& obss, gh<dim>::rprocs& pss) { DECLARE_CCTK_PARAMETERS; @@ -56,9 +64,6 @@ namespace CarpetRegrid { #endif assert (mglevel == -1); - // Return if this is the finest possible level - if (reflevel == maxreflevels-1) return 0; - // Return if we want to regrid during initial data only, and this // is not the time for initial data if (regrid_every == 0 && cctkGH->cctk_iteration != 0) return 0; @@ -69,7 +74,7 @@ namespace CarpetRegrid { return 0; } - list<bbox<int,dim> > bbl; + list<ibbox> bbl; if (CCTK_EQUALS(refined_regions, "none")) { @@ -85,13 +90,13 @@ namespace CarpetRegrid { CCTK_WARN (0, "Cannot currently specify manual refinement regions for more than 4 refinement levels"); } assert (refinement_levels<=4); - vector<vect<int,dim> > lower(3), upper(3); - lower[0] = vect<int,dim> (l1ixmin, l1iymin, l1izmin); - upper[0] = vect<int,dim> (l1ixmax, l1iymax, l1izmax); - lower[1] = vect<int,dim> (l2ixmin, l2iymin, l2izmin); - upper[1] = vect<int,dim> (l2ixmax, l2iymax, l2izmax); - lower[2] = vect<int,dim> (l3ixmin, l3iymin, l3izmin); - upper[2] = vect<int,dim> (l3ixmax, l3iymax, l3izmax); + vector<ivect> lower(3), upper(3); + lower[0] = ivect (l1ixmin, l1iymin, l1izmin); + upper[0] = ivect (l1ixmax, l1iymax, l1izmax); + lower[1] = ivect (l2ixmin, l2iymin, l2izmin); + upper[1] = ivect (l2ixmax, l2iymax, l2izmax); + lower[2] = ivect (l3ixmin, l3iymin, l3izmin); + upper[2] = ivect (l3ixmax, l3iymax, l3izmax); MakeRegions_AsSpecified (cctkGH, refinement_levels, lower, upper, bbl); } else if (CCTK_EQUALS(refined_regions, "manual-coordinates")) { @@ -109,6 +114,14 @@ namespace CarpetRegrid { upper[2] = vect<CCTK_REAL,dim> (l3xmax, l3ymax, l3zmax); MakeRegions_AsSpecified (cctkGH, refinement_levels, lower, upper, bbl); + } else if (CCTK_EQUALS(refined_regions, "manual-gridpoint-list")) { + + abort (); + + } else if (CCTK_EQUALS(refined_regions, "manual-coordinate-list")) { + + abort (); + } else if (CCTK_EQUALS(refined_regions, "automatic")) { const int vi = CCTK_VarIndex (errorvar); @@ -135,9 +148,10 @@ namespace CarpetRegrid { abort(); } - vector<bbox<int,dim> > bbs; + // transform bbox list into bbox vector + vector<ibbox> bbs; bbs.reserve (bbl.size()); - for (list<bbox<int,dim> >::const_iterator it = bbl.begin(); + for (list<ibbox>::const_iterator it = bbl.begin(); it != bbl.end(); ++it) { bbs.push_back (*it); @@ -145,21 +159,40 @@ namespace CarpetRegrid { // TODO: ensure nesting properties - SplitRegions (cctkGH, bbs); + // TODO: set outer boundaries correctly + vector<bvect> obs; + obs.resize (bbs.size()); + for (vector<bvect>::iterator it = obs.begin(); + it != obs.end(); + ++it) { + *it = bvect(vect<bool,2>(false)); + } + + // make multiprocessor aware + SplitRegions (cctkGH, bbs, obs); + // make multigrid aware gh<dim>::cexts bbss; bbss = hh->make_reflevel_multigrid_boxes(bbs, mglevels); + // insert into grid hierarchy bbsss = hh->extents; + obss = hh->outer_boundaries; if (bbss.size() == 0) { + // remove all finer levels // TODO: this might not work bbsss.resize(reflevel+1); + obss.resize(reflevel+1); } else { assert (reflevel < (int)bbsss.size()); if (reflevel+1 == (int)bbsss.size()) { + // add a finer level bbsss.push_back (bbss); + obss.push_back (obs); } else { + // change a finer level bbsss[reflevel+1] = bbss; + obss[reflevel+1] = obs; } } @@ -170,7 +203,7 @@ namespace CarpetRegrid { - void MakeRegions_BaseLevel (const cGH* cctkGH, list<bbox<int,dim> >& bbl) + void MakeRegions_BaseLevel (const cGH* cctkGH, list<ibbox>& bbl) { assert (bbl.empty()); } @@ -181,27 +214,27 @@ namespace CarpetRegrid { // how the hierarchy should be refined. But the result of this // routine is rather arbitrary. void MakeRegions_RefineCentre (const cGH* cctkGH, const int reflevels, - list<bbox<int,dim> >& bbl) + list<ibbox>& bbl) { assert (bbl.empty()); if (reflevel+1 >= reflevels) return; // note: what this routine calls "ub" is "ub+str" elsewhere - vect<int,dim> rstr = hh->baseextent.stride(); - vect<int,dim> rlb = hh->baseextent.lower(); - vect<int,dim> rub = hh->baseextent.upper() + rstr; + ivect rstr = hh->baseextent.stride(); + ivect rlb = hh->baseextent.lower(); + ivect rub = hh->baseextent.upper() + rstr; for (int rl=0; rl<reflevel+1; ++rl) { // save old values - const vect<int,dim> oldrlb = rlb; - const vect<int,dim> oldrub = rub; + const ivect oldrlb = rlb; + const ivect oldrub = rub; // calculate extent and centre - const vect<int,dim> rextent = rub - rlb; - const vect<int,dim> rcentre = rlb + (rextent / 2 / rstr) * rstr; + const ivect rextent = rub - rlb; + const ivect rcentre = rlb + (rextent / 2 / rstr) * rstr; // calculate new extent assert (all(rextent % hh->reffact == 0)); - const vect<int,dim> newrextent = rextent / hh->reffact; + const ivect newrextent = rextent / hh->reffact; // refined boxes have smaller stride assert (all(rstr%hh->reffact == 0)); rstr /= hh->reffact; @@ -219,32 +252,32 @@ namespace CarpetRegrid { assert (all(rlb >= oldrlb && rub < oldrub)); } - bbl.push_back (bbox<int,dim>(rlb, rub-rstr, rstr)); + bbl.push_back (ibbox(rlb, rub-rstr, rstr)); } static void MakeRegions_AsSpecified_OneLevel (const cGH* cctkGH, const int reflevels, - const vect<int,dim> ilower, - const vect<int,dim> iupper, - list<bbox<int,dim> >& bbl) + const ivect ilower, + const ivect iupper, + list<ibbox>& bbl) { assert (bbl.empty()); if (reflevel+1 >= reflevels) return; - const vect<int,dim> rstr = hh->baseextent.stride(); - const vect<int,dim> rlb = hh->baseextent.lower(); - const vect<int,dim> rub = hh->baseextent.upper(); + const ivect rstr = hh->baseextent.stride(); + const ivect rlb = hh->baseextent.lower(); + const ivect rub = hh->baseextent.upper(); const int rl = reflevel+1; const int levfac = ipow(hh->reffact, rl); assert (all (rstr % levfac == 0)); - const vect<int,dim> str (rstr / levfac); - const vect<int,dim> lb (ilower); - const vect<int,dim> ub (iupper); + const ivect str (rstr / levfac); + const ivect lb (ilower); + const ivect ub (iupper); if (! all(lb>=rlb && ub<=rub)) { CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, "The refinement region boundaries for refinement level #%d are not within the main grid", rl); @@ -261,22 +294,22 @@ namespace CarpetRegrid { assert (all(lb<=ub)); assert (all(lb%str==0 && ub%str==0)); - bbl.push_back (bbox<int,dim>(lb, ub, str)); + bbl.push_back (ibbox(lb, ub, str)); } void MakeRegions_AsSpecified (const cGH* cctkGH, const int reflevels, - const vector<vect<int,dim> > lower, - const vector<vect<int,dim> > upper, - list<bbox<int,dim> >& bbl) + const vector<ivect> lower, + const vector<ivect> upper, + list<ibbox>& bbl) { if (reflevel+1 >= reflevels) return; const int rl = reflevel+1; - const vect<int,dim> ilower = lower[rl-1]; - const vect<int,dim> iupper = upper[rl-1]; + const ivect ilower = lower[rl-1]; + const ivect iupper = upper[rl-1]; MakeRegions_AsSpecified_OneLevel (cctkGH, reflevels, ilower, iupper, bbl); } @@ -286,7 +319,7 @@ namespace CarpetRegrid { void MakeRegions_AsSpecified (const cGH* cctkGH, const int reflevels, const vector<vect<CCTK_REAL,dim> > lower, const vector<vect<CCTK_REAL,dim> > upper, - list<bbox<int,dim> >& bbl) + list<ibbox>& bbl) { if (reflevel+1 >= reflevels) return; @@ -299,12 +332,15 @@ namespace CarpetRegrid { global_upper[d] = 1; } } - const vect<int,dim> global_extent (hh->baseextent.upper() - hh->baseextent.lower() + hh->baseextent.stride() * (dd->lghosts + dd->ughosts)); + const ivect global_extent (hh->baseextent.upper() - hh->baseextent.lower() + hh->baseextent.stride() * (dd->lghosts + dd->ughosts)); const int rl = reflevel+1; - const vect<int,dim> ilower = vect<int,dim>(map((CCTK_REAL(*)(CCTK_REAL))(floor), (lower[rl-1] - global_lower) / (global_upper - global_lower) * vect<CCTK_REAL,dim>(global_extent) + 0.5)); - const vect<int,dim> iupper = vect<int,dim>(map((CCTK_REAL(*)(CCTK_REAL))(floor), (upper[rl-1] - global_lower) / (global_upper - global_lower) * vect<CCTK_REAL,dim>(global_extent) + 0.5)); + const vect<CCTK_REAL,dim> scale = vect<CCTK_REAL,dim>(global_extent) / (global_upper - global_lower); + const vect<CCTK_REAL,dim> rlower = (lower[rl-1] - global_lower) * scale; + const vect<CCTK_REAL,dim> rupper = (upper[rl-1] - global_lower) * scale; + const ivect ilower = ivect(map(floor, vect<double,dim>(rlower) + 0.5)); + const ivect iupper = ivect(map(floor, vect<double,dim>(rupper) + 0.5)); MakeRegions_AsSpecified_OneLevel (cctkGH, reflevels, ilower, iupper, bbl); } @@ -312,10 +348,10 @@ namespace CarpetRegrid { static void - MakeRegions_Adaptively_Recombine (list<bbox<int,dim> >& bbl1, - list<bbox<int,dim> >& bbl2, - list<bbox<int,dim> >& bbl, - const bbox<int,dim>& iface, + MakeRegions_Adaptively_Recombine (list<ibbox>& bbl1, + list<ibbox>& bbl2, + list<ibbox>& bbl, + const ibbox& iface, const int dir) { assert (!iface.empty()); @@ -325,23 +361,23 @@ namespace CarpetRegrid { int numcombinedboxes = 0; int oldnumpoints = 0; - for (list<bbox<int,dim> >::const_iterator ibb = bbl.begin(); ibb != bbl.end(); ++ibb) { + for (list<ibbox>::const_iterator ibb = bbl.begin(); ibb != bbl.end(); ++ibb) { oldnumpoints += ibb->num_points(); } - for (list<bbox<int,dim> >::const_iterator ibb1 = bbl1.begin(); ibb1 != bbl1.end(); ++ibb1) { + for (list<ibbox>::const_iterator ibb1 = bbl1.begin(); ibb1 != bbl1.end(); ++ibb1) { oldnumpoints += ibb1->num_points(); } - for (list<bbox<int,dim> >::const_iterator ibb2 = bbl2.begin(); ibb2 != bbl2.end(); ++ibb2) { + for (list<ibbox>::const_iterator ibb2 = bbl2.begin(); ibb2 != bbl2.end(); ++ibb2) { oldnumpoints += ibb2->num_points(); } #if 0 // remember old bounding boxes bboxset<int,dim> oldboxes; - for (list<bbox<int,dim> >::const_iterator ibb1 = bbl1.begin(); ibb1 != bbl1.end(); ++ibb1) { + for (list<ibbox>::const_iterator ibb1 = bbl1.begin(); ibb1 != bbl1.end(); ++ibb1) { oldboxes += *ibb1; } - for (list<bbox<int,dim> >::const_iterator ibb2 = bbl2.begin(); ibb2 != bbl2.end(); ++ibb2) { + for (list<ibbox>::const_iterator ibb2 = bbl2.begin(); ibb2 != bbl2.end(); ++ibb2) { oldboxes += *ibb2; } #endif @@ -355,18 +391,18 @@ namespace CarpetRegrid { cout << bbl2 << endl; #endif - const vect<int,dim> lo = iface.lower(); - const vect<int,dim> up = iface.upper(); - const vect<int,dim> str = iface.stride(); + const ivect lo = iface.lower(); + const ivect up = iface.upper(); + const ivect str = iface.stride(); { // prune boxes on the left - list<bbox<int,dim> >::iterator ibb1 = bbl1.begin(); + list<ibbox>::iterator ibb1 = bbl1.begin(); while (ibb1 != bbl1.end()) { // is this bbox just to the left of the interface? -// const vect<int,dim> lo1 = ibb1->lower(); - const vect<int,dim> up1 = ibb1->upper(); - const vect<int,dim> str1 = ibb1->stride(); +// const ivect lo1 = ibb1->lower(); + const ivect up1 = ibb1->upper(); + const ivect str1 = ibb1->stride(); assert (up1[dir]+str1[dir] <= lo[dir]); assert (all(str1 == str)); if (up1[dir]+str1[dir] < lo[dir]) { @@ -381,12 +417,12 @@ namespace CarpetRegrid { { // prune boxes on the right - list<bbox<int,dim> >::iterator ibb2 = bbl2.begin(); + list<ibbox>::iterator ibb2 = bbl2.begin(); while (ibb2 != bbl2.end()) { // is this bbox just to the right of the interface? - const vect<int,dim> lo2 = ibb2->lower(); -// const vect<int,dim> up2 = ibb2->upper(); - const vect<int,dim> str2 = ibb2->stride(); + const ivect lo2 = ibb2->lower(); +// const ivect up2 = ibb2->upper(); + const ivect str2 = ibb2->stride(); assert (up[dir] <= lo2[dir]); assert (all(str2 == str)); if (up[dir] < lo2[dir]) { @@ -401,31 +437,31 @@ namespace CarpetRegrid { { // walk all boxes on the left - list<bbox<int,dim> >::iterator ibb1 = bbl1.begin(); + list<ibbox>::iterator ibb1 = bbl1.begin(); while (ibb1 != bbl1.end()) { - vect<int,dim> lo1 = ibb1->lower(); - vect<int,dim> up1 = ibb1->upper(); - vect<int,dim> str1 = ibb1->stride(); + ivect lo1 = ibb1->lower(); + ivect up1 = ibb1->upper(); + ivect str1 = ibb1->stride(); assert (up1[dir]+str1[dir] == lo[dir]); lo1[dir] = lo[dir]; up1[dir] = up[dir]; - const bbox<int,dim> iface1 (lo1,up1,str1); + const ibbox iface1 (lo1,up1,str1); { // walk all boxes on the right - list<bbox<int,dim> >::iterator ibb2 = bbl2.begin(); + list<ibbox>::iterator ibb2 = bbl2.begin(); while (ibb2 != bbl2.end()) { - vect<int,dim> lo2 = ibb2->lower(); - vect<int,dim> up2 = ibb2->upper(); - vect<int,dim> str2 = ibb2->stride(); + ivect lo2 = ibb2->lower(); + ivect up2 = ibb2->upper(); + ivect str2 = ibb2->stride(); assert (lo2[dir] == up[dir]); lo2[dir] = lo[dir]; up2[dir] = up[dir]; - const bbox<int,dim> iface2 (lo2,up2,str2); + const ibbox iface2 (lo2,up2,str2); // check for a match if (iface1 == iface2) { - const bbox<int,dim> combined (ibb1->lower(), ibb2->upper(), str); + const ibbox combined (ibb1->lower(), ibb2->upper(), str); bbl.push_back (combined); ibb1 = bbl1.erase(ibb1); ibb2 = bbl2.erase(ibb2); @@ -452,7 +488,7 @@ namespace CarpetRegrid { assert (newnumboxes + numcombinedboxes == oldnumboxes); int newnumpoints = 0; - for (list<bbox<int,dim> >::const_iterator ibb = bbl.begin(); ibb != bbl.end(); ++ibb) { + for (list<ibbox>::const_iterator ibb = bbl.begin(); ibb != bbl.end(); ++ibb) { newnumpoints += ibb->num_points(); } assert (newnumpoints == oldnumpoints); @@ -460,7 +496,7 @@ namespace CarpetRegrid { #if 0 // find new bounding boxes bboxset<int,dim> newboxes; - for (list<bbox<int,dim> >::const_iterator ibb = bbl.begin(); ibb != bbl.end(); ++ibb) { + for (list<ibbox>::const_iterator ibb = bbl.begin(); ibb != bbl.end(); ++ibb) { newboxes += *ibb; } @@ -482,8 +518,8 @@ namespace CarpetRegrid { const CCTK_REAL minfraction, const CCTK_REAL maxerror, const data<CCTK_REAL,dim>& error, - list<bbox<int,dim> >& bbl, - const bbox<int,dim>& region) + list<ibbox>& bbl, + const ibbox& region) { // Just to be sure assert (! region.empty()); @@ -492,7 +528,7 @@ namespace CarpetRegrid { // (this doesn't work yet on multiple processors) assert (CCTK_nProcs(cctkGH)==1); int cnt = 0; - for (bbox<int,dim>::iterator it=region.begin(); it!=region.end(); ++it) { + for (ibbox::iterator it=region.begin(); it!=region.end(); ++it) { if (error[*it] > maxerror) ++cnt; } const CCTK_REAL fraction = (CCTK_REAL)cnt / region.num_points(); @@ -502,30 +538,30 @@ namespace CarpetRegrid { // Don't refine } else if (width < 2*minwidth || fraction >= minfraction) { // Refine the whole region - const vect<int,dim> lo(region.lower()); - const vect<int,dim> up(region.upper()); - const vect<int,dim> str(region.stride()); - bbl.push_back (bbox<int,dim>(lo,up+str-str/reffact,str/reffact)); + const ivect lo(region.lower()); + const ivect up(region.upper()); + const ivect str(region.stride()); + bbl.push_back (ibbox(lo,up+str-str/reffact,str/reffact)); // cout << "MRA: Refining to " << bbl.back() << " size " << bbl.back().num_points() << " fraction " << fraction << endl; } else { // Split the region and check recursively const int dir = maxloc(region.shape()); - const vect<int,dim> lo(region.lower()); - const vect<int,dim> up(region.upper()); - const vect<int,dim> str(region.stride()); - vect<int,dim> lo1(lo), lo2(lo); - vect<int,dim> up1(up), up2(up); + const ivect lo(region.lower()); + const ivect up(region.upper()); + const ivect str(region.stride()); + ivect lo1(lo), lo2(lo); + ivect up1(up), up2(up); const int mgstr = ipow(hh->mgfact, mglevels); // honour multigrid factors const int step = str[dir]*mgstr; lo2[dir] = ((up[dir]+lo[dir])/2/step)*step; up1[dir] = lo2[dir]-str[dir]; - const bbox<int,dim> region1(lo1,up1,str); - const bbox<int,dim> region2(lo2,up2,str); + const ibbox region1(lo1,up1,str); + const ibbox region2(lo2,up2,str); assert (region1.is_contained_in(region)); assert (region2.is_contained_in(region)); assert ((region1 & region2).empty()); assert (region1 + region2 == region); - list<bbox<int,dim> > bbl1, bbl2; + list<ibbox> bbl1, bbl2; MakeRegions_Adaptively (cctkGH, minwidth, minfraction, maxerror, error, bbl1, region1); MakeRegions_Adaptively (cctkGH, minwidth, minfraction, maxerror, @@ -533,7 +569,7 @@ namespace CarpetRegrid { // Combine regions if possible up2 += str-str/reffact; up2[dir] = lo2[dir]; - const bbox<int,dim> iface(lo2,up2,str/reffact); + const ibbox iface(lo2,up2,str/reffact); MakeRegions_Adaptively_Recombine (bbl1, bbl2, bbl, iface, dir); } @@ -545,7 +581,7 @@ namespace CarpetRegrid { const CCTK_REAL minfraction, const CCTK_REAL maxerror, const gf<CCTK_REAL,dim>& error, - list<bbox<int,dim> >& bbl) + list<ibbox>& bbl) { assert (bbl.empty()); @@ -562,7 +598,7 @@ namespace CarpetRegrid { // cout << endl << "MRA: Choosing regions to refine in " << hh->components(rl) << " components" << endl; for (int c=0; c<hh->components(rl); ++c) { - const bbox<int,dim> region = hh->extents[rl][c][ml]; + const ibbox region = hh->extents[rl][c][ml]; assert (! region.empty()); const data<CCTK_REAL,dim>& errdata = *error(tl,rl,c,ml); @@ -571,10 +607,10 @@ namespace CarpetRegrid { errdata, bbl, region); } - int numpoints = 0; - for (list<bbox<int,dim> >::const_iterator ibb = bbl.begin(); ibb != bbl.end(); ++ibb) { - numpoints += ibb->num_points(); - } +// int numpoints = 0; +// for (list<ibbox>::const_iterator ibb = bbl.begin(); ibb != bbl.end(); ++ibb) { +// numpoints += ibb->num_points(); +// } // cout << "MRA: Chose " << bbl.size() << " regions with a total size of " << numpoints << " to refine." << endl << endl; } diff --git a/Carpet/CarpetRegrid/src/regrid.hh b/Carpet/CarpetRegrid/src/regrid.hh index cef62a2fb..402e4f8df 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.3 2002/01/11 17:37:14 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/regrid.hh,v 1.4 2002/03/11 13:17:16 schnetter Exp $ #ifndef REGRID_HH #define REGRID_HH @@ -28,6 +28,7 @@ namespace CarpetRegrid { int CarpetRegridRegrid (const cGH * const cctkGH, gh<dim>::rexts& bbsss, + gh<dim>::rbnds& obss, gh<dim>::rprocs& pss); diff --git a/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse.par b/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse.par index 9c0093d30..a882a08a8 100644 --- a/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse.par +++ b/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse.par @@ -7,7 +7,7 @@ # @enddesc # @@*/ # -# $Header: /home/eschnett/C/carpet/Carpet/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse.par,v 1.3 2002/01/30 16:07:31 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse.par,v 1.4 2002/03/11 13:17:16 schnetter Exp $ ActiveThorns = "Boundary IOBasic IOUtil Time Cart3d Carpet CarpetIOASCII CarpetLib CarpetReduce CarpetRegrid CarpetSlab IDScalarWave WaveToyF77" @@ -25,13 +25,13 @@ grid::avoid_origin = no IO::outdir = "wavetoyf77_rad_full_coarse" -IOBasic::outinfo_every = 1 # 10 -#IOBasic::outinfo_vars = "wavetoy::phi" +IOBasic::outinfo_every = 1 +IOBasic::outinfo_vars = "wavetoy::phi" -#IOBasic::outScalar_every = 2 -#IOBasic::outScalar_vars = "wavetoy::phi" +IOBasic::outScalar_every = 2 +IOBasic::outScalar_vars = "wavetoy::phi" -IOASCII::out1D_every = 1 # 2 +IOASCII::out1D_every = 1 IOASCII::out1D_vars = "wavetoy::phi grid::coordinates" WaveToyF77::bound = radiation diff --git a/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse_rl2.par b/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse_rl2.par index 61dd57386..301944cc0 100644 --- a/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse_rl2.par +++ b/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse_rl2.par @@ -7,11 +7,11 @@ # @enddesc # @@*/ # -# $Header: /home/eschnett/C/carpet/Carpet/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse_rl2.par,v 1.3 2002/01/30 16:07:31 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse_rl2.par,v 1.4 2002/03/11 13:17:16 schnetter Exp $ ActiveThorns = "Boundary IOBasic IOUtil Time Cart3d Carpet CarpetIOASCII CarpetLib CarpetReduce CarpetRegrid CarpetSlab IDScalarWave WaveToyF77" -Cactus::cctk_itlast = 60 +Cactus::cctk_itlast = 120 Time::dtfac = 0.5 @@ -21,19 +21,21 @@ driver::global_nz = 31 Carpet::max_refinement_levels = 2 +CarpetRegrid::refinement_levels = 2 + grid::type = byspacing grid::dxyz = 0.6 grid::avoid_origin = no IO::outdir = "wavetoyf77_rad_full_coarse_rl2" -IOBasic::outinfo_every = 1 # 10 -#IOBasic::outinfo_vars = "wavetoy::phi" +IOBasic::outinfo_every = 1 +IOBasic::outinfo_vars = "wavetoy::phi" -#IOBasic::outScalar_every = 2 -#IOBasic::outScalar_vars = "wavetoy::phi" +IOBasic::outScalar_every = 2 +IOBasic::outScalar_vars = "wavetoy::phi" -IOASCII::out1D_every = 1 # 2 +IOASCII::out1D_every = 1 IOASCII::out1D_vars = "wavetoy::phi grid::coordinates" WaveToyF77::bound = radiation diff --git a/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse_rl3.par b/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse_rl3.par index c30bf6446..7ef9ea780 100644 --- a/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse_rl3.par +++ b/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse_rl3.par @@ -7,11 +7,11 @@ # @enddesc # @@*/ # -# $Header: /home/eschnett/C/carpet/Carpet/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse_rl3.par,v 1.3 2002/01/30 16:07:31 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/CarpetExtra/WaveToyF77/par/wavetoyf77_rad_full_coarse_rl3.par,v 1.4 2002/03/11 13:17:16 schnetter Exp $ ActiveThorns = "Boundary IOBasic IOUtil Time Cart3d Carpet CarpetIOASCII CarpetLib CarpetReduce CarpetRegrid CarpetSlab IDScalarWave WaveToyF77" -Cactus::cctk_itlast = 60 +Cactus::cctk_itlast = 240 Time::dtfac = 0.5 @@ -21,19 +21,21 @@ driver::global_nz = 31 Carpet::max_refinement_levels = 3 +CarpetRegrid::refinement_levels = 3 + grid::type = byspacing grid::dxyz = 0.6 grid::avoid_origin = no IO::outdir = "wavetoyf77_rad_full_coarse_rl3" -IOBasic::outinfo_every = 1 # 10 -#IOBasic::outinfo_vars = "wavetoy::phi" +IOBasic::outinfo_every = 1 +IOBasic::outinfo_vars = "wavetoy::phi" -#IOBasic::outScalar_every = 2 -#IOBasic::outScalar_vars = "wavetoy::phi" +IOBasic::outScalar_every = 2 +IOBasic::outScalar_vars = "wavetoy::phi" -IOASCII::out1D_every = 1 # 2 +IOASCII::out1D_every = 1 IOASCII::out1D_vars = "wavetoy::phi grid::coordinates" WaveToyF77::bound = radiation diff --git a/CarpetExtra/WaveToyF77/par/wavetoyf77_zero_ell_coarse.par b/CarpetExtra/WaveToyF77/par/wavetoyf77_zero_ell_coarse.par index 66121b671..aa6fd3ce7 100644 --- a/CarpetExtra/WaveToyF77/par/wavetoyf77_zero_ell_coarse.par +++ b/CarpetExtra/WaveToyF77/par/wavetoyf77_zero_ell_coarse.par @@ -7,7 +7,7 @@ # @enddesc # @@*/ # -# $Header: /home/eschnett/C/carpet/Carpet/CarpetExtra/WaveToyF77/par/wavetoyf77_zero_ell_coarse.par,v 1.3 2004/03/23 12:00:37 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/CarpetExtra/WaveToyF77/par/wavetoyf77_zero_ell_coarse.par,v 1.1 2002/03/11 13:17:17 schnetter Exp $ ActiveThorns = "Boundary IOBasic IOUtil Time Cart3d Carpet CarpetIOASCII CarpetLib CarpetReduce CarpetRegrid CarpetSlab IDScalarWave WaveToyF77" @@ -26,7 +26,7 @@ grid::type = byspacing grid::dxyz = 0.6 grid::avoid_origin = no -IO::out_dir = "wavetoyf77_zero_ell_coarse" +IO::outdir = "wavetoyf77_zero_ell_coarse" IOBasic::outinfo_every = 1 IOBasic::outinfo_vars = "wavetoy::phi" diff --git a/CarpetExtra/WaveToyF77/par/wavetoyf77_zero_ell_coarse_rl2.par b/CarpetExtra/WaveToyF77/par/wavetoyf77_zero_ell_coarse_rl2.par index bf73eafc9..21871b67b 100644 --- a/CarpetExtra/WaveToyF77/par/wavetoyf77_zero_ell_coarse_rl2.par +++ b/CarpetExtra/WaveToyF77/par/wavetoyf77_zero_ell_coarse_rl2.par @@ -7,7 +7,7 @@ # @enddesc # @@*/ # -# $Header: /home/eschnett/C/carpet/Carpet/CarpetExtra/WaveToyF77/par/wavetoyf77_zero_ell_coarse_rl2.par,v 1.3 2004/03/23 12:00:37 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/CarpetExtra/WaveToyF77/par/wavetoyf77_zero_ell_coarse_rl2.par,v 1.1 2002/03/11 13:17:17 schnetter Exp $ ActiveThorns = "Boundary IOBasic IOUtil Time Cart3d Carpet CarpetIOASCII CarpetLib CarpetReduce CarpetRegrid CarpetSlab IDScalarWave WaveToyF77" @@ -30,7 +30,7 @@ grid::type = byspacing grid::dxyz = 0.6 grid::avoid_origin = no -IO::out_dir = "wavetoyf77_zero_ell_coarse_rl2" +IO::outdir = "wavetoyf77_zero_ell_coarse_rl2" IOBasic::outinfo_every = 1 IOBasic::outinfo_vars = "wavetoy::phi" |