aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetRegrid2/src
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2007-03-11 20:40:00 +0000
committerErik Schnetter <schnetter@cct.lsu.edu>2007-03-11 20:40:00 +0000
commit054755b50795cd280c10d76a9921860fc3d1aee4 (patch)
treeda6357687e1eb94d91ee9b5e6a163d36d8150957 /Carpet/CarpetRegrid2/src
parent8ef38f453db8a179985ee32d18bff6d3f36a09c2 (diff)
CarpetRegrid2: Regrid only if the tracked objects have moved sufficiently
Regrid only if the tracked objects have moved a certain minimum distance. darcs-hash:20070311204027-dae7b-7c39e3c51d6b617188b477aed73facd5fe7e6fe8.gz
Diffstat (limited to 'Carpet/CarpetRegrid2/src')
-rw-r--r--Carpet/CarpetRegrid2/src/initialise.cc6
-rw-r--r--Carpet/CarpetRegrid2/src/regrid.cc35
2 files changed, 41 insertions, 0 deletions
diff --git a/Carpet/CarpetRegrid2/src/initialise.cc b/Carpet/CarpetRegrid2/src/initialise.cc
index 3904a1d71..b2b7104db 100644
--- a/Carpet/CarpetRegrid2/src/initialise.cc
+++ b/Carpet/CarpetRegrid2/src/initialise.cc
@@ -134,6 +134,12 @@ namespace CarpetRegrid2 {
radius[index2 (lsh, rl, 9)] = radius_10[rl];
}
}
+
+ 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];
+ }
}
} // namespace CarpetRegrid2
diff --git a/Carpet/CarpetRegrid2/src/regrid.cc b/Carpet/CarpetRegrid2/src/regrid.cc
index 7ac61c7b4..9ee669564 100644
--- a/Carpet/CarpetRegrid2/src/regrid.cc
+++ b/Carpet/CarpetRegrid2/src/regrid.cc
@@ -561,6 +561,34 @@ namespace CarpetRegrid2 {
Carpet::map > * last_map))));
}
}
+
+ 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;
* last_map = Carpet::map;
@@ -583,6 +611,13 @@ namespace CarpetRegrid2 {
// Make multigrid aware
Carpet::MakeMultigridBoxes (cctkGH, regss, regsss);
+ // 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;