aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2013-04-04 12:19:13 -0400
committerErik Schnetter <schnetter@gmail.com>2013-04-04 12:19:13 -0400
commit3f183ce4a972d3ae34da4e830299af9a67a9ef3e (patch)
treeab84fddf2b7a9754d69fe08e102783ff5e4ac187 /Carpet/Carpet
parent7332bf6500d66a183beddd8078c864cc39bdafd0 (diff)
Carpet: Don't call Requirements when only asking about allocated storage
When CCTK_GroupStorage{De,In}crease is called to only inquire about storage (and not modify it), don't call the Requirements thorn.
Diffstat (limited to 'Carpet/Carpet')
-rw-r--r--Carpet/Carpet/src/Storage.cc51
1 files changed, 29 insertions, 22 deletions
diff --git a/Carpet/Carpet/src/Storage.cc b/Carpet/Carpet/src/Storage.cc
index d6ec2260a..f8f6f3516 100644
--- a/Carpet/Carpet/src/Storage.cc
+++ b/Carpet/Carpet/src/Storage.cc
@@ -59,6 +59,35 @@ namespace Carpet {
assert (tls[n] >= 0);
}
+#ifdef REQUIREMENTS_HH
+ vector<int> vgroups, vtimelevels;
+ vgroups.reserve(n_groups);
+ vtimelevels.reserve(n_groups);
+ for (int i=0; i<n_groups; ++i) {
+ int const gi = groups[i];
+ int const ml = 0;
+ int const grouptype = CCTK_GroupTypeI(gi);
+ bool const is_array = grouptype != CCTK_GF;
+ bool const all_rl = is_meta_mode() or is_global_mode();
+ int const min_rl = is_array ? 0 : all_rl ? 0 : reflevel;
+ int const max_rl = is_array ? 1 : all_rl ? reflevels : reflevel+1;
+ int const ntls = tls[i];
+ bool do_change = false;
+ for (int rl=min_rl; rl<max_rl; ++rl) {
+ int const ctls = groupdata.AT(gi).activetimelevels.AT(ml).AT(rl);
+ do_change = do_change or
+ (inc and ctls < ntls) or (not inc and ctls > ntls);
+ }
+ if (do_change) {
+ vgroups.push_back(gi);
+ vtimelevels.push_back(ntls);
+ }
+ }
+ if (not vgroups.empty()) {
+ Requirements::ChangeStorage(vgroups, vtimelevels, reflevel);
+ }
+#endif
+
bool const can_do = is_meta_mode() or is_global_mode() or is_level_mode();
bool const all_ml = is_meta_mode();
int const min_ml = all_ml ? 0 : mglevel;
@@ -219,28 +248,6 @@ namespace Carpet {
min_num_timelevels = 0;
}
-#ifdef REQUIREMENTS_HH
- vector<int> vgroups(n_groups), vtimelevels(n_groups);
- for (int i=0; i<n_groups; ++i) {
- int const gi = groups[i];
- int const ml = 0;
- int const grouptype = CCTK_GroupTypeI(gi);
- bool const is_array = grouptype != CCTK_GF;
- bool const all_rl = is_meta_mode() or is_global_mode();
- int const min_rl = is_array ? 0 : all_rl ? 0 : reflevel;
- int const max_rl = is_array ? 1 : all_rl ? reflevels : reflevel+1;
- int const ntls = groupdata.AT(gi).activetimelevels.AT(ml).AT(min_rl);
- for (int rl=min_rl; rl<max_rl; ++rl) {
- // TODO: We assume here that all refinement levels have the
- // same number of active time levels -- this may not be true
- assert (groupdata.AT(gi).activetimelevels.AT(ml).AT(rl) == ntls);
- }
- vgroups.AT(i) = gi;
- vtimelevels.AT(i) = ntls;
- }
- Requirements::ChangeStorage(vgroups, vtimelevels, reflevel);
-#endif
-
return do_allow_past_timelevels ?
min_num_timelevels : min(1,min_num_timelevels);
}