aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschnetter <>2004-04-16 16:41:00 +0000
committerschnetter <>2004-04-16 16:41:00 +0000
commit56a0eed16eeffbfebca849a05f310e5186d2e4f1 (patch)
tree39f58423d628012567ffeb1b2cdafb997d5c7b17
parenta77db777ce4a0c7532d16bbaa24a5c6eab41c93e (diff)
Take symmetry_? parameters into account when setting up a moving
Take symmetry_? parameters into account when setting up a moving refinement region. darcs-hash:20040416164133-07bb3-cf997ce94e52928bb5b99706e28ee155009e7d94.gz
-rw-r--r--Carpet/CarpetRegrid/src/moving.cc18
1 files changed, 11 insertions, 7 deletions
diff --git a/Carpet/CarpetRegrid/src/moving.cc b/Carpet/CarpetRegrid/src/moving.cc
index c4bf3abc6..411286940 100644
--- a/Carpet/CarpetRegrid/src/moving.cc
+++ b/Carpet/CarpetRegrid/src/moving.cc
@@ -9,7 +9,7 @@
#include "regrid.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/moving.cc,v 1.1 2004/04/14 22:19:44 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/moving.cc,v 1.2 2004/04/16 18:41:33 schnetter Exp $";
CCTK_FILEVERSION(Carpet_CarpetRegrid_moving_cc);
}
@@ -52,6 +52,9 @@ namespace CarpetRegrid {
obss.resize (refinement_levels);
pss.resize (refinement_levels);
+ bvect const symmetric (symmetry_x, symmetry_y, symmetry_z);
+ ivect const zero(0);
+
ivect rstr = hh.baseextent.stride();
ivect rlb = hh.baseextent.lower();
ivect rub = hh.baseextent.upper();
@@ -67,14 +70,15 @@ namespace CarpetRegrid {
rstr /= hh.reffact;
// calculate new extent
- rvect pos;
- pos[0] = moving_centre_x + moving_circle_radius * cos(2*M_PI * moving_circle_frequency * cctk_time);
- pos[1] = moving_centre_y + moving_circle_radius * sin(2*M_PI * moving_circle_frequency * cctk_time);
- pos[2] = moving_centre_z;
+ CCTK_REAL const argument = 2*M_PI * moving_circle_frequency * cctk_time;
+ rvect const pos
+ (moving_centre_x + moving_circle_radius * cos(argument),
+ moving_centre_y + moving_circle_radius * sin(argument),
+ moving_centre_z);
ivect const centre = floor(rvect(rub - rlb) * pos / rstr + 0.5) * rstr;
ivect const radius = floor(rvect(rub - rlb) * moving_region_radius / rstr + 0.5) * rstr;
- rlb = oldrlb + centre - radius;
- rub = oldrlb + centre + radius;
+ rlb = oldrlb + symmetric.ifthen(zero , centre - radius);
+ rub = oldrlb + symmetric.ifthen(radius, centre + radius);
assert (all(rlb >= oldrlb && rub <= oldrub));
ibbox const bb (rlb, rub, rstr);