aboutsummaryrefslogtreecommitdiff
path: root/Carpet
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2007-03-17 16:11:00 +0000
committerErik Schnetter <schnetter@cct.lsu.edu>2007-03-17 16:11:00 +0000
commit02a6aedcf1a11b4d18c9701c3581597d911c58ce (patch)
tree90738b9219c6f07f8c62eae6e19d88bdb06a7b38 /Carpet
parent9d6a2dc0515e4249c54176287d18b94682404514 (diff)
CarpetRegrid2: Regrid only if the tracked objects have moved sufficiently
Implement this also when for regridding in level mode. darcs-hash:20070317161135-dae7b-12db8cca8c7beb2550609c58c32232cf29918f5d.gz
Diffstat (limited to 'Carpet')
-rw-r--r--Carpet/CarpetRegrid2/src/regrid.cc35
1 files changed, 35 insertions, 0 deletions
diff --git a/Carpet/CarpetRegrid2/src/regrid.cc b/Carpet/CarpetRegrid2/src/regrid.cc
index 9ee669564..f7aa8c6b2 100644
--- a/Carpet/CarpetRegrid2/src/regrid.cc
+++ b/Carpet/CarpetRegrid2/src/regrid.cc
@@ -656,6 +656,34 @@ namespace CarpetRegrid2 {
cctk_iteration > * last_iteration));
}
}
+
+ if (do_recompose and cctk_iteration != 0) {
+ // Regrid only if the positions have changed sufficiently
+ do_recompose = false;
+ for (int n = 0; n < num_centres; ++ n) {
+ CCTK_REAL const dist2 =
+ pow (position_x[n] - old_position_x[n], 2) +
+ pow (position_y[n] - old_position_y[n], 2) +
+ pow (position_z[n] - old_position_z[n], 2);
+ CCTK_REAL mindist;
+ switch (n) {
+ case 0: mindist = movement_threshold_1; break;
+ case 1: mindist = movement_threshold_2; break;
+ case 2: mindist = movement_threshold_3; break;
+ case 3: mindist = movement_threshold_4; break;
+ case 4: mindist = movement_threshold_5; break;
+ case 5: mindist = movement_threshold_6; break;
+ case 6: mindist = movement_threshold_7; break;
+ case 7: mindist = movement_threshold_8; break;
+ case 8: mindist = movement_threshold_9; break;
+ case 9: mindist = movement_threshold_10; break;
+ default: assert (0);
+ }
+ do_recompose = dist2 >= pow (mindist, 2);
+ if (do_recompose) break;
+ } // for n
+ }
+
if (do_recompose) {
* last_iteration = cctk_iteration;
}
@@ -704,6 +732,13 @@ namespace CarpetRegrid2 {
// Make multigrid aware
Carpet::MakeMultigridBoxesMaps (cctkGH, regsss, regssss);
+ // Remember current positions
+ for (int n = 0; n < num_centres; ++ n) {
+ old_position_x[n] = position_x[n];
+ old_position_y[n] = position_y[n];
+ old_position_z[n] = position_z[n];
+ }
+
} // if do_recompose
return do_recompose;