aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5>2003-07-25 11:52:38 +0000
committerjthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5>2003-07-25 11:52:38 +0000
commitd05fe9cac0ba64f77a2b163949278a400c5c1dc8 (patch)
tree22905ba51f577d7965fd5f9f4cbc8feecb5944d3 /src
parent09bf945c4c079b3f81dc748d1974596a1de34f16 (diff)
add +xz quadrant (mirrored) patch system type
git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinAnalysis/AHFinderDirect/trunk@1141 f88db872-0e4f-0410-b76b-b9085cfa78c5
Diffstat (limited to 'src')
-rw-r--r--src/driver/BH_diagnostics.cc1
-rw-r--r--src/patch/patch_system.cc81
-rw-r--r--src/patch/patch_system.hh5
-rw-r--r--src/patch/patch_system_info.hh2
4 files changed, 89 insertions, 0 deletions
diff --git a/src/driver/BH_diagnostics.cc b/src/driver/BH_diagnostics.cc
index 6d262a6..0a8b8e1 100644
--- a/src/driver/BH_diagnostics.cc
+++ b/src/driver/BH_diagnostics.cc
@@ -193,6 +193,7 @@ case patch_system::patch_system__plus_xy_quadrant_rotating:
min_x = REFLECT(ps.origin_x(), max_x);
min_y = REFLECT(ps.origin_y(), max_y);
break;
+case patch_system::patch_system__plus_xz_quadrant_mirrored:
case patch_system::patch_system__plus_xz_quadrant_rotating:
min_x = REFLECT(ps.origin_x(), max_x);
min_z = REFLECT(ps.origin_z(), max_z);
diff --git a/src/patch/patch_system.cc b/src/patch/patch_system.cc
index b136319..5b1d02d 100644
--- a/src/patch/patch_system.cc
+++ b/src/patch/patch_system.cc
@@ -10,6 +10,7 @@
// patch_system::setup_ghost_zones__plus_z_hemisphere
// patch_system::setup_ghost_zones__plus_xy_quadrant_mirrored
// patch_system::setup_ghost_zones__plus_xy_quadrant_rotating
+// patch_system::setup_ghost_zones__plus_xz_quadrant_mirrored
// patch_system::setup_ghost_zones__plus_xz_quadrant_rotating
// patch_system::setup_ghost_zones__plus_xyz_octant_mirrored
// patch_system::setup_ghost_zones__plus_xyz_octant_rotating
@@ -240,6 +241,20 @@ case patch_system__plus_xy_quadrant_rotating:
print_detailed_msg_flag);
break;
+case patch_system__plus_xz_quadrant_mirrored:
+ create_patches(patch_system_info::plus_xz_quadrant::patch_info_array,
+ ghost_zone_width, patch_extend_width,
+ N_zones_per_right_angle,
+ print_detailed_msg_flag);
+ setup_gridfn_storage(min_gfn_in, max_gfn_in,
+ ghosted_min_gfn_in, ghosted_max_gfn_in,
+ print_detailed_msg_flag);
+ setup_ghost_zones__plus_xz_quadrant_mirrored(patch_overlap_width,
+ ip_interp_handle,
+ ip_interp_par_table_handle,
+ print_detailed_msg_flag);
+ break;
+
case patch_system__plus_xz_quadrant_rotating:
create_patches(patch_system_info::plus_xz_quadrant::patch_info_array,
ghost_zone_width, patch_extend_width,
@@ -909,6 +924,65 @@ assert_all_ghost_zones_fully_setup();
//
// This function sets up (constructs and interlinks) the ghost zones
+// for a +xz quadrant (mirrored) patch system.
+//
+void patch_system::setup_ghost_zones__plus_xz_quadrant_mirrored
+ (int patch_overlap_width,
+ int ip_interp_handle, int ip_interp_par_table_handle,
+ bool print_msg_flag)
+{
+if (print_msg_flag)
+ then CCTK_VInfo(CCTK_THORNSTRING,
+ " setting up +xz quadrant (mirrored) ghost zones");
+
+patch& pz = ith_patch(patch_system_info::plus_xz_quadrant::patch_number__pz);
+patch& px = ith_patch(patch_system_info::plus_xz_quadrant::patch_number__px);
+patch& py = ith_patch(patch_system_info::plus_xz_quadrant::patch_number__py);
+patch& my = ith_patch(patch_system_info::plus_xz_quadrant::patch_number__my);
+
+// create the ghost zones
+if (print_msg_flag)
+ then CCTK_VInfo(CCTK_THORNSTRING,
+ " creating ghost zones");
+create_interpatch_ghost_zones(pz, px, patch_overlap_width);
+create_interpatch_ghost_zones(pz, py, patch_overlap_width);
+create_interpatch_ghost_zones(pz, my, patch_overlap_width);
+create_interpatch_ghost_zones(px, py, patch_overlap_width);
+create_interpatch_ghost_zones(px, my, patch_overlap_width);
+pz.create_mirror_symmetry_ghost_zone(pz.min_sigma_patch_edge());
+px.create_mirror_symmetry_ghost_zone(px.max_rho_patch_edge());
+py.create_mirror_symmetry_ghost_zone(py.max_rho_patch_edge());
+py.create_mirror_symmetry_ghost_zone(py.max_sigma_patch_edge());
+my.create_mirror_symmetry_ghost_zone(my.min_rho_patch_edge());
+my.create_mirror_symmetry_ghost_zone(my.min_sigma_patch_edge());
+
+// finish setting up the interpatch ghost zones
+if (print_msg_flag)
+ then CCTK_VInfo(CCTK_THORNSTRING,
+ " finishing interpatch setup");
+finish_interpatch_setup(pz, px,
+ patch_overlap_width,
+ ip_interp_handle, ip_interp_par_table_handle);
+finish_interpatch_setup(pz, py,
+ patch_overlap_width,
+ ip_interp_handle, ip_interp_par_table_handle);
+finish_interpatch_setup(pz, my,
+ patch_overlap_width,
+ ip_interp_handle, ip_interp_par_table_handle);
+finish_interpatch_setup(px, py,
+ patch_overlap_width,
+ ip_interp_handle, ip_interp_par_table_handle);
+finish_interpatch_setup(px, my,
+ patch_overlap_width,
+ ip_interp_handle, ip_interp_par_table_handle);
+
+assert_all_ghost_zones_fully_setup();
+}
+
+//******************************************************************************
+
+//
+// This function sets up (constructs and interlinks) the ghost zones
// for a +xz quadrant (rotating) patch system.
//
void patch_system::setup_ghost_zones__plus_xz_quadrant_rotating
@@ -1167,6 +1241,7 @@ case patch_system__plus_z_hemisphere:
case patch_system__plus_xy_quadrant_mirrored:
case patch_system__plus_xy_quadrant_rotating:
return patch_system_info::plus_xy_quadrant::N_patches;
+case patch_system__plus_xz_quadrant_mirrored:
case patch_system__plus_xz_quadrant_rotating:
return patch_system_info::plus_xz_quadrant::N_patches;
case patch_system__plus_xyz_octant_mirrored:
@@ -1195,6 +1270,7 @@ case patch_system__full_sphere: return "full sphere";
case patch_system__plus_z_hemisphere: return "+z hemisphere";
case patch_system__plus_xy_quadrant_mirrored: return "+xy quadrant (mirrored)";
case patch_system__plus_xy_quadrant_rotating: return "+xy quadrant (rotating)";
+case patch_system__plus_xz_quadrant_mirrored: return "+xz quadrant (mirrored)";
case patch_system__plus_xz_quadrant_rotating: return "+xz quadrant (rotating)";
case patch_system__plus_xyz_octant_mirrored: return "+xyz octant (mirrored)";
case patch_system__plus_xyz_octant_rotating: return "+xyz octant (rotating)";
@@ -1224,6 +1300,8 @@ else if (STRING_EQUAL(name_in, "+xy quadrant (mirrored)"))
then return patch_system__plus_xy_quadrant_mirrored;
else if (STRING_EQUAL(name_in, "+xy quadrant (rotating)"))
then return patch_system__plus_xy_quadrant_rotating;
+else if (STRING_EQUAL(name_in, "+xz quadrant (mirrored)"))
+ then return patch_system__plus_xz_quadrant_mirrored;
else if (STRING_EQUAL(name_in, "+xz quadrant (rotating)"))
then return patch_system__plus_xz_quadrant_rotating;
else if (STRING_EQUAL(name_in, "+xyz octant (mirrored)"))
@@ -1569,6 +1647,7 @@ case patch_system__plus_xy_quadrant_mirrored:
case patch_system__plus_xy_quadrant_rotating:
arc_length *= ((plane[0] == 'x') && (plane[1] == 'y')) ? 4.0 : 2.0;
break;
+case patch_system__plus_xz_quadrant_mirrored:
case patch_system__plus_xz_quadrant_rotating:
arc_length *= ((plane[0] == 'x') && (plane[1] == 'z')) ? 4.0 : 2.0;
break;
@@ -1653,6 +1732,7 @@ case patch_system__plus_xy_quadrant_rotating:
integral *= src_gfn_is_even_across_xz_plane ? 2.0 : 0.0;
integral *= src_gfn_is_even_across_yz_plane ? 2.0 : 0.0;
break;
+case patch_system__plus_xz_quadrant_mirrored:
case patch_system__plus_xz_quadrant_rotating:
integral *= src_gfn_is_even_across_xy_plane ? 2.0 : 0.0;
integral *= src_gfn_is_even_across_yz_plane ? 2.0 : 0.0;
@@ -1757,6 +1837,7 @@ case patch_system__plus_xy_quadrant_rotating:
x = fabs(x);
y = fabs(y);
break;
+case patch_system__plus_xz_quadrant_mirrored:
case patch_system__plus_xz_quadrant_rotating:
x = fabs(x);
z = fabs(z);
diff --git a/src/patch/patch_system.hh b/src/patch/patch_system.hh
index 03dd02d..070eb56 100644
--- a/src/patch/patch_system.hh
+++ b/src/patch/patch_system.hh
@@ -50,6 +50,7 @@ public:
patch_system__plus_z_hemisphere,
patch_system__plus_xy_quadrant_mirrored,
patch_system__plus_xy_quadrant_rotating,
+ patch_system__plus_xz_quadrant_mirrored,
patch_system__plus_xz_quadrant_rotating,
patch_system__plus_xyz_octant_mirrored,
patch_system__plus_xyz_octant_rotating
@@ -526,6 +527,10 @@ private:
(int patch_overlap_width,
int ip_interp_handle, int ip_interp_par_table_handle,
bool print_msg_flag);
+ void setup_ghost_zones__plus_xz_quadrant_mirrored
+ (int patch_overlap_width,
+ int ip_interp_handle, int ip_interp_par_table_handle,
+ bool print_msg_flag);
void setup_ghost_zones__plus_xz_quadrant_rotating
(int patch_overlap_width,
int ip_interp_handle, int ip_interp_par_table_handle,
diff --git a/src/patch/patch_system_info.hh b/src/patch/patch_system_info.hh
index cf7a9d2..538555f 100644
--- a/src/patch/patch_system_info.hh
+++ b/src/patch/patch_system_info.hh
@@ -128,6 +128,8 @@ namespace plus_xy_quadrant
//
// +[xz] "horizontal" quarter-grid (quadrant) patch system
+// two types of boundary conditions
+// ... mirror symmetry across x=0 plane, z=0 plane
// ... 180 degree periodic rotation symmetry about z axis,
// mirror symmetry across z=0 plane
//