diff options
author | Erik Schnetter <schnetter@cct.lsu.edu> | 2007-03-17 16:11:00 +0000 |
---|---|---|
committer | Erik Schnetter <schnetter@cct.lsu.edu> | 2007-03-17 16:11:00 +0000 |
commit | 02a6aedcf1a11b4d18c9701c3581597d911c58ce (patch) | |
tree | 90738b9219c6f07f8c62eae6e19d88bdb06a7b38 /Carpet | |
parent | 9d6a2dc0515e4249c54176287d18b94682404514 (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.cc | 35 |
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; |