diff options
author | Erik Schnetter <schnetter@cct.lsu.edu> | 2006-05-01 16:13:00 +0000 |
---|---|---|
committer | Erik Schnetter <schnetter@cct.lsu.edu> | 2006-05-01 16:13:00 +0000 |
commit | 10211277b70e043275b1d081d970e8745955613a (patch) | |
tree | cc9093a5d1e919c863e2d81ca294acdceab74fa6 /Carpet/CarpetRegrid | |
parent | 022c13aa3b2f902df69174950af3509660b1cbaf (diff) |
CarpetRegrid: Take convergence levels into account for grid spacings
Take the convergence level into account when calculating the grid
spacing with smart outer boundaries.
darcs-hash:20060501161315-dae7b-4d4525c2b12207bbabf3214c18b1af6fff9b1e14.gz
Diffstat (limited to 'Carpet/CarpetRegrid')
-rw-r--r-- | Carpet/CarpetRegrid/src/manualcoordinatelist.cc | 49 |
1 files changed, 28 insertions, 21 deletions
diff --git a/Carpet/CarpetRegrid/src/manualcoordinatelist.cc b/Carpet/CarpetRegrid/src/manualcoordinatelist.cc index d98dc4ac0..bf3e382f4 100644 --- a/Carpet/CarpetRegrid/src/manualcoordinatelist.cc +++ b/Carpet/CarpetRegrid/src/manualcoordinatelist.cc @@ -85,32 +85,39 @@ namespace CarpetRegrid { newobss.resize(newbbss.size()); for (size_t rl=0; rl<newobss.size(); ++rl) { - newobss.at(rl).resize(newbbss.at(rl).size()); ivect const spacereffact = spacereffacts.at(rl+1); + assert (mglevel==0); + rvect const spacing = + base_spacing * ipow((CCTK_REAL)mgfact, basemglevel) / spacereffact; + ierr = ConvertFromPhysicalBoundary + (dim, &physical_min[0], &physical_max[0], + &interior_min[0], &interior_max[0], + &exterior_min[0], &exterior_max[0], &spacing[0]); + assert (!ierr); + + newobss.at(rl).resize(newbbss.at(rl).size()); for (size_t c=0; c<newobss.at(rl).size(); ++c) { + rvect lo = newbbss.at(rl).at(c).lower(); + rvect up = newbbss.at(rl).at(c).upper(); + rvect str = newbbss.at(rl).at(c).stride(); + bbvect ob = newobss.at(rl).at(c); for (int d=0; d<dim; ++d) { - assert (mglevel==0); - rvect const spacing = base_spacing * ipow((CCTK_REAL)mgfact, basemglevel) / spacereffact; - ierr = ConvertFromPhysicalBoundary - (dim, &physical_min[0], &physical_max[0], - &interior_min[0], &interior_max[0], - &exterior_min[0], &exterior_max[0], &spacing[0]); - assert (!ierr); - newobss.at(rl).at(c)[d][0] = abs(newbbss.at(rl).at(c).lower()[d] - physical_min[d]) < 1.0e-6 * spacing[d]; - rvect lo = newbbss.at(rl).at(c).lower(); - rvect up = newbbss.at(rl).at(c).upper(); - rvect str = newbbss.at(rl).at(c).stride(); - if (newobss.at(rl).at(c)[d][0]) { + ob[d][0] = (abs(newbbss.at(rl).at(c).lower()[d] - physical_min[d]) + < 1.0e-6 * spacing[d]); + if (ob[d][0]) { lo[d] = exterior_min[d]; } - newobss.at(rl).at(c)[d][1] = abs(newbbss.at(rl).at(c).upper()[d] - physical_max[d]) < 1.0e-6 * base_spacing[d] / spacereffact[d]; - if (newobss.at(rl).at(c)[d][1]) { + ob[d][1] = (abs(newbbss.at(rl).at(c).upper()[d] - physical_max[d]) + < 1.0e-6 * base_spacing[d] / spacereffact[d]); + if (ob[d][1]) { up[d] = exterior_max[d]; } - newbbss.at(rl).at(c) = rbbox(lo, up, str); + str[d] *= ipow((CCTK_REAL)mgfact, basemglevel); } - } - } + newbbss.at(rl).at(c) = rbbox(lo, up, str); + newobss.at(rl).at(c) = ob; + } // for c + } // for rl } else { // if ! smart_outer_boundaries @@ -160,9 +167,9 @@ namespace CarpetRegrid { bbvect const & ob = newobss.at(rl-1).at(c); // TODO: // assert (domain_from_coordbase); - // TODO: why can basemglevel not be used here? - // rvect const spacing = base_spacing * ipow(CCTK_REAL(mgfact), basemglevel) / ipow(reffact, rl); - rvect const spacing = base_spacing / spacereffacts.at(rl); + ivect const spacereffact = spacereffacts.at(rl); + rvect const spacing = + base_spacing * ipow(CCTK_REAL(mgfact), basemglevel) / spacereffact; if (! all(abs(ext.stride() - spacing) < spacing * 1.0e-10)) { assert (dim==3); CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, |