diff options
author | Erik Schnetter <schnetter@aei.mpg.de> | 2005-06-01 14:42:00 +0000 |
---|---|---|
committer | Erik Schnetter <schnetter@aei.mpg.de> | 2005-06-01 14:42:00 +0000 |
commit | d5c046bcb16ae8e4f307c14405196e6663187dbf (patch) | |
tree | e13e898d77c52d43df434c5540f5639bf64414ff /Carpet/CarpetRegrid/src | |
parent | 78dcb9869dc007983e4906e7cb5a6ecf51727149 (diff) |
CarpetRegrid: Better error messages for wrong refinement specifications
Check that there are no more than Carpet::max_refinement_levels-1
refinement levels specified, and abort with an error message if so.
When aligning the grid size to the outer boundary, align lower and
upper boundary at the same time. Otherwise there is an intermediate
grid size which may not be a multiple of the grid spacing.
darcs-hash:20050601144240-891bb-a558598231e19322eba7f02339b767c92c603edf.gz
Diffstat (limited to 'Carpet/CarpetRegrid/src')
-rw-r--r-- | Carpet/CarpetRegrid/src/manualcoordinatelist.cc | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/Carpet/CarpetRegrid/src/manualcoordinatelist.cc b/Carpet/CarpetRegrid/src/manualcoordinatelist.cc index b444549d4..e2c3b946c 100644 --- a/Carpet/CarpetRegrid/src/manualcoordinatelist.cc +++ b/Carpet/CarpetRegrid/src/manualcoordinatelist.cc @@ -65,6 +65,9 @@ namespace CarpetRegrid { } catch (input_error) { CCTK_WARN (0, "Could not parse parameter \"coordinates\""); } + if (newbbss.size() >= spacereffacts.size()) { + CCTK_WARN (0, "Parameter \"coordinates\" defines too many refinement levels; at most Carpet::max_refinement_levels - 1 may be defined"); + } } vector<vector<bbvect> > newobss; @@ -75,31 +78,28 @@ 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); for (size_t c=0; c<newobss.at(rl).size(); ++c) { for (int d=0; d<dim; ++d) { assert (mglevel==0); - rvect const spacing = base_spacing * ipow((CCTK_REAL)mgfact, basemglevel) / spacereffacts.at(rl+1); + 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]) { - 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] / spacereffacts.at(rl)[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]) { - 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); } + newbbss.at(rl).at(c) = rbbox(lo, up, str); } } } @@ -113,6 +113,9 @@ namespace CarpetRegrid { } catch (input_error) { CCTK_WARN (0, "Could not parse parameter \"outerbounds\""); } + if (newobss.size() >= spacereffacts.size()) { + CCTK_WARN (0, "Parameter \"outerbounds\" defines too many refinement levels; at most Carpet::max_refinement_levels - 1 may be defined"); + } bool good = newobss.size() == newbbss.size(); if (good) { for (size_t rl=0; rl<newobss.size(); ++rl) { |