aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet/src/Recompose.cc
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2008-03-19 16:43:33 -0500
committerErik Schnetter <schnetter@cct.lsu.edu>2008-03-19 16:43:33 -0500
commit0c7b8ebc85e32219035c8c615fb120f10ffaffb4 (patch)
tree81dc6dd5c3318444b540b156188a3ec9e3dd0b77 /Carpet/Carpet/src/Recompose.cc
parent827cb8491c69b1f8b742b08d62ecdbc6e4fb3f11 (diff)
Enhance support for multi-patch simulations
Carpet: Ensure that at most one of GetDomainSpecificatio or MultiPatch_GetDomainSpecification is defined. Allow the boundary case of having zero regions on a refinement level. CarpetLib: Allow the boundary case of having zero components on a patch, if there are still more than zero components overall. CarpetIOASCII: Loop over the components using explicit light-weight for loops instead of Carpet's looping macros. This is faster, since less state information needs to be updated. Correct an inconsistency in converting between integer indices and coordinates in multi-patch simulations. CarpetRegrid2: Take multi-patch systems into account.
Diffstat (limited to 'Carpet/Carpet/src/Recompose.cc')
-rw-r--r--Carpet/Carpet/src/Recompose.cc14
1 files changed, 10 insertions, 4 deletions
diff --git a/Carpet/Carpet/src/Recompose.cc b/Carpet/Carpet/src/Recompose.cc
index 3027290de..4da7afb73 100644
--- a/Carpet/Carpet/src/Recompose.cc
+++ b/Carpet/Carpet/src/Recompose.cc
@@ -91,13 +91,17 @@ namespace Carpet {
}
assert ((int)regsss.at(0).size() <= maxreflevels);
for (int ml=0; ml<(int)regsss.size(); ++ml) {
+ int num_regions = 0;
for (int rl=0; rl<(int)regsss.at(0).size(); ++rl) {
// No empty levels
- assert (regsss.at(ml).at(rl).size() > 0);
+ // (but allow some empty maps)
+ // assert (regsss.at(ml).at(rl).size() > 0);
+ num_regions += regsss.at(ml).at(rl).size();
for (int c=0; c<(int)regsss.at(ml).at(rl).size(); ++c) {
// Check sizes
- // Do allow processors with zero grid points
-// assert (all(regsss.at(rl).at(c).at(ml).extent.lower() <= regsss.at(rl).at(c).at(ml).extent.upper()));
+ // (but allow processors with zero grid points)
+ // assert (all(regsss.at(rl).at(c).at(ml).extent.lower() <=
+ // regsss.at(rl).at(c).at(ml).extent.upper()));
// Check strides
const ivect str
= (maxspacereflevelfact / spacereffacts.at(rl) * ipow(mgfact, ml));
@@ -107,6 +111,8 @@ namespace Carpet {
assert (all(regsss.at(ml).at(rl).at(c).extent.upper() % str == 0));
}
}
+ // No empty levels
+ assert (num_regions > 0);
}
}
@@ -782,7 +788,7 @@ namespace Carpet {
}
for (int c=0; c<hh->components(rl); ++c) {
++ num_comps;
- dh::dboxes const & b = dd->boxes.AT(m).AT(rl).AT(c);
+ dh::dboxes const & b = dd->boxes.AT(ml).AT(rl).AT(c);
num_active_mem_points += num_gfs * b.active.size();
num_owned_mem_points += num_gfs * b.owned.size();
num_total_mem_points += num_gfs * b.exterior.size();