diff options
author | Erik Schnetter <schnetter@cct.lsu.edu> | 2007-03-11 20:40:00 +0000 |
---|---|---|
committer | Erik Schnetter <schnetter@cct.lsu.edu> | 2007-03-11 20:40:00 +0000 |
commit | 054755b50795cd280c10d76a9921860fc3d1aee4 (patch) | |
tree | da6357687e1eb94d91ee9b5e6a163d36d8150957 /Carpet/CarpetRegrid2/src | |
parent | 8ef38f453db8a179985ee32d18bff6d3f36a09c2 (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.cc | 6 | ||||
-rw-r--r-- | Carpet/CarpetRegrid2/src/regrid.cc | 35 |
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; |