aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetRegrid/src
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@aei.mpg.de>2005-06-01 14:42:00 +0000
committerErik Schnetter <schnetter@aei.mpg.de>2005-06-01 14:42:00 +0000
commitd5c046bcb16ae8e4f307c14405196e6663187dbf (patch)
treee13e898d77c52d43df434c5540f5639bf64414ff /Carpet/CarpetRegrid/src
parent78dcb9869dc007983e4906e7cb5a6ecf51727149 (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.cc23
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) {