diff options
Diffstat (limited to 'Carpet')
-rw-r--r-- | Carpet/Carpet/options/carpet-lilypond-gcc3 | 5 | ||||
-rw-r--r-- | Carpet/Carpet/src/Recompose.cc | 106 | ||||
-rw-r--r-- | Carpet/Carpet/src/SetupGH.cc | 12 | ||||
-rw-r--r-- | Carpet/Carpet/src/carpet_public.hh | 7 | ||||
-rw-r--r-- | Carpet/Carpet/src/helpers.cc | 68 | ||||
-rw-r--r-- | Carpet/Carpet/src/variables.cc | 5 | ||||
-rw-r--r-- | Carpet/CarpetIOASCII/param.ccl | 6 | ||||
-rw-r--r-- | Carpet/CarpetIOASCII/src/ioascii.cc | 11 |
8 files changed, 117 insertions, 103 deletions
diff --git a/Carpet/Carpet/options/carpet-lilypond-gcc3 b/Carpet/Carpet/options/carpet-lilypond-gcc3 index 5900a6881..6bc774255 100644 --- a/Carpet/Carpet/options/carpet-lilypond-gcc3 +++ b/Carpet/Carpet/options/carpet-lilypond-gcc3 @@ -1,4 +1,4 @@ -# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/Attic/carpet-lilypond-gcc3,v 1.1 2001/12/07 18:24:15 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/Attic/carpet-lilypond-gcc3,v 1.2 2001/12/17 13:34:00 schnetter Exp $ #CPP = /home/eschnett/gcc/bin/cpp -traditional -DTMPL_EXPLICIT -DCARPET_REAL CPP = cpp -traditional -DTMPL_EXPLICIT -DCARPET_REAL @@ -7,7 +7,8 @@ CXX = /home/eschnett/gcc/bin/g++ F77 = /home/eschnett/gcc/bin/g77 F90 = /home/eschnett/gcc/bin/g77 -CXXFLAGS = -DTMPL_EXPLICIT -DCARPET_REAL -ftemplate-depth-30 -Wl,-rpath,/home/eschnett/gcc/lib +CXXFLAGS = -DTMPL_EXPLICIT -DCARPET_REAL -ftemplate-depth-30 +LDFLAGS = -Wl,-rpath,/home/eschnett/gcc/lib C_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro CXX_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro diff --git a/Carpet/Carpet/src/Recompose.cc b/Carpet/Carpet/src/Recompose.cc index 1fded5cb8..2122d179f 100644 --- a/Carpet/Carpet/src/Recompose.cc +++ b/Carpet/Carpet/src/Recompose.cc @@ -15,7 +15,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Recompose.cc,v 1.12 2001/12/14 16:39:07 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Recompose.cc,v 1.13 2001/12/17 13:34:01 schnetter Exp $"; @@ -31,8 +31,10 @@ namespace Carpet { - static void SplitRegions_AlongZ (const cGH* cgh, gh<dim>::cexts& bbss); - static void SplitRegions_AsSpecified (const cGH* cgh, gh<dim>::cexts& bbss); + static void SplitRegions_AlongZ (const cGH* cgh, + vector<bbox<int,dim> >& bbs); + static void SplitRegions_AsSpecified (const cGH* cgh, + vector<bbox<int,dim> >& bbs); static void MakeProcessors_RoundRobin (const cGH* cgh, const gh<dim>::rexts& bbss, @@ -40,32 +42,34 @@ namespace Carpet { - static bool RegionsOK (const gh<dim>::rexts& bbsss, - const gh<dim>::rprocs& pss); + static void CheckRegions (const gh<dim>::rexts& bbsss, + const gh<dim>::rprocs& pss); static void Adapt (const cGH* cgh, int reflevels, gh<dim>* hh); static void Output (const cGH* cgh, const gh<dim>* hh, const char* descr); - bool RegionsOK (const gh<dim>::rexts& bbsss, const gh<dim>::rprocs& pss) + void CheckRegions (const gh<dim>::rexts& bbsss, const gh<dim>::rprocs& pss) { // At least one level - if (bbsss.size() == 0) return false; + assert (bbsss.size() > 0); for (int rl=0; rl<(int)bbsss.size(); ++rl) { // No empty levels - if (bbsss[rl].size() == 0) return false; + assert (bbsss[rl].size() > 0); for (int c=0; c<(int)bbsss[rl].size(); ++c) { - // At least one multigrid level - if (bbsss[rl][c].size() == 0) return false; + // Just one multigrid level + assert (bbsss[rl][c].size() == 1); + for (int ml=0; ml<(int)bbsss[rl][c].size(); ++ml) { + assert (all(bbsss[rl][c][ml].stride() + == floor(pow((double)reffact,maxreflevels-rl-1)+0.5))); + } } } - if (pss.size() != bbsss.size()) return false; + assert (pss.size() == bbsss.size()); for (int rl=0; rl<(int)bbsss.size(); ++rl) { - if (pss[rl].size() != bbsss[rl].size()) return false; + assert (pss[rl].size() == bbsss[rl].size()); } - - return true; } @@ -74,7 +78,7 @@ namespace Carpet { const gh<dim>::rprocs& pss) { // Check the regions - assert (RegionsOK(bbsss,pss)); + CheckRegions (bbsss, pss); // Save the region information for the next regridding next_bbsss = bbsss; next_pss = pss; @@ -85,8 +89,6 @@ namespace Carpet { void Recompose (const cGH* cgh) { - DECLARE_CCTK_PARAMETERS; - assert (component == -1); Waypoint ("%*sRecompose", 2*reflevel, ""); @@ -94,7 +96,7 @@ namespace Carpet { if (!do_recompose) return; // Check the regions - assert (RegionsOK(next_bbsss, next_pss)); + CheckRegions (next_bbsss, next_pss); // Recompose hh->recompose (next_bbsss, next_pss); @@ -125,15 +127,13 @@ namespace Carpet { - // This routine is a leftover. It determines "automatically" how - // scalars and arrays should be refined. The user really should have - // a possibility to define how arrays are to be refined. + // This routine is a leftover. It determines "automatically" how + // scalars and arrays should be refined. The user really should + // have a possibility to define how arrays are to be refined. static void Adapt (const cGH* cgh, const int reflevels, gh<dim>* hh) { - DECLARE_CCTK_PARAMETERS; - - const int nprocs = CCTK_nProcs(cgh); - const int mglevels = 1; // for now + const int nprocs = CCTK_nProcs(cgh); + const int mglevels = 1; // for now vector<vector<bbox<int,dim> > > bbss(reflevels); // note: what this routine calls "ub" is "ub+str" elsewhere vect<int,dim> rstr = hh->baseextent.stride(); @@ -174,8 +174,14 @@ namespace Carpet { assert (cub[dim-1] <= rub[dim-1]); bbs[c] = bbox<int,dim>(clb, cub-cstr, cstr); } - bbss[rl] = bbs; +// bbss[rl] = bbs; + bbss[rl].clear(); + assert (Carpet::hh->components(rl) % nprocs == 0); + for (int cc=0; cc<(int)Carpet::hh->components(rl)/nprocs; ++cc) { + bbss[rl].insert(bbss[rl].end(), bbs.begin(), bbs.end()); + } } + vector<vector<vector<bbox<int,dim> > > > bbsss = hh->make_multigrid_boxes(bbss, mglevels); @@ -239,14 +245,14 @@ namespace Carpet { - void SplitRegions (const cGH* cgh, gh<dim>::cexts& bbss) + void SplitRegions (const cGH* cgh, vector<bbox<int,dim> >& bbs) { DECLARE_CCTK_PARAMETERS; if (CCTK_EQUALS (processor_topology, "automatic")) { - SplitRegions_AlongZ (cgh, bbss); + SplitRegions_AlongZ (cgh, bbs); } else if (CCTK_EQUALS (processor_topology, "manual")) { - SplitRegions_AsSpecified (cgh, bbss); + SplitRegions_AsSpecified (cgh, bbs); } else { abort(); } @@ -254,22 +260,22 @@ namespace Carpet { - void SplitRegions_AlongZ (const cGH* cgh, gh<dim>::cexts& bbss) + void SplitRegions_AlongZ (const cGH* cgh, vector<bbox<int,dim> >& bbs) { // Something to do? - if (bbss.size() == 0) return; + if (bbs.size() == 0) return; + + const int nprocs = CCTK_nProcs(cgh); - const int nprocs = CCTK_nProcs(cgh); - const int mglevels = 1; // arbitrary value + if (nprocs==1) return; - assert (bbss.size() == 1); - assert (bbss[0].size() == 1); + assert (bbs.size() == 1); - const vect<int,dim> rstr = bbss[0][0].stride(); - const vect<int,dim> rlb = bbss[0][0].lower(); - const vect<int,dim> rub = bbss[0][0].upper() + rstr; + 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; - vector<bbox<int,dim> > bbs(nprocs); + bbs.resize(nprocs); for (int c=0; c<nprocs; ++c) { vect<int,dim> cstr = rstr; vect<int,dim> clb = rlb; @@ -285,27 +291,26 @@ namespace Carpet { assert (cub[dim-1] <= rub[dim-1]); bbs[c] = bbox<int,dim>(clb, cub-cstr, cstr); } - bbss = hh->make_reflevel_multigrid_boxes(bbs, mglevels); } - void SplitRegions_AsSpecified (const cGH* cgh, gh<dim>::cexts& bbss) + void SplitRegions_AsSpecified (const cGH* cgh, vector<bbox<int,dim> >& bbs) { DECLARE_CCTK_PARAMETERS; // Something to do? - if (bbss.size() == 0) return; + if (bbs.size() == 0) return; + + const int nprocs = CCTK_nProcs(cgh); - const int nprocs = CCTK_nProcs(cgh); - const int mglevels = 1; // arbitrary value + if (nprocs==1) return; - assert (bbss.size() == 1); - assert (bbss[0].size() == 1); + assert (bbs.size() == 1); - const vect<int,dim> rstr = bbss[0][0].stride(); - const vect<int,dim> rlb = bbss[0][0].lower(); - const vect<int,dim> rub = bbss[0][0].upper() + rstr; + 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 vect<int,dim> nprocs_dir (processor_topology_3d_x, processor_topology_3d_y, @@ -317,7 +322,7 @@ namespace Carpet { } assert (prod(nprocs_dir) == nprocs); - vector<bbox<int,dim> > bbs(nprocs); + bbs.resize(nprocs); assert (dim==3); for (int k=0; k<nprocs_dir[2]; ++k) { for (int j=0; j<nprocs_dir[1]; ++j) { @@ -340,7 +345,6 @@ namespace Carpet { } } } - bbss = hh->make_reflevel_multigrid_boxes(bbs, mglevels); } diff --git a/Carpet/Carpet/src/SetupGH.cc b/Carpet/Carpet/src/SetupGH.cc index 1efb5e3b3..431514da7 100644 --- a/Carpet/Carpet/src/SetupGH.cc +++ b/Carpet/Carpet/src/SetupGH.cc @@ -11,7 +11,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.16 2001/12/14 16:39:08 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.17 2001/12/17 13:34:01 schnetter Exp $"; @@ -39,7 +39,8 @@ namespace Carpet { // Refinement information maxreflevels = max_refinement_levels; - maxreflevelfact = floor(pow((double)refinement_factor, maxreflevels-1) + 0.5); + reffact = refinement_factor; + maxreflevelfact = floor(pow((double)reffact, maxreflevels-1) + 0.5); // Ghost zones vect<int,dim> lghosts, ughosts; @@ -243,13 +244,14 @@ namespace Carpet { vector<bbox<int,dim> > bbs(1); bbs[0] = hh->baseextent; + SplitRegions (cgh, bbs); + vector<vector<bbox<int,dim> > > bbss(1); bbss[0] = bbs; - SplitRegions (cgh, bbss); - gh<dim>::rexts bbsss; - bbsss = hh->make_multigrid_boxes(bbss, 1); + const int mglevels = 1; + bbsss = hh->make_multigrid_boxes(bbss, mglevels); gh<dim>::rprocs pss; MakeProcessors (cgh, bbsss, pss); diff --git a/Carpet/Carpet/src/carpet_public.hh b/Carpet/Carpet/src/carpet_public.hh index bcb483926..d5deb2b17 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.9 2001/12/14 16:39:09 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.hh,v 1.10 2001/12/17 13:34:01 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 @@ -35,6 +35,9 @@ namespace Carpet { // Maximum number of refinement levels extern int maxreflevels; + // Refinement factor + extern int reffact; + // Refinement factor on finest grid extern int maxreflevelfact; @@ -125,7 +128,7 @@ namespace Carpet { void RegisterRecomposeRegions (const gh<dim>::rexts& bbsss, const gh<dim>::rprocs& pss); - void SplitRegions (const cGH* cgh, gh<dim>::cexts& bbss); + void SplitRegions (const cGH* cgh, vector<bbox<int,dim> >& bbs); 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 fb36ba70c..fcc294cb6 100644 --- a/Carpet/Carpet/src/helpers.cc +++ b/Carpet/Carpet/src/helpers.cc @@ -11,7 +11,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/helpers.cc,v 1.13 2001/12/14 16:39:10 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/helpers.cc,v 1.14 2001/12/17 13:34:01 schnetter Exp $"; @@ -294,37 +294,35 @@ namespace Carpet { // Local mode -- a component is active // Set Cactus parameters - for (int d=0; d<dim; ++d) { + { + 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>& ext = dd->boxes[reflevel][component][mglevel].exterior; - cgh->cctk_lsh[d] = (ext.shape() / ext.stride())[d]; - cgh->cctk_lbnd[d] = (ext.lower() / ext.stride())[d]; - cgh->cctk_ubnd[d] = (ext.upper() / ext.stride())[d]; - assert (cgh->cctk_lsh[d]>=0 && cgh->cctk_lsh[d]<=cgh->cctk_gsh[d]); - assert (cgh->cctk_lbnd[d]>=0 && cgh->cctk_ubnd[d]<cgh->cctk_gsh[d]); - assert (cgh->cctk_lbnd[d]<=cgh->cctk_ubnd[d]+1); -#if 0 - // No outer boundaries on the finer grids - cgh->cctk_bbox[2*d ] - = reflevel==0 && cgh->cctk_lbnd[d] == 0; - cgh->cctk_bbox[2*d+1] - = reflevel==0 && cgh->cctk_ubnd[d] == cgh->cctk_gsh[d]-1; -#else - // Do allow outer boundaries on the finer grids (but this is - // generally inconsistent -- c. f. periodicity) - const bbox<int,dim>& base = hh->baseextent; - cgh->cctk_bbox[2*d ] = (ext.lower() < base.lower())[d]; - cgh->cctk_bbox[2*d+1] = (ext.upper() > base.upper())[d]; -#endif - for (int stg=0; stg<CCTK_NSTAGGER; ++stg) { - // TODO: support staggering - cgh->cctk_lssh[CCTK_LSSH_IDX(stg,d)] = cgh->cctk_lsh[d]; + for (int d=0; d<dim; ++d) { + cgh->cctk_lsh[d] = (ext.shape() / ext.stride())[d]; + cgh->cctk_lbnd[d] = (ext.lower() / ext.stride())[d]; + cgh->cctk_ubnd[d] = (ext.upper() / ext.stride())[d]; + assert (cgh->cctk_lsh[d]>=0 && cgh->cctk_lsh[d]<=cgh->cctk_gsh[d]); + assert (cgh->cctk_lbnd[d]>=0 && cgh->cctk_ubnd[d]<cgh->cctk_gsh[d]); + assert (cgh->cctk_lbnd[d]<=cgh->cctk_ubnd[d]+1); + // Do allow outer boundaries on the finer grids + cgh->cctk_bbox[2*d ] = cgh->cctk_lbnd[d] == 0; + cgh->cctk_bbox[2*d+1] = cgh->cctk_ubnd[d] == cgh->cctk_gsh[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]; + } } } for (int group=0; group<CCTK_NumGroups(); ++group) { + assert (reflevel < (int)arrdata[group].dd->boxes.size()); + assert (component < (int)arrdata[group].dd->boxes[reflevel].size()); + assert (mglevel < (int)arrdata[group].dd->boxes[reflevel][component].size()); + const bbox<int,dim>& ext + = arrdata[group].dd->boxes[reflevel][component][mglevel].exterior; for (int d=0; d<dim; ++d) { - const bbox<int,dim>& ext - = arrdata[group].dd->boxes[reflevel][component][mglevel].exterior; ((int*)arrdata[group].info.lsh)[d] = (ext.shape() / ext.stride())[d]; ((int*)arrdata[group].info.lbnd)[d] @@ -336,21 +334,11 @@ namespace Carpet { assert (arrdata[group].info.lbnd[d]>=0 && arrdata[group].info.ubnd[d]<arrdata[group].info.gsh[d]); assert (arrdata[group].info.lbnd[d]<=arrdata[group].info.ubnd[d]+1); - // No outer boundaries on the finer grids - ((int*)arrdata[group].info.bbox)[2*d ] - = reflevel==0 && arrdata[group].info.lbnd[d] == 0; - ((int*)arrdata[group].info.bbox)[2*d+1] - = (reflevel==0 - && arrdata[group].info.ubnd[d] == arrdata[group].info.gsh[d]-1); -#if 0 - // Do allow outer boundaries on the finer grids (but this is - // generally inconsistent -- c. f. periodicity) - const bbox<int,dim>& base = arrdata[group].hh->baseextent; + // Do allow outer boundaries on the finer grids ((int*)arrdata[group].info.bbox)[2*d ] - = (ext.lower() < base.lower())[d]; + = arrdata[group].info.lbnd[d] == 0; ((int*)arrdata[group].info.bbox)[2*d+1] - = (ext.upper() > base.upper())[d]; -#endif + = arrdata[group].info.ubnd[d] == arrdata[group].info.gsh[d]-1; } } @@ -359,7 +347,7 @@ namespace Carpet { const int group = CCTK_GroupIndexFromVarI(n); assert (group>=0); - const int var = n - CCTK_FirstVarIndexI(group); + const int var = n - CCTK_FirstVarIndexI(group); assert (var>=0); const int num_tl = CCTK_NumTimeLevelsFromVarI(n); assert (num_tl>0); diff --git a/Carpet/Carpet/src/variables.cc b/Carpet/Carpet/src/variables.cc index 91ee10bb6..b1d4e5a0d 100644 --- a/Carpet/Carpet/src/variables.cc +++ b/Carpet/Carpet/src/variables.cc @@ -5,7 +5,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/variables.cc,v 1.2 2001/07/09 09:00:15 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/variables.cc,v 1.3 2001/12/17 13:34:02 schnetter Exp $"; @@ -21,6 +21,9 @@ namespace Carpet { // Maximum number of refinement levels int maxreflevels; + // Refinement factor + int reffact; + // Refinement factor on finest grid int maxreflevelfact; diff --git a/Carpet/CarpetIOASCII/param.ccl b/Carpet/CarpetIOASCII/param.ccl index 2bf869427..f30df8d85 100644 --- a/Carpet/CarpetIOASCII/param.ccl +++ b/Carpet/CarpetIOASCII/param.ccl @@ -1,5 +1,5 @@ # Parameter definitions for thorn CarpetIOASCII -# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/param.ccl,v 1.3 2001/12/14 17:59:54 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/param.ccl,v 1.4 2001/12/17 13:34:02 schnetter Exp $ @@ -45,6 +45,10 @@ BOOLEAN separate_grids "Separate grid levels in the output file by additional em { } "yes" +BOOLEAN separate_components "Separate grid components in the output file by additional empty lines" +{ +} "no" + CCTK_STRING outdir1D "Name of 1D ASCII output directory, overrides outdir" STEERABLE = ALWAYS diff --git a/Carpet/CarpetIOASCII/src/ioascii.cc b/Carpet/CarpetIOASCII/src/ioascii.cc index ce063b4f2..6db6e7f05 100644 --- a/Carpet/CarpetIOASCII/src/ioascii.cc +++ b/Carpet/CarpetIOASCII/src/ioascii.cc @@ -25,7 +25,7 @@ #include "ioascii.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/src/ioascii.cc,v 1.24 2001/12/14 17:59:54 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/src/ioascii.cc,v 1.25 2001/12/17 13:34:03 schnetter Exp $"; @@ -337,6 +337,15 @@ int CarpetIOASCII<outdim> data->write_ascii (file, cgh->cctk_iteration, offset1, dirs, tl, reflevel, component, mglevel); + // Append EOL after every component + if (CCTK_MyProc(cgh)==0) { + if (separate_components) { + assert (file.good()); + file << endl; + } + } + assert (file.good()); + } END_COMPONENT_LOOP(cgh); // Append EOL after every complete set of components |