diff options
author | jthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5> | 2003-07-25 11:52:38 +0000 |
---|---|---|
committer | jthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5> | 2003-07-25 11:52:38 +0000 |
commit | d05fe9cac0ba64f77a2b163949278a400c5c1dc8 (patch) | |
tree | 22905ba51f577d7965fd5f9f4cbc8feecb5944d3 /src | |
parent | 09bf945c4c079b3f81dc748d1974596a1de34f16 (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.cc | 1 | ||||
-rw-r--r-- | src/patch/patch_system.cc | 81 | ||||
-rw-r--r-- | src/patch/patch_system.hh | 5 | ||||
-rw-r--r-- | src/patch/patch_system_info.hh | 2 |
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 // |