aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/3patch.par2
-rw-r--r--par/misner-init.par2
-rw-r--r--par/misner-run.par2
-rw-r--r--param.ccl41
-rw-r--r--run/test-ahfinderdirect/Kerr-offset/large-Jacobian.par6
-rw-r--r--run/test-ahfinderdirect/Kerr-offset/large-ahf-dx.par6
-rw-r--r--run/test-ahfinderdirect/Kerr-offset/large-ahf-e8.par6
-rw-r--r--run/test-ahfinderdirect/Kerr-offset/large-ahf-np.par6
-rw-r--r--run/test-ahfinderdirect/Kerr-offset/large-ahf.par6
-rw-r--r--run/test-ahfinderdirect/Kerr-offset/large.par6
-rw-r--r--run/test-ahfinderdirect/Kerr-offset/small-Jacobian.par6
-rw-r--r--run/test-ahfinderdirect/Kerr-offset/small-ahf-badguess-2.5.par6
-rw-r--r--run/test-ahfinderdirect/Kerr-offset/small-ahf-badguess.par6
-rw-r--r--run/test-ahfinderdirect/Kerr-offset/small-ahf.par6
-rw-r--r--run/test-ahfinderdirect/Kerr-offset/small.par6
-rw-r--r--run/test-ahfinderdirect/Schw-hardwire/large-ahf-posn.par6
-rw-r--r--run/test-ahfinderdirect/Schw-hardwire/large-ahf.par6
-rw-r--r--run/test-ahfinderdirect/Schw-hardwire/large-posn.par6
-rw-r--r--run/test-ahfinderdirect/Schw-hardwire/large.par6
-rw-r--r--run/test-ahfinderdirect/Schw/Schw.par6
-rw-r--r--run/test-ahfinderdirect/Schw/large-ahf-dx8.par6
-rw-r--r--run/test-ahfinderdirect/Schw/large-ahf.par6
-rw-r--r--run/test-ahfinderdirect/Schw/large.par6
-rw-r--r--run/test-ahfinderdirect/Schw/offset-ahf-dx8.par6
-rw-r--r--run/test-ahfinderdirect/Schw/offset-ahf-np6.par6
-rw-r--r--run/test-ahfinderdirect/Schw/offset-ahf-np8.par6
-rw-r--r--run/test-ahfinderdirect/Schw/offset-ahf.par6
-rw-r--r--run/test-ahfinderdirect/Schw/offset.par6
-rw-r--r--run/test-ahfinderdirect/Schw/plus_xyz_octant_mirrored-fn.par55
-rw-r--r--run/test-ahfinderdirect/misc/Kerr.par6
-rw-r--r--run/test-ahfinderdirect/misc/try-5.par2
-rw-r--r--run/test-ahfinderdirect/misc/try-7.5-debug.par2
-rw-r--r--run/test-ahfinderdirect/misc/try-7.5-horizon.par2
-rw-r--r--run/test-ahfinderdirect/misc/try-7.5.par2
-rw-r--r--run/test-ahfinderdirect/misc/try-9.par2
-rw-r--r--run/test-ahfinderdirect/surface/Kerr-dx0.05-template.par8
-rw-r--r--run/test-ahfinderdirect/surface/Kerr-dx0.1-template.par8
-rw-r--r--run/test-ahfinderdirect/surface/Kerr-mass1.5-dx0.1-template.par8
-rw-r--r--run/test-ahfinderdirect/surface/Kerr-spin0-dx0.1-template.par8
-rw-r--r--run/test-ahfinderdirect/surface/Kerr-spin0.8-dx0.1-template.par8
-rw-r--r--run/test-ahfinderdirect/surface/Schw-dx0.1-template.par8
-rw-r--r--run/test-ahfinderdirect/surface/Schw-hardwire-template.par8
-rwxr-xr-xrun/test-ahfinderdirect/surface/doit.run10
-rw-r--r--run/test-ahfinderdirect/test-both-ahfinders/both-ahf.par6
-rw-r--r--run/test-ahfinderdirect/test-both-ahfinders/hemi5-ahf.par6
-rw-r--r--run/test-ahfinderdirect/test-both-ahfinders/hemi5.par6
-rw-r--r--run/test-ahfinderdirect/test-both-ahfinders/try.par6
-rw-r--r--run/test-ahfinderdirect/test-patch-system/derivatives-18.par (renamed from run/test-ahfinderdirect/test-patch-system/derivatives-2.5.par)6
-rw-r--r--run/test-ahfinderdirect/test-patch-system/derivatives-36.par (renamed from run/test-ahfinderdirect/test-patch-system/derivatives-5.par)6
-rw-r--r--run/test-ahfinderdirect/test-patch-system/gridfn.par6
-rw-r--r--run/test-ahfinderdirect/test-patch-system/synchronize-18.par (renamed from run/test-ahfinderdirect/test-patch-system/synchronize-2.5.par)6
-rw-r--r--run/test-ahfinderdirect/test-patch-system/synchronize-36.par (renamed from run/test-ahfinderdirect/test-patch-system/synchronize-5.par)6
-rw-r--r--run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian-fast.par6
-rw-r--r--run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian-order1.par6
-rw-r--r--run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian.par6
-rw-r--r--run/test-both-ahfinders/both-ahf.par6
-rw-r--r--run/test-both-ahfinders/hemi5-ahf.par6
-rw-r--r--run/test-both-ahfinders/hemi5.par6
-rw-r--r--run/test-both-ahfinders/try.par6
-rw-r--r--run/test-patch-system/gridfn.par6
-rw-r--r--run/test-patch-system/synchronize-Jacobian-fast.par6
-rw-r--r--run/test-patch-system/synchronize-Jacobian-order1.par6
-rw-r--r--run/test-patch-system/synchronize-Jacobian.par6
-rw-r--r--src/driver/setup.cc3
-rw-r--r--src/patch/ghost_zone.cc12
-rw-r--r--src/patch/ghost_zone.hh2
-rw-r--r--src/patch/grid.cc24
-rw-r--r--src/patch/grid.hh4
-rw-r--r--src/patch/patch.cc34
-rw-r--r--src/patch/patch.hh8
-rw-r--r--src/patch/patch_info.cc120
-rw-r--r--src/patch/patch_info.hh39
-rw-r--r--src/patch/patch_system.cc301
-rw-r--r--src/patch/patch_system.hh30
-rw-r--r--src/patch/test_patch_system.cc2
75 files changed, 593 insertions, 434 deletions
diff --git a/doc/3patch.par b/doc/3patch.par
index 7905a3e..2957349 100644
--- a/doc/3patch.par
+++ b/doc/3patch.par
@@ -36,7 +36,7 @@ AHFinderDirect::output_ghost_zones_for_h = "true"
AHFinderDirect::h_base_file_name = "3patch.h"
AHFinderDirect::patch_system_type = "+xyz octant"
-AHFinderDirect::delta_drho_dsigma = 4.5
+AHFinderDirect::N_zones_per_right_angle = 20
AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.0
diff --git a/par/misner-init.par b/par/misner-init.par
index a4bb26b..4b74b4a 100644
--- a/par/misner-init.par
+++ b/par/misner-init.par
@@ -84,7 +84,7 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.0
AHFinderDirect::origin_y[1] = 0.0
AHFinderDirect::origin_z[1] = 1.0
-AHFinderDirect::delta_drho_dsigma = 7.5
+AHFinderDirect::N_zones_per_right_angle = 12
AHFinderDirect::initial_guess_method = "coordinate sphere"
AHFinderDirect::initial_guess__coord_sphere__x_center[1] = 0.0
diff --git a/par/misner-run.par b/par/misner-run.par
index 77a3910..3733b4a 100644
--- a/par/misner-run.par
+++ b/par/misner-run.par
@@ -189,7 +189,7 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.0
AHFinderDirect::origin_y[1] = 0.0
AHFinderDirect::origin_z[1] = 1.0
-AHFinderDirect::delta_drho_dsigma = 7.5
+AHFinderDirect::N_zones_per_right_angle = 12
AHFinderDirect::initial_guess_method = "coordinate sphere"
AHFinderDirect::initial_guess__coord_sphere__x_center[1] = 0.0
diff --git a/param.ccl b/param.ccl
index 5ff9cd6..c555b6b 100644
--- a/param.ccl
+++ b/param.ccl
@@ -455,42 +455,55 @@ keyword patch_system_type "what type of patch system should we use?"
# ... 1 if FINITE_DIFF_ORDER is set to 2 in "src/include/config.hh"
# The code checks for this being too small, and reports a fatal error if so.
#
-int N_ghost_points "number of ghost zones on each side of a patch"
+int ghost_zone_width "number of ghost zones on each side of a patch"
{
0:* :: "any integer >= 0"
} 2
-int N_overlap_points \
+#
+# Our code that computes surface integrals over patches (used for
+# computing BH diagnostics like centroids, areas, masses, etc) silently
+# assumes that this parameter is == 1, so you should probably leave
+# it at that setting.
+#
+int patch_overlap_width \
"number of grid points that nominally-just-touching patches should overlap"
{
1:*:2 :: "any integer >= 0; current implementation requires that it be odd"
} 1
#
+# This parameter sets the angular resolution of all the patch systems:
+# the angular grid spacing in degrees is 90.0/N_zones_per_right_angle.
+#
# In practice the error in the horizon position is usually dominated
# by the errors from interpolating the Cactus gij and Kij to the horizon
# position, not by the angular finite differencing or interpatch interpolation
-# errors. Thus this parameter can be made quite large (low resolution)
+# errors. Thus this parameter can be made fairly small (low resolution)
# for better performance, without seriously affecting the accuracy
# with which we can locate the horizon.
#
-# This spacing must integrally divide 90 degrees for full sphere patch
-# systems, or 45 degrees for other patch systems.
+# For any patch system type other than "full sphere", there are patches
+# with 45 degree widths, so this parameter must be even.
#
-# Also, the computation of surface integrals over the horizon (for horizon
-# areas, masses, and centroids) is most accurate if the number of angular
-# grid zones (i.e. the patch size divided by this parameter) is even or
-# >= 7 (or both) for both coordinates of all patches.
+# Normally we use Simpson's rule (in a variant which doesn't require the
+# number of zones to be even) for angular integrations over the patch
+# system. However, if the number of angular zones in a patch is very
+# small and odd (i.e. 3 or 5), then we have to use the trapezoid rule
+# instead, so the integrations are less accurate. This occurs for
+# N_zones_per_right_angle = 3 or 5 for a full sphere patch system,
+# or N_zones_per_right_angle = 6 or 10 for any other patch system type.
#
-# If you are thinking of setting this to a small value (high resolution),
+# If you are thinking of setting this to a large value (high resolution),
# note also that with the current dense-matrix storage of the Jacobian,
# the memory/running time of the LAPACK linear system solve scales as
-# the inverse 4th/6th power of this parameter!
+# the 4th/6th power of this parameter! For example, doubling the resolution
+# takes 16 times as much memory, and 64 times as long to run!
#
-real delta_drho_dsigma "angular grid spacing of patches, in degrees"
+int N_zones_per_right_angle "sets angular resolution of patch systems"
{
-(0.0:* :: "any real number > 0.0"
-} 7.5
+1:* :: "any integer >= 1; must be even for patch systems other than full-sphere"
+} 12
################################################################################
diff --git a/run/test-ahfinderdirect/Kerr-offset/large-Jacobian.par b/run/test-ahfinderdirect/Kerr-offset/large-Jacobian.par
index 63f7c93..5bf656e 100644
--- a/run/test-ahfinderdirect/Kerr-offset/large-Jacobian.par
+++ b/run/test-ahfinderdirect/Kerr-offset/large-Jacobian.par
@@ -34,9 +34,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Kerr-offset/large-ahf-dx.par b/run/test-ahfinderdirect/Kerr-offset/large-ahf-dx.par
index 660cf53..fd43bc9 100644
--- a/run/test-ahfinderdirect/Kerr-offset/large-ahf-dx.par
+++ b/run/test-ahfinderdirect/Kerr-offset/large-ahf-dx.par
@@ -34,9 +34,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Kerr-offset/large-ahf-e8.par b/run/test-ahfinderdirect/Kerr-offset/large-ahf-e8.par
index 649b444..f743014 100644
--- a/run/test-ahfinderdirect/Kerr-offset/large-ahf-e8.par
+++ b/run/test-ahfinderdirect/Kerr-offset/large-ahf-e8.par
@@ -34,9 +34,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Kerr-offset/large-ahf-np.par b/run/test-ahfinderdirect/Kerr-offset/large-ahf-np.par
index 04ed365..3823501 100644
--- a/run/test-ahfinderdirect/Kerr-offset/large-ahf-np.par
+++ b/run/test-ahfinderdirect/Kerr-offset/large-ahf-np.par
@@ -34,9 +34,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Kerr-offset/large-ahf.par b/run/test-ahfinderdirect/Kerr-offset/large-ahf.par
index ef6d7e7..0f3eddb 100644
--- a/run/test-ahfinderdirect/Kerr-offset/large-ahf.par
+++ b/run/test-ahfinderdirect/Kerr-offset/large-ahf.par
@@ -36,9 +36,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::initial_guess_method = "ellipsoid"
AHFinderDirect::initial_guess__ellipsoid__x_radius = 1.8
diff --git a/run/test-ahfinderdirect/Kerr-offset/large.par b/run/test-ahfinderdirect/Kerr-offset/large.par
index d86f10b..1c631df 100644
--- a/run/test-ahfinderdirect/Kerr-offset/large.par
+++ b/run/test-ahfinderdirect/Kerr-offset/large.par
@@ -36,8 +36,8 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::initial_guess_method = "Kerr/Kerr-Schild"
diff --git a/run/test-ahfinderdirect/Kerr-offset/small-Jacobian.par b/run/test-ahfinderdirect/Kerr-offset/small-Jacobian.par
index 953fb07..75e8a79 100644
--- a/run/test-ahfinderdirect/Kerr-offset/small-Jacobian.par
+++ b/run/test-ahfinderdirect/Kerr-offset/small-Jacobian.par
@@ -34,9 +34,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 9.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 10
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Kerr-offset/small-ahf-badguess-2.5.par b/run/test-ahfinderdirect/Kerr-offset/small-ahf-badguess-2.5.par
index bb0fd58..92ed934 100644
--- a/run/test-ahfinderdirect/Kerr-offset/small-ahf-badguess-2.5.par
+++ b/run/test-ahfinderdirect/Kerr-offset/small-ahf-badguess-2.5.par
@@ -34,9 +34,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 9.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 10
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Kerr-offset/small-ahf-badguess.par b/run/test-ahfinderdirect/Kerr-offset/small-ahf-badguess.par
index f52c6d2..f3cd820 100644
--- a/run/test-ahfinderdirect/Kerr-offset/small-ahf-badguess.par
+++ b/run/test-ahfinderdirect/Kerr-offset/small-ahf-badguess.par
@@ -34,9 +34,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 9.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 10
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Kerr-offset/small-ahf.par b/run/test-ahfinderdirect/Kerr-offset/small-ahf.par
index 63c6d3d..42e3fd2 100644
--- a/run/test-ahfinderdirect/Kerr-offset/small-ahf.par
+++ b/run/test-ahfinderdirect/Kerr-offset/small-ahf.par
@@ -34,9 +34,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 9.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 10
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Kerr-offset/small.par b/run/test-ahfinderdirect/Kerr-offset/small.par
index 3b7f8f4..cff0a9a 100644
--- a/run/test-ahfinderdirect/Kerr-offset/small.par
+++ b/run/test-ahfinderdirect/Kerr-offset/small.par
@@ -34,9 +34,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 9.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 10
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Schw-hardwire/large-ahf-posn.par b/run/test-ahfinderdirect/Schw-hardwire/large-ahf-posn.par
index 97c7cb2..18984df 100644
--- a/run/test-ahfinderdirect/Schw-hardwire/large-ahf-posn.par
+++ b/run/test-ahfinderdirect/Schw-hardwire/large-ahf-posn.par
@@ -33,9 +33,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::hardwire_Schwarzschild_EF__x_posn = 0.5
AHFinderDirect::hardwire_Schwarzschild_EF__y_posn = 0.7
diff --git a/run/test-ahfinderdirect/Schw-hardwire/large-ahf.par b/run/test-ahfinderdirect/Schw-hardwire/large-ahf.par
index f1f85bf..12729ec 100644
--- a/run/test-ahfinderdirect/Schw-hardwire/large-ahf.par
+++ b/run/test-ahfinderdirect/Schw-hardwire/large-ahf.par
@@ -33,9 +33,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::hardwire_Schwarzschild_EF = "true"
diff --git a/run/test-ahfinderdirect/Schw-hardwire/large-posn.par b/run/test-ahfinderdirect/Schw-hardwire/large-posn.par
index 2eff078..23c8b66 100644
--- a/run/test-ahfinderdirect/Schw-hardwire/large-posn.par
+++ b/run/test-ahfinderdirect/Schw-hardwire/large-posn.par
@@ -33,9 +33,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::hardwire_Schwarzschild_EF = "true"
AHFinderDirect::hardwire_Schwarzschild_EF__x_posn = 0.5
diff --git a/run/test-ahfinderdirect/Schw-hardwire/large.par b/run/test-ahfinderdirect/Schw-hardwire/large.par
index 4b8c514..5dcc06c 100644
--- a/run/test-ahfinderdirect/Schw-hardwire/large.par
+++ b/run/test-ahfinderdirect/Schw-hardwire/large.par
@@ -33,9 +33,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::hardwire_Schwarzschild_EF = "true"
diff --git a/run/test-ahfinderdirect/Schw/Schw.par b/run/test-ahfinderdirect/Schw/Schw.par
index 35e6dad..a9f3e48 100644
--- a/run/test-ahfinderdirect/Schw/Schw.par
+++ b/run/test-ahfinderdirect/Schw/Schw.par
@@ -28,9 +28,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Schw/large-ahf-dx8.par b/run/test-ahfinderdirect/Schw/large-ahf-dx8.par
index aa02fd8..51797b7 100644
--- a/run/test-ahfinderdirect/Schw/large-ahf-dx8.par
+++ b/run/test-ahfinderdirect/Schw/large-ahf-dx8.par
@@ -34,9 +34,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Schw/large-ahf.par b/run/test-ahfinderdirect/Schw/large-ahf.par
index c7daeb7..9ad4f01 100644
--- a/run/test-ahfinderdirect/Schw/large-ahf.par
+++ b/run/test-ahfinderdirect/Schw/large-ahf.par
@@ -34,9 +34,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Schw/large.par b/run/test-ahfinderdirect/Schw/large.par
index eb9b1e7..4901d03 100644
--- a/run/test-ahfinderdirect/Schw/large.par
+++ b/run/test-ahfinderdirect/Schw/large.par
@@ -33,9 +33,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Schw/offset-ahf-dx8.par b/run/test-ahfinderdirect/Schw/offset-ahf-dx8.par
index a63ebca..3b2a61d 100644
--- a/run/test-ahfinderdirect/Schw/offset-ahf-dx8.par
+++ b/run/test-ahfinderdirect/Schw/offset-ahf-dx8.par
@@ -36,9 +36,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Schw/offset-ahf-np6.par b/run/test-ahfinderdirect/Schw/offset-ahf-np6.par
index d4879c8..7abdd59 100644
--- a/run/test-ahfinderdirect/Schw/offset-ahf-np6.par
+++ b/run/test-ahfinderdirect/Schw/offset-ahf-np6.par
@@ -37,9 +37,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Schw/offset-ahf-np8.par b/run/test-ahfinderdirect/Schw/offset-ahf-np8.par
index c197027..5cf4dcb 100644
--- a/run/test-ahfinderdirect/Schw/offset-ahf-np8.par
+++ b/run/test-ahfinderdirect/Schw/offset-ahf-np8.par
@@ -37,9 +37,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Schw/offset-ahf.par b/run/test-ahfinderdirect/Schw/offset-ahf.par
index f34178f..bfcf77c 100644
--- a/run/test-ahfinderdirect/Schw/offset-ahf.par
+++ b/run/test-ahfinderdirect/Schw/offset-ahf.par
@@ -35,9 +35,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::initial_guess_method = "ellipsoid"
AHFinderDirect::initial_guess__ellipsoid__x_radius = 1.8
diff --git a/run/test-ahfinderdirect/Schw/offset.par b/run/test-ahfinderdirect/Schw/offset.par
index c16dcfc..3e49322 100644
--- a/run/test-ahfinderdirect/Schw/offset.par
+++ b/run/test-ahfinderdirect/Schw/offset.par
@@ -34,9 +34,9 @@ AHFinderDirect::origin_x = 0.5
AHFinderDirect::origin_y = 0.7
AHFinderDirect::origin_z = 0.9
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::geometry_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/Schw/plus_xyz_octant_mirrored-fn.par b/run/test-ahfinderdirect/Schw/plus_xyz_octant_mirrored-fn.par
new file mode 100644
index 0000000..6207566
--- /dev/null
+++ b/run/test-ahfinderdirect/Schw/plus_xyz_octant_mirrored-fn.par
@@ -0,0 +1,55 @@
+# parameter file for patch system test
+ActiveThorns = "CartGrid3D LocalInterp PUGH ADMBase ADMCoupling StaticConformal CoordGauge Exact AHFinderDirect"
+
+# flesh
+cactus::cctk_itlast = 0
+
+# PUGH
+driver::ghost_size = 2
+driver::global_nx = 17
+driver::global_ny = 17
+driver::global_nz = 17
+
+# CartGrid3D
+grid::domain = "octant"
+grid::avoid_origin = "false"
+grid::type = "byspacing"
+grid::dxyz = 0.2
+
+# ADMBase
+ADMBase::initial_lapse = "exact"
+ADMBase::initial_shift = "exact"
+ADMBase::initial_data = "exact"
+ADMBase::lapse_evolution_method = "static"
+ADMBase::shift_evolution_method = "static"
+ADMBase::metric_type = "physical"
+
+# Exact
+Exact::exact_model = "Schwarzschild/EF"
+Exact::Schwarzschild_EF__mass = 1.0
+
+AHFinderDirect::find_AHs_at_postinitial = "true"
+AHFinderDirect::find_AHs_at_poststep = "false"
+##AHFinderDirect::verbose_level = "algorithm details"
+AHFinderDirect::print_timing_stats = "true"
+
+##AHFinderDirect::patch_system_type = "+xyz octant (mirrored)"
+
+AHFinderDirect::method = "horizon function"
+AHFinderDirect::output_initial_guess = "true"
+##AHFinderDirect::debugging_output_at_each_Newton_iteration = "true"
+AHFinderDirect::final_H_update_if_exit_x_H_small = "true"
+AHFinderDirect::h_base_file_name = "plus_xyz_octant_mirrored-fn.h"
+AHFinderDirect::H_of_h_base_file_name = "plus_xyz_octant_mirrored.H"
+AHFinderDirect::Delta_h_base_file_name = "plus_xyz_octant_mirrored.Delta_h"
+
+AHFinderDirect::N_horizons = 1
+AHFinderDirect::origin_x[1] = 0.0
+AHFinderDirect::origin_y[1] = 0.0
+AHFinderDirect::origin_z[1] = 0.0
+
+AHFinderDirect::initial_guess_method = "coordinate sphere"
+AHFinderDirect::initial_guess__coord_sphere__x_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__y_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__z_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__radius[1] = 2.0
diff --git a/run/test-ahfinderdirect/misc/Kerr.par b/run/test-ahfinderdirect/misc/Kerr.par
index a727c02..58760d2 100644
--- a/run/test-ahfinderdirect/misc/Kerr.par
+++ b/run/test-ahfinderdirect/misc/Kerr.par
@@ -30,9 +30,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::initial_guess_method = "Kerr/Kerr-Schild"
AHFinderDirect::initial_guess__Kerr_KerrSchild__mass = 1.0
diff --git a/run/test-ahfinderdirect/misc/try-5.par b/run/test-ahfinderdirect/misc/try-5.par
index 20b070c..39d2a8a 100644
--- a/run/test-ahfinderdirect/misc/try-5.par
+++ b/run/test-ahfinderdirect/misc/try-5.par
@@ -41,7 +41,7 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::initial_guess_method = "coordinate sphere"
AHFinderDirect::initial_guess__coord_sphere__x_center[1] = -0.2
diff --git a/run/test-ahfinderdirect/misc/try-7.5-debug.par b/run/test-ahfinderdirect/misc/try-7.5-debug.par
index e337cbc..0cbe3d6 100644
--- a/run/test-ahfinderdirect/misc/try-7.5-debug.par
+++ b/run/test-ahfinderdirect/misc/try-7.5-debug.par
@@ -44,7 +44,7 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::delta_drho_dsigma = 7.5
+AHFinderDirect::N_zones_per_right_angle = 12
AHFinderDirect::initial_guess_method = "coordinate sphere"
AHFinderDirect::initial_guess__coord_sphere__x_center[1] = -0.2
diff --git a/run/test-ahfinderdirect/misc/try-7.5-horizon.par b/run/test-ahfinderdirect/misc/try-7.5-horizon.par
index 2de1ce3..67a32e2 100644
--- a/run/test-ahfinderdirect/misc/try-7.5-horizon.par
+++ b/run/test-ahfinderdirect/misc/try-7.5-horizon.par
@@ -45,7 +45,7 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::delta_drho_dsigma = 7.5
+AHFinderDirect::N_zones_per_right_angle = 12
AHFinderDirect::initial_guess_method = "Kerr/Kerr-Schild"
AHFinderDirect::initial_guess__Kerr_KerrSchild__x_posn[1] = 0.0
diff --git a/run/test-ahfinderdirect/misc/try-7.5.par b/run/test-ahfinderdirect/misc/try-7.5.par
index eadb5b7..f5b67ca 100644
--- a/run/test-ahfinderdirect/misc/try-7.5.par
+++ b/run/test-ahfinderdirect/misc/try-7.5.par
@@ -42,7 +42,7 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::delta_drho_dsigma = 7.5
+AHFinderDirect::N_zones_per_right_angle = 12
AHFinderDirect::initial_guess_method = "coordinate sphere"
AHFinderDirect::initial_guess__coord_sphere__x_center[1] = -0.2
diff --git a/run/test-ahfinderdirect/misc/try-9.par b/run/test-ahfinderdirect/misc/try-9.par
index 4df4812..cee27b3 100644
--- a/run/test-ahfinderdirect/misc/try-9.par
+++ b/run/test-ahfinderdirect/misc/try-9.par
@@ -42,7 +42,7 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::delta_drho_dsigma = 9.0
+AHFinderDirect::N_zones_per_right_angle = 10
AHFinderDirect::initial_guess_method = "coordinate sphere"
AHFinderDirect::initial_guess__coord_sphere__x_center[1] = -0.2
diff --git a/run/test-ahfinderdirect/surface/Kerr-dx0.05-template.par b/run/test-ahfinderdirect/surface/Kerr-dx0.05-template.par
index 81e2fbc..b6c0b9f 100644
--- a/run/test-ahfinderdirect/surface/Kerr-dx0.05-template.par
+++ b/run/test-ahfinderdirect/surface/Kerr-dx0.05-template.par
@@ -1,6 +1,6 @@
# parameter file for patch system test
# uses variables
-# $delta_drho_dsigma
+# $N_zones_per_right_angle
# $surface_integral_method
# $origin_x
# $origin_y
@@ -54,9 +54,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = $origin_x
AHFinderDirect::origin_y[1] = $origin_y
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = $delta_drho_dsigma
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = $N_zones_per_right_angle
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-ahfinderdirect/surface/Kerr-dx0.1-template.par b/run/test-ahfinderdirect/surface/Kerr-dx0.1-template.par
index 89e5535..fdc1c46 100644
--- a/run/test-ahfinderdirect/surface/Kerr-dx0.1-template.par
+++ b/run/test-ahfinderdirect/surface/Kerr-dx0.1-template.par
@@ -1,6 +1,6 @@
# parameter file for patch system test
# uses variables
-# $delta_drho_dsigma
+# $N_zones_per_right_angle
# $surface_integral_method
# $origin_x
# $origin_y
@@ -54,9 +54,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = $origin_x
AHFinderDirect::origin_y[1] = $origin_y
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = $delta_drho_dsigma
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = $N_zones_per_right_angle
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-ahfinderdirect/surface/Kerr-mass1.5-dx0.1-template.par b/run/test-ahfinderdirect/surface/Kerr-mass1.5-dx0.1-template.par
index 3a5730e..9bf665d 100644
--- a/run/test-ahfinderdirect/surface/Kerr-mass1.5-dx0.1-template.par
+++ b/run/test-ahfinderdirect/surface/Kerr-mass1.5-dx0.1-template.par
@@ -1,6 +1,6 @@
# parameter file for patch system test
# uses variables
-# $delta_drho_dsigma
+# $N_zones_per_right_angle
# $surface_integral_method
# $origin_x
# $origin_y
@@ -54,9 +54,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = $origin_x
AHFinderDirect::origin_y[1] = $origin_y
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = $delta_drho_dsigma
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = $N_zones_per_right_angle
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-ahfinderdirect/surface/Kerr-spin0-dx0.1-template.par b/run/test-ahfinderdirect/surface/Kerr-spin0-dx0.1-template.par
index 3bcf547..6cad1a6 100644
--- a/run/test-ahfinderdirect/surface/Kerr-spin0-dx0.1-template.par
+++ b/run/test-ahfinderdirect/surface/Kerr-spin0-dx0.1-template.par
@@ -1,6 +1,6 @@
# parameter file for patch system test
# uses variables
-# $delta_drho_dsigma
+# $N_zones_per_right_angle
# $surface_integral_method
# $origin_x
# $origin_y
@@ -54,9 +54,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = $origin_x
AHFinderDirect::origin_y[1] = $origin_y
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = $delta_drho_dsigma
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = $N_zones_per_right_angle
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-ahfinderdirect/surface/Kerr-spin0.8-dx0.1-template.par b/run/test-ahfinderdirect/surface/Kerr-spin0.8-dx0.1-template.par
index 34e5352..51fe7ea 100644
--- a/run/test-ahfinderdirect/surface/Kerr-spin0.8-dx0.1-template.par
+++ b/run/test-ahfinderdirect/surface/Kerr-spin0.8-dx0.1-template.par
@@ -1,6 +1,6 @@
# parameter file for patch system test
# uses variables
-# $delta_drho_dsigma
+# $N_zones_per_right_angle
# $surface_integral_method
# $origin_x
# $origin_y
@@ -54,9 +54,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = $origin_x
AHFinderDirect::origin_y[1] = $origin_y
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = $delta_drho_dsigma
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = $N_zones_per_right_angle
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-ahfinderdirect/surface/Schw-dx0.1-template.par b/run/test-ahfinderdirect/surface/Schw-dx0.1-template.par
index d8c6ab7..8da2f33 100644
--- a/run/test-ahfinderdirect/surface/Schw-dx0.1-template.par
+++ b/run/test-ahfinderdirect/surface/Schw-dx0.1-template.par
@@ -1,6 +1,6 @@
# parameter file for patch system test
# uses variables
-# $delta_drho_dsigma
+# $N_zones_per_right_angle
# $surface_integral_method
# $origin_x
# $origin_y
@@ -53,9 +53,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = $origin_x
AHFinderDirect::origin_y[1] = $origin_y
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = $delta_drho_dsigma
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = $N_zones_per_right_angle
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-ahfinderdirect/surface/Schw-hardwire-template.par b/run/test-ahfinderdirect/surface/Schw-hardwire-template.par
index a44a644..aa20f1f 100644
--- a/run/test-ahfinderdirect/surface/Schw-hardwire-template.par
+++ b/run/test-ahfinderdirect/surface/Schw-hardwire-template.par
@@ -1,6 +1,6 @@
# parameter file for patch system test
# uses variables
-# $delta_drho_dsigma
+# $N_zones_per_right_angle
# $surface_integral_method
# $origin_x
# $origin_y
@@ -54,9 +54,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = $origin_x
AHFinderDirect::origin_y[1] = $origin_y
AHFinderDirect::origin_z[1] = $origin_z
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = $delta_drho_dsigma
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = $N_zones_per_right_angle
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-ahfinderdirect/surface/doit.run b/run/test-ahfinderdirect/surface/doit.run
index 9768d40..7495eba 100755
--- a/run/test-ahfinderdirect/surface/doit.run
+++ b/run/test-ahfinderdirect/surface/doit.run
@@ -24,7 +24,7 @@ prefix="$2"
origin_z=0.0
fi
- for delta in 7.5 5.0 3.0 2.25 1.5 1.0
+ for N_zones in 12 18 24 30 40 60 90
do
for method in 'trapezoid' 'Simpson' 'Simpson (variant)'
do
@@ -32,12 +32,12 @@ prefix="$2"
then method_name='Simpson-variant'
else method_name="$method"
fi
- base=${prefix}${delta}-${method_name}${offset_name}
- ##echo ":${delta}:${method}:${origin_x}:${origin_y}:${origin_z}:"
- ##echo ":${delta}:${method_name}:${origin_x}:${origin_y}:${origin_z}:"
+ base=${prefix}${N_zones}-${method_name}${offset_name}
+ ##echo ":${N_zones}:${method}:${origin_x}:${origin_y}:${origin_z}:"
+ ##echo ":${N_zones}:${method_name}:${origin_x}:${origin_y}:${origin_z}:"
##echo $base
- sed -e "s#\$delta_drho_dsigma#$delta#" \
+ sed -e "s#\$N_zones_per_right_angle#$N_zones#" \
-e "s#\$surface_integral_method#$method#" \
-e "s#\$origin_x#$origin_x#" \
-e "s#\$origin_y#$origin_y#" \
diff --git a/run/test-ahfinderdirect/test-both-ahfinders/both-ahf.par b/run/test-ahfinderdirect/test-both-ahfinders/both-ahf.par
index 99503d2..6d23397 100644
--- a/run/test-ahfinderdirect/test-both-ahfinders/both-ahf.par
+++ b/run/test-ahfinderdirect/test-both-ahfinders/both-ahf.par
@@ -49,9 +49,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-ahfinderdirect/test-both-ahfinders/hemi5-ahf.par b/run/test-ahfinderdirect/test-both-ahfinders/hemi5-ahf.par
index 79014ab..9d1a4f0 100644
--- a/run/test-ahfinderdirect/test-both-ahfinders/hemi5-ahf.par
+++ b/run/test-ahfinderdirect/test-both-ahfinders/hemi5-ahf.par
@@ -44,9 +44,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-ahfinderdirect/test-both-ahfinders/hemi5.par b/run/test-ahfinderdirect/test-both-ahfinders/hemi5.par
index 8b5bb2e..bf7a645 100644
--- a/run/test-ahfinderdirect/test-both-ahfinders/hemi5.par
+++ b/run/test-ahfinderdirect/test-both-ahfinders/hemi5.par
@@ -44,9 +44,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-ahfinderdirect/test-both-ahfinders/try.par b/run/test-ahfinderdirect/test-both-ahfinders/try.par
index 1c79cae..09220b1 100644
--- a/run/test-ahfinderdirect/test-both-ahfinders/try.par
+++ b/run/test-ahfinderdirect/test-both-ahfinders/try.par
@@ -44,9 +44,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-ahfinderdirect/test-patch-system/derivatives-2.5.par b/run/test-ahfinderdirect/test-patch-system/derivatives-18.par
index 7d800f1..aefc4a7 100644
--- a/run/test-ahfinderdirect/test-patch-system/derivatives-2.5.par
+++ b/run/test-ahfinderdirect/test-patch-system/derivatives-18.par
@@ -17,9 +17,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 2.5
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::interpatch_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::interpatch_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/test-patch-system/derivatives-5.par b/run/test-ahfinderdirect/test-patch-system/derivatives-36.par
index 5aeedb7..c195e28 100644
--- a/run/test-ahfinderdirect/test-patch-system/derivatives-5.par
+++ b/run/test-ahfinderdirect/test-patch-system/derivatives-36.par
@@ -17,9 +17,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 36
AHFinderDirect::interpatch_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::interpatch_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/test-patch-system/gridfn.par b/run/test-ahfinderdirect/test-patch-system/gridfn.par
index a6f4122..ff75657 100644
--- a/run/test-ahfinderdirect/test-patch-system/gridfn.par
+++ b/run/test-ahfinderdirect/test-patch-system/gridfn.par
@@ -17,9 +17,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::interpatch_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::interpatch_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/test-patch-system/synchronize-2.5.par b/run/test-ahfinderdirect/test-patch-system/synchronize-18.par
index dbe13f4..34ff498 100644
--- a/run/test-ahfinderdirect/test-patch-system/synchronize-2.5.par
+++ b/run/test-ahfinderdirect/test-patch-system/synchronize-18.par
@@ -17,9 +17,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 2.5
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::interpatch_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::interpatch_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/test-patch-system/synchronize-5.par b/run/test-ahfinderdirect/test-patch-system/synchronize-36.par
index d2d2ea7..759e89c 100644
--- a/run/test-ahfinderdirect/test-patch-system/synchronize-5.par
+++ b/run/test-ahfinderdirect/test-patch-system/synchronize-36.par
@@ -17,9 +17,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 36
AHFinderDirect::interpatch_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::interpatch_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian-fast.par b/run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian-fast.par
index 404009a..5775ac9 100644
--- a/run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian-fast.par
+++ b/run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian-fast.par
@@ -17,9 +17,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::interpatch_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::interpatch_interpolator_pars = "order=3"
diff --git a/run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian-order1.par b/run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian-order1.par
index 2928f92..957565f 100644
--- a/run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian-order1.par
+++ b/run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian-order1.par
@@ -17,9 +17,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::interpatch_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::interpatch_interpolator_pars = "order=1"
diff --git a/run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian.par b/run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian.par
index 0b8898b..71238ba 100644
--- a/run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian.par
+++ b/run/test-ahfinderdirect/test-patch-system/synchronize-Jacobian.par
@@ -17,9 +17,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::interpatch_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::interpatch_interpolator_pars = "order=3"
diff --git a/run/test-both-ahfinders/both-ahf.par b/run/test-both-ahfinders/both-ahf.par
index 99503d2..6d23397 100644
--- a/run/test-both-ahfinders/both-ahf.par
+++ b/run/test-both-ahfinders/both-ahf.par
@@ -49,9 +49,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-both-ahfinders/hemi5-ahf.par b/run/test-both-ahfinders/hemi5-ahf.par
index 79014ab..9d1a4f0 100644
--- a/run/test-both-ahfinders/hemi5-ahf.par
+++ b/run/test-both-ahfinders/hemi5-ahf.par
@@ -44,9 +44,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-both-ahfinders/hemi5.par b/run/test-both-ahfinders/hemi5.par
index 8b5bb2e..bf7a645 100644
--- a/run/test-both-ahfinders/hemi5.par
+++ b/run/test-both-ahfinders/hemi5.par
@@ -44,9 +44,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-both-ahfinders/try.par b/run/test-both-ahfinders/try.par
index 1c79cae..09220b1 100644
--- a/run/test-both-ahfinders/try.par
+++ b/run/test-both-ahfinders/try.par
@@ -44,9 +44,9 @@ AHFinderDirect::N_horizons = 1
AHFinderDirect::origin_x[1] = 0.5
AHFinderDirect::origin_y[1] = 0.7
AHFinderDirect::origin_z[1] = 0.0
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::geometry_interpolator_pars = "order=3 out_of_range_tolerance={-1.0 -1.0 -1.0 -1.0 -1.0 -1.0}"
diff --git a/run/test-patch-system/gridfn.par b/run/test-patch-system/gridfn.par
index a6f4122..ff75657 100644
--- a/run/test-patch-system/gridfn.par
+++ b/run/test-patch-system/gridfn.par
@@ -17,9 +17,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::interpatch_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::interpatch_interpolator_pars = "order=3"
diff --git a/run/test-patch-system/synchronize-Jacobian-fast.par b/run/test-patch-system/synchronize-Jacobian-fast.par
index 404009a..5775ac9 100644
--- a/run/test-patch-system/synchronize-Jacobian-fast.par
+++ b/run/test-patch-system/synchronize-Jacobian-fast.par
@@ -17,9 +17,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::interpatch_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::interpatch_interpolator_pars = "order=3"
diff --git a/run/test-patch-system/synchronize-Jacobian-order1.par b/run/test-patch-system/synchronize-Jacobian-order1.par
index 2928f92..957565f 100644
--- a/run/test-patch-system/synchronize-Jacobian-order1.par
+++ b/run/test-patch-system/synchronize-Jacobian-order1.par
@@ -17,9 +17,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::interpatch_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::interpatch_interpolator_pars = "order=1"
diff --git a/run/test-patch-system/synchronize-Jacobian.par b/run/test-patch-system/synchronize-Jacobian.par
index 0b8898b..71238ba 100644
--- a/run/test-patch-system/synchronize-Jacobian.par
+++ b/run/test-patch-system/synchronize-Jacobian.par
@@ -17,9 +17,9 @@ AHFinderDirect::origin_x = 0.0
AHFinderDirect::origin_y = 0.0
AHFinderDirect::origin_z = 0.0
AHFinderDirect::patch_system_type = "full sphere"
-AHFinderDirect::N_ghost_points = 2
-AHFinderDirect::N_overlap_points = 1
-AHFinderDirect::delta_drho_dsigma = 5.0
+AHFinderDirect::ghost_zone_width = 2
+AHFinderDirect::patch_overlap_width = 1
+AHFinderDirect::N_zones_per_right_angle = 18
AHFinderDirect::interpatch_interpolator_name = "generalized polynomial interpolation"
AHFinderDirect::interpatch_interpolator_pars = "order=3"
diff --git a/src/driver/setup.cc b/src/driver/setup.cc
index 2de1959..482e8bb 100644
--- a/src/driver/setup.cc
+++ b/src/driver/setup.cc
@@ -280,7 +280,8 @@ state.AH_info_ptrs.push_back(NULL);
= *new
patch_system(origin_x[hn], origin_y[hn], origin_z[hn],
ps_type,
- N_ghost_points, N_overlap_points, delta_drho_dsigma,
+ ghost_zone_width, patch_overlap_width,
+ N_zones_per_right_angle,
gfns::nominal_min_gfn, gfns::nominal_max_gfn,
gfns::ghosted_min_gfn, gfns::ghosted_max_gfn,
interp_handle, interp_param_table_handle,
diff --git a/src/patch/ghost_zone.cc b/src/patch/ghost_zone.cc
index 6f10b76..922f0ff 100644
--- a/src/patch/ghost_zone.cc
+++ b/src/patch/ghost_zone.cc
@@ -199,7 +199,7 @@ void symmetry_ghost_zone::synchronize(int ghosted_min_gfn, int ghosted_max_gfn,
//
interpatch_ghost_zone::interpatch_ghost_zone(const patch_edge& my_edge_in,
const patch_edge& other_edge_in,
- int N_overlap_points)
+ int patch_overlap_width)
: ghost_zone(my_edge_in,
other_edge_in,
ghost_zone_is_interpatch),
@@ -264,12 +264,12 @@ if (! ( (common_coords_set == my_edge().coords_set_perp())
// perp coordinate must match (mod 2*pi) across the two patches
// after taking into account any overlap
-// ... eg N_overlap_points = 3 would be
+// ... eg patch_overlap_width = 3 would be
// p p p p p
// q q q q q
-// so the overlap would be (N_overlap_points-1) * delta
+// so the overlap would be (patch_overlap_width-1) * delta
const fp other_overlap
- = (N_overlap_points-1) * other_edge().perp_map().delta_fp();
+ = (patch_overlap_width-1) * other_edge().perp_map().delta_fp();
const fp other_outer_perp_minus_overlap // move back inwards into other patch
// by overlap distance, to get a value
// that should match our own
@@ -284,14 +284,14 @@ if (! local_coords::fuzzy_EQ_ang(my_edge().grid_outer_perp(),
" other_patch().name()=\"%s\" other_edge().name()=%s\n"
" perp coordinate doesn't match (mod 2*pi) across the two patches!\n"
" my_edge().grid_outer_perp()=%g <--(compare this)\n"
-" N_overlap_points=%d other_overlap=%g\n"
+" patch_overlap_width=%d other_overlap=%g\n"
" other_edge.grid_outer_perp()=%g\n"
" other_outer_perp_minus_overlap=%g <--(against this)\n"
,
my_patch().name(), my_edge().name(),
other_patch().name(), other_edge().name(),
double(my_edge().grid_outer_perp()),
- N_overlap_points, double(other_overlap),
+ patch_overlap_width, double(other_overlap),
double(other_edge().grid_outer_perp()),
double(other_outer_perp_minus_overlap)); /*NOTREACHED*/
diff --git a/src/patch/ghost_zone.hh b/src/patch/ghost_zone.hh
index 2946837..ba641de 100644
--- a/src/patch/ghost_zone.hh
+++ b/src/patch/ghost_zone.hh
@@ -716,7 +716,7 @@ public:
public:
interpatch_ghost_zone(const patch_edge& my_edge_in,
const patch_edge& other_edge_in,
- int N_overlap_points);
+ int patch_overlap_width);
// finish setup (requires adjacent-side ghost_zone objects
// to exist, though not to have finish_setup() called):
diff --git a/src/patch/grid.cc b/src/patch/grid.cc
index e2a55e9..7a32d47 100644
--- a/src/patch/grid.cc
+++ b/src/patch/grid.cc
@@ -49,13 +49,13 @@ grid_arrays::grid_arrays(const grid_array_pars& grid_array_pars_in)
max_isigma_(grid_array_pars_in.max_isigma),
ghosted_min_irho_(grid_array_pars_in.min_irho
- - grid_array_pars_in.min_rho_N_ghost_points),
+ - grid_array_pars_in.min_rho_ghost_zone_width),
ghosted_max_irho_(grid_array_pars_in.max_irho
- + grid_array_pars_in.max_rho_N_ghost_points),
+ + grid_array_pars_in.max_rho_ghost_zone_width),
ghosted_min_isigma_(grid_array_pars_in.min_isigma
- - grid_array_pars_in.min_sigma_N_ghost_points),
+ - grid_array_pars_in.min_sigma_ghost_zone_width),
ghosted_max_isigma_(grid_array_pars_in.max_isigma
- + grid_array_pars_in.max_sigma_N_ghost_points)
+ + grid_array_pars_in.max_sigma_ghost_zone_width)
// no comma
{ }
@@ -115,34 +115,34 @@ grid::grid(const grid_array_pars& grid_array_pars_in,
: grid_arrays(grid_array_pars_in),
rho_map_(grid_array_pars_in.min_irho
- - grid_array_pars_in.min_rho_N_ghost_points,
+ - grid_array_pars_in.min_rho_ghost_zone_width,
grid_array_pars_in.max_irho
- + grid_array_pars_in.max_rho_N_ghost_points,
+ + grid_array_pars_in.max_rho_ghost_zone_width,
jtutil::radians_of_degrees(
grid_pars_in.min_drho
- - grid_array_pars_in.min_rho_N_ghost_points
+ - grid_array_pars_in.min_rho_ghost_zone_width
* grid_pars_in.delta_drho
),
jtutil::radians_of_degrees(grid_pars_in.delta_drho),
jtutil::radians_of_degrees(
grid_pars_in.max_drho
- + grid_array_pars_in.max_rho_N_ghost_points
+ + grid_array_pars_in.max_rho_ghost_zone_width
* grid_pars_in.delta_drho
)),
sigma_map_(grid_array_pars_in.min_isigma
- - grid_array_pars_in.min_sigma_N_ghost_points,
+ - grid_array_pars_in.min_sigma_ghost_zone_width,
grid_array_pars_in.max_isigma
- + grid_array_pars_in.max_sigma_N_ghost_points,
+ + grid_array_pars_in.max_sigma_ghost_zone_width,
jtutil::radians_of_degrees(
grid_pars_in.min_dsigma
- - grid_array_pars_in.min_sigma_N_ghost_points
+ - grid_array_pars_in.min_sigma_ghost_zone_width
* grid_pars_in.delta_dsigma
),
jtutil::radians_of_degrees(grid_pars_in.delta_dsigma),
jtutil::radians_of_degrees(
grid_pars_in.max_dsigma
- + grid_array_pars_in.max_sigma_N_ghost_points
+ + grid_array_pars_in.max_sigma_ghost_zone_width
* grid_pars_in.delta_dsigma
)),
diff --git a/src/patch/grid.hh b/src/patch/grid.hh
index 76921d3..d6d1e4b 100644
--- a/src/patch/grid.hh
+++ b/src/patch/grid.hh
@@ -506,8 +506,8 @@ public:
{
int min_irho, max_irho;
int min_isigma, max_isigma;
- int min_rho_N_ghost_points, max_rho_N_ghost_points;
- int min_sigma_N_ghost_points, max_sigma_N_ghost_points;
+ int min_rho_ghost_zone_width, max_rho_ghost_zone_width;
+ int min_sigma_ghost_zone_width, max_sigma_ghost_zone_width;
};
struct gridfn_pars
{
diff --git a/src/patch/patch.cc b/src/patch/patch.cc
index 7693826..5067ccb 100644
--- a/src/patch/patch.cc
+++ b/src/patch/patch.cc
@@ -337,9 +337,19 @@ return delta_rho() * delta_sigma() * sum;
// \approx \Delta x \, \sum_{i=0}^N c_i f(x_i)$
// then this function computes $c_i$.
//
+// For method == integration_method__automatic_choice the choices are
+// N=1 trapezoid
+// N=2 Simpson
+// N=3 trapezoid
+// N=4 Simpson
+// N=5 trapezoid
+// N=6 Simpson
+// N=7 and up Simpson variant
+//
// Arguments:
// method = Specifies the integration method.
-// N = The number of integration intervals.
+// N = The number of integration *intervals*. (The number of integration
+// *points* is N+1.)
// i = Specifies the point at which the coefficient is desired.
//
//static
@@ -563,14 +573,14 @@ set_ghost_zone(my_edge, temp);
//
void patch::create_interpatch_ghost_zone
(const patch_edge& my_edge, const patch_edge& other_edge,
- int N_overlap_points)
+ int patch_overlap_width)
{
// make sure we belong to the right patch
assert(my_edge.my_patch() == *this);
interpatch_ghost_zone *temp
= new interpatch_ghost_zone(my_edge, other_edge,
- N_overlap_points);
+ patch_overlap_width);
set_ghost_zone(my_edge, temp);
}
@@ -603,12 +613,12 @@ ghost_zone_ptr_to_set = gzp;
//
// Arguments:
// q = The (supposedly) neighboring patch.
-// N_overlap_points = The number of grid points these patches overlap.
+// patch_overlap_width = The number of grid points these patches overlap.
// If this is nonzero, then these patches must have the
// same grid spacing in the perpendicular direction.
//
const patch_edge& patch::edge_adjacent_to_patch(const patch& q,
- int N_overlap_points /* = 0 */)
+ int patch_overlap_width /* = 0 */)
const
{
const patch& p = *this;
@@ -649,16 +659,16 @@ if ((common_is_q_rho ^ common_is_q_sigma) != 0x1)
/*NOTREACHED*/
// how much do the patches overlap?
-// ... eg N_overlap_points = 3 would be
+// ... eg patch_overlap_width = 3 would be
// p p p p p
// q q q q q
-// so the overlap would be (N_overlap_points-1) * delta = 2 * delta
-if ( (N_overlap_points-1 != 0)
+// so the overlap would be (patch_overlap_width-1) * delta = 2 * delta
+if ( (patch_overlap_width-1 != 0)
&& jtutil::fuzzy<fp>::NE(p.delta_dang(common_is_p_rho),
q.delta_dang(common_is_q_rho)) )
then error_exit(ERROR_EXIT,
"***** patch::edge_adjacent_to_patch():\n"
-" N_overlap_points != 0 must have same perp grid spacing in both patches!\n"
+" patch_overlap_width != 0 must have same perp grid spacing in both patches!\n"
" p.name()=\"%s\" q.name()=\"%s\"\n"
" common_coord_set=%s\n"
" common_is_p_rho=%d common_is_q_rho=%d\n"
@@ -672,7 +682,7 @@ if ( (N_overlap_points-1 != 0)
double(q.delta_dang(common_is_q_rho))); /*NOTREACHED*/
-const fp doverlap = fp(N_overlap_points-1) * p.delta_dang(common_is_p_rho);
+const fp doverlap = fp(patch_overlap_width-1) * p.delta_dang(common_is_p_rho);
// where is the common boundary relative to the min/max sides of each patch?
const bool common_is_p_min_q_max
@@ -690,7 +700,7 @@ if ((common_is_p_min_q_max ^ common_is_p_max_q_min) != 0x1)
" common_is_p_rho=%d common_is_q_rho=%d\n"
" p.delta_dang(common_is_p_rho)=%g\n"
" q.delta_dang(common_is_q_rho)=%g\n"
-" N_overlap_points=%d doverlap=%g\n"
+" patch_overlap_width=%d doverlap=%g\n"
" common_is_p_min_q_max=%d common_is_p_max_q_min=%d\n"
,
p.name(), q.name(),
@@ -698,7 +708,7 @@ if ((common_is_p_min_q_max ^ common_is_p_max_q_min) != 0x1)
int(common_is_p_rho), int(common_is_q_rho),
double(p.delta_dang(common_is_p_rho)),
double(q.delta_dang(common_is_q_rho)),
- N_overlap_points, double(doverlap),
+ patch_overlap_width, double(doverlap),
int(common_is_p_min_q_max), int(common_is_p_max_q_min));
/*NOTREACHED*/
diff --git a/src/patch/patch.hh b/src/patch/patch.hh
index 56300a9..621a29f 100644
--- a/src/patch/patch.hh
+++ b/src/patch/patch.hh
@@ -408,17 +408,17 @@ public:
// or error_exit() if it's not actually a neighboring patch
// ... computation done using only (rho,sigma) coordinate sets
// and min/max dang bounds ==> ok to use in setting up ghost zones
- // ... N_overlap_points = number of grid points (grid spacings
+ // ... patch_overlap_width = number of grid points (grid spacings
// in the perpendicular direction) these patches' nominal grids
// overlap,
// ... if this is nonzero, then these patches must have
// the *same* grid spacing in the perpendicular direction
// ... e.g. delta_dang = 5, this patch max_dang = 50,
- // other patch min_dang = 40 ==> N_overlap_points = 3
+ // other patch min_dang = 40 ==> patch_overlap_width = 3
// p p p p p
// q q q q q
const patch_edge& edge_adjacent_to_patch(const patch& q,
- int N_overlap_points = 0)
+ int patch_overlap_width = 0)
const;
@@ -502,7 +502,7 @@ public:
// the setup process
void create_interpatch_ghost_zone
(const patch_edge& my_edge, const patch_edge& other_edge,
- int N_overlap_points);
+ int patch_overlap_width);
// assert() that all ghost zones
// are fully setup
diff --git a/src/patch/patch_info.cc b/src/patch/patch_info.cc
index 2f54a21..cc38487 100644
--- a/src/patch/patch_info.cc
+++ b/src/patch/patch_info.cc
@@ -4,6 +4,7 @@
//
// patch_info::grid_array_pars
// patch_info::grid_pars
+/// patch_info::verify_grid_spacing_ok
//
#include <stdio.h>
@@ -18,6 +19,7 @@
#include "../jtutil/array.hh"
#include "../jtutil/cpm_map.hh"
#include "../jtutil/linear_map.hh"
+using jtutil::error_exit;
#include "coords.hh"
#include "grid.hh"
@@ -36,12 +38,12 @@
// usual caveats about lifetimes/overwriting apply.
//
// Arguments:
-// N_ghost_points = Width in grid points of all ghost zones.
-// N_extend_points = Number of grid points to extend each patch past
+// ghost_zone_width = Width in grid points of all ghost zones.
+// patch_extend_width = Number of grid points to extend each patch past
// "just touching" so as to overlap neighboring patches.
// Thus patches overlap by
-// N_overlap_points = 2*N_extend_points + 1
-// grid points. For example, with N_extend_points == 2,
+// patch_overlap_width = 2*patch_extend_width + 1
+// grid points. For example, with patch_extend_width == 2,
// here are the grid points of two neighboring patches:
// x x x x x X X
// |
@@ -50,39 +52,56 @@
// x and o the grid points before this extension,
// and X and O the extra grid points added by this
// extension.
-// delta_drho_dsigma = Grid spacing (both rho and sigma) in degrees.
+// N_zones_per_right_angle = This sets the grid spacing (same in both
+// directions) to 90.0 / N_zones_per_right_angle.
+// It's a fatal error (error_exit()) if this
+// doesn't evenly divide the grid sizes in both
+// directions.
//
const grid_arrays::grid_array_pars&
- patch_info::grid_array_pars(int N_ghost_points, int N_extend_points,
- fp delta_drho_dsigma)
+ patch_info::grid_array_pars(int ghost_zone_width, int patch_extend_width,
+ int N_zones_per_right_angle)
const
{
static
struct grid_arrays::grid_array_pars grid_array_pars_buffer;
+//
+// the values of min_(irho,isigma) are actually arbitrary, but for
+// debugging convenience it's handy to have (irho,isigma) ranges map
+// one-to-one with (rho,sigma) ranges across all patches; the assignments
+// here have this property
+//
+const fp delta_drho_dsigma = 90.0 / fp(N_zones_per_right_angle);
grid_array_pars_buffer.min_irho
= jtutil::round<fp>::to_integer(min_drho /delta_drho_dsigma);
grid_array_pars_buffer.min_isigma
= jtutil::round<fp>::to_integer(min_dsigma/delta_drho_dsigma);
+
+verify_grid_spacing_ok(N_zones_per_right_angle);
+const int N_irho_zones
+ = jtutil::round<fp>::to_integer(
+ fp(N_zones_per_right_angle) * (max_drho -min_drho ) / 90.0
+ );
+const int N_isigma_zones
+ = jtutil::round<fp>::to_integer(
+ fp(N_zones_per_right_angle) * (max_dsigma-min_dsigma) / 90.0
+ );
+
grid_array_pars_buffer.max_irho
- = grid_array_pars_buffer.min_irho
- + jtutil::round<fp>::to_integer(
- (max_drho -min_drho ) / delta_drho_dsigma
- );
+ = grid_array_pars_buffer.min_irho + N_irho_zones;
grid_array_pars_buffer.max_isigma
- = grid_array_pars_buffer.min_isigma
- + jtutil::round<fp>::to_integer(
- (max_dsigma-min_dsigma) / delta_drho_dsigma
- );
-grid_array_pars_buffer.min_irho -= N_extend_points;
-grid_array_pars_buffer.min_isigma -= N_extend_points;
-grid_array_pars_buffer.max_irho += N_extend_points;
-grid_array_pars_buffer.max_isigma += N_extend_points;
-
-grid_array_pars_buffer.min_rho_N_ghost_points = N_ghost_points;
-grid_array_pars_buffer.max_rho_N_ghost_points = N_ghost_points;
-grid_array_pars_buffer.min_sigma_N_ghost_points = N_ghost_points;
-grid_array_pars_buffer.max_sigma_N_ghost_points = N_ghost_points;
+ = grid_array_pars_buffer.min_isigma + N_isigma_zones;
+
+grid_array_pars_buffer.min_irho -= patch_extend_width;
+grid_array_pars_buffer.min_isigma -= patch_extend_width;
+grid_array_pars_buffer.max_irho += patch_extend_width;
+grid_array_pars_buffer.max_isigma += patch_extend_width;
+
+grid_array_pars_buffer.min_rho_ghost_zone_width = ghost_zone_width;
+grid_array_pars_buffer.max_rho_ghost_zone_width = ghost_zone_width;
+grid_array_pars_buffer.min_sigma_ghost_zone_width = ghost_zone_width;
+grid_array_pars_buffer.max_sigma_ghost_zone_width = ghost_zone_width;
return grid_array_pars_buffer;
}
@@ -98,10 +117,10 @@ return grid_array_pars_buffer;
// usual caveats about lifetimes/overwriting apply.
//
// Arguments:
-// N_extend_points = Number of grid points to extend each patch past
+// patch_extend_width = Number of grid points to extend each patch past
// "just touching" so as to overlap neighboring patches.
-// Thus patches overlap by 2*N_extend_points + 1 grid
-// points. For example, with N_extend_points == 2, here
+// Thus patches overlap by 2*patch_extend_width + 1 grid
+// points. For example, with patch_extend_width == 2, here
// are the grid points of two neighboring patches:
// x x x x x X X
// |
@@ -110,16 +129,22 @@ return grid_array_pars_buffer;
// x and o the grid points before this extension,
// and X and O the extra grid points added by this
// extension.
-// delta_drho_dsigma = Grid spacing (both rho and sigma) in degrees.
+// N_zones_per_right_angle = This sets the grid spacing (same in both
+// directions) to 90.0 / N_zones_per_right_angle.
+// It's a fatal error (error_exit()) if this
+// doesn't evenly divide the grid sizes in both
+// directions.
//
-const grid::grid_pars& patch_info::grid_pars(int N_extend_points,
- fp delta_drho_dsigma)
+const grid::grid_pars& patch_info::grid_pars(int patch_extend_width,
+ int N_zones_per_right_angle)
const
{
static
struct grid::grid_pars grid_pars_buffer;
-const fp extend_drho_dsigma = fp(N_extend_points) * delta_drho_dsigma;
+verify_grid_spacing_ok(N_zones_per_right_angle);
+const fp delta_drho_dsigma = 90.0 / fp(N_zones_per_right_angle);
+const fp extend_drho_dsigma = fp(patch_extend_width) * delta_drho_dsigma;
grid_pars_buffer. min_drho = min_drho - extend_drho_dsigma;
grid_pars_buffer.delta_drho = delta_drho_dsigma;
@@ -130,3 +155,36 @@ grid_pars_buffer. max_dsigma = max_dsigma + extend_drho_dsigma;
return grid_pars_buffer;
}
+
+//******************************************************************************
+
+//
+// This function verifies that the grid spacing evenly divides the
+// grid sizes in both directions, and does an error_exit() if not.
+//
+// Arguments:
+// N_zones_per_right_angle = This sets the grid spacing (same in both
+// directions) to 90.0 / N_zones_per_right_angle.
+//
+void patch_info::verify_grid_spacing_ok(int N_zones_per_right_angle)
+ const
+{
+const fp N_irho_zones_fp
+ = fp(N_zones_per_right_angle) * (max_drho -min_drho ) / 90.0;
+const fp N_isigma_zones_fp
+ = fp(N_zones_per_right_angle) * (max_dsigma-min_dsigma) / 90.0;
+
+if (! ( jtutil::fuzzy<fp>::is_integer(N_irho_zones_fp)
+ && jtutil::fuzzy<fp>::is_integer(N_isigma_zones_fp) ) )
+ then error_exit(ERROR_EXIT,
+"***** patch_info::verify_grid_spacing_ok():\n"
+" N_zones_per_right_angle=%d gives grid spacing which\n"
+" doesn't evenly divide grid sizes!"
+" [min,max]_drho=[%g,%g] [min,max]_dsigma=[%g,%g]\n"
+" ==> N_irho_zones_fp=%g N_isigma_zones_fp=%g\n"
+ ,
+ double(min_drho), double(max_drho),
+ double(min_dsigma), double(max_dsigma),
+ double(N_irho_zones_fp), double(N_isigma_zones_fp));
+ /*NOTREACHED*/
+}
diff --git a/src/patch/patch_info.hh b/src/patch/patch_info.hh
index f1e0043..9be845e 100644
--- a/src/patch/patch_info.hh
+++ b/src/patch/patch_info.hh
@@ -19,19 +19,20 @@
// This (POD, and hence static-initializable) struct gives a minimal
// set of information which varies from one patch to another.
//
-// The member functions allow a patch to be constructed from this struct
-// together with the additional information provided by their arguments.
-// This doesn't allow the most general possible type of patch (eg it
-// constrains all ghost zones to have the same width), but does cover
-// the common casees.
+// The member functions allow computing all the grid:: constructor
+// arguments; with these in hand it's fairly easy to construct the
+// patch itself. This scheme doesn't allow the most general possible
+// type of patch (eg it constrains all ghost zones to have the same width,
+// and it requires the grid spacing to evenly divide 90 degrees), but
+// it does cover all the cases that seem to come up in practice.
//
// Arguments for member functions:
-// N_ghost_points = Width in grid points of all ghost zones.
-// N_extend_points = Number of grid points to extend each patch past
+// ghost_zone_width = Width in grid points of all ghost zones.
+// patch_extend_width = Number of grid points to extend each patch past
// "just touching" so as to overlap neighboring patches.
// Thus patches overlap by
-// N_overlap_points = 2*N_extend_points + 1
-// grid points. For example, with N_extend_points == 2,
+// patch_overlap_width = 2*patch_extend_width + 1
+// grid points. For example, with patch_extend_width == 2,
// here are the grid points of two neighboring patches:
// x x x x x X X
// |
@@ -40,7 +41,11 @@
// x and o the grid points before this extension,
// and X and O the extra grid points added by this
// extension.
-// delta_drho_dsigma = Grid spacing (both rho and sigma) in degrees.
+// N_zones_per_right_angle = This sets the grid spacing (same in both
+// directions) to 90.0 / N_zones_per_right_angle.
+// It's a fatal error (error_exit()) if this
+// doesn't evenly divide the grid sizes in both
+// directions.
//
struct patch_info
{
@@ -54,14 +59,20 @@ struct patch_info
// ... result refers to internal static buffer;
// the usual caveats about lifetimes/overwriting apply
const grid_arrays::grid_array_pars&
- grid_array_pars(int N_ghost_points, int N_extend_points,
- fp delta_drho_dsigma)
+ grid_array_pars(int ghost_zone_width, int patch_extend_width,
+ int N_zones_per_right_angle)
const;
// compute and return reference to struct grid::grid_pars
// ... result refers to internal static buffer;
// the usual caveats about lifetimes/overwriting apply
- const grid::grid_pars& grid_pars(int N_extend_points,
- fp delta_drho_dsigma)
+ const grid::grid_pars& grid_pars(int patch_extend_width,
+ int N_zones_per_right_angle)
+ const;
+
+private:
+ // verify that grid spacing evenly divides grid sizes
+ // in both directions; no-op if ok, error_exit() if not ok
+ void verify_grid_spacing_ok(int N_zones_per_right_angle)
const;
};
diff --git a/src/patch/patch_system.cc b/src/patch/patch_system.cc
index 1a4df74..f01a295 100644
--- a/src/patch/patch_system.cc
+++ b/src/patch/patch_system.cc
@@ -83,10 +83,10 @@ using jtutil::error_exit;
// This function constructs a patch_system object.
//
// Constructor arguments:
-// N_ghost_points = Width in grid points of all ghost zones.
-// N_overlap_points = Number of grid points that adjacent
+// ghost_zone_width = Width in grid points of all ghost zones.
+// patch_overlap_width = Number of grid points that adjacent
// nominally-just-touching patches should overlap.
-// For example, with N_overlap_points == 3, here
+// For example, with patch_overlap_width == 3, here
// are the grid points of two neighboring patches:
// x x x x x X
// |
@@ -94,11 +94,15 @@ using jtutil::error_exit;
// Here | marks the "just touching" boundary,
// x and o the grid points before this extension,
// and X and O the extra grid points added by this
-// extension. For this example, the N_extend_points
+// extension. For this example, the patch_extend_width
// parameter used by some other functions would
// be 1; in general
-// N_overlap_points = 2*N_extend_points + 1
-// delta_drho_dsigma = Grid spacing (both rho and sigma) in degrees.
+// patch_overlap_width = 2*patch_extend_width + 1
+// N_zones_per_right_angle = This sets the grid spacing (same in both
+// directions) to 90.0 / N_zones_per_right_angle.
+// It's a fatal error (error_exit()) if this
+// doesn't evenly divide the grid sizes in both
+// directions.
// print_summary_msg_flag = true to print 2 lines of CCTK_VInfo messages
// giving the patch system type and origin
// false to skip this
@@ -109,8 +113,8 @@ using jtutil::error_exit;
//
patch_system::patch_system(fp origin_x_in, fp origin_y_in, fp origin_z_in,
enum patch_system_type type_in,
- int N_ghost_points, int N_overlap_points,
- fp delta_drho_dsigma,
+ int ghost_zone_width, int patch_overlap_width,
+ int N_zones_per_right_angle,
int min_gfn_in, int max_gfn_in,
int ghosted_min_gfn_in, int ghosted_max_gfn_in,
int interp_handle, int interp_par_table_handle,
@@ -126,22 +130,22 @@ patch_system::patch_system(fp origin_x_in, fp origin_y_in, fp origin_z_in,
gridfn_storage_(NULL), // set in setup_gridfn_storage()
ghosted_gridfn_storage_(NULL) // set in setup_gridfn_storage()
{
-if (! jtutil::is_odd(N_overlap_points))
+if (! jtutil::is_odd(patch_overlap_width))
then error_exit(ERROR_EXIT,
"***** patch_system::patch_system(): implementation restriction:\n"
-" N_overlap_points=%d, but we only support odd values!\n"
+" patch_overlap_width=%d, but we only support odd values!\n"
,
- N_overlap_points); /*NOTREACHED*/
-const int N_extend_points = N_overlap_points >> 1;
+ patch_overlap_width); /*NOTREACHED*/
+const int patch_extend_width = patch_overlap_width >> 1;
-if (N_ghost_points < fd_grid::molecule_radius())
+if (ghost_zone_width < fd_grid::molecule_radius())
then error_exit(ERROR_EXIT,
"***** patch_system::patch_system():\n"
-" must have N_ghost_points >= fd_grid::molecule_radius()\n"
-" but got N_ghost_points=%d fd_grid::molecule_radius()=%d!\n"
+" must have ghost_zone_width >= fd_grid::molecule_radius()\n"
+" but got ghost_zone_width=%d fd_grid::molecule_radius()=%d!\n"
" FINITE_DIFF_ORDER=%d (see #define in src/include/config.hh)\n"
,
- N_ghost_points, fd_grid::molecule_radius(),
+ ghost_zone_width, fd_grid::molecule_radius(),
FINITE_DIFF_ORDER); /*NOTREACHED*/
if (print_summary_msg_flag)
@@ -160,12 +164,13 @@ switch (type_in)
case patch_system__full_sphere:
create_patches(patch_system_info::full_sphere
::patch_info_array,
- N_ghost_points, N_extend_points, delta_drho_dsigma,
+ 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__full_sphere(N_overlap_points,
+ setup_ghost_zones__full_sphere(patch_overlap_width,
interp_handle,
interp_par_table_handle,
print_detailed_msg_flag);
@@ -174,12 +179,13 @@ case patch_system__full_sphere:
case patch_system__plus_z_hemisphere:
create_patches(patch_system_info::plus_z_hemisphere
::patch_info_array,
- N_ghost_points, N_extend_points, delta_drho_dsigma,
+ 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_z_hemisphere(N_overlap_points,
+ setup_ghost_zones__plus_z_hemisphere(patch_overlap_width,
interp_handle,
interp_par_table_handle,
print_detailed_msg_flag);
@@ -188,12 +194,13 @@ case patch_system__plus_z_hemisphere:
case patch_system__plus_xy_quadrant_mirrored:
create_patches(patch_system_info::plus_xy_quadrant_mirrored
::patch_info_array,
- N_ghost_points, N_extend_points, delta_drho_dsigma,
+ 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_xy_quadrant_mirrored(N_overlap_points,
+ setup_ghost_zones__plus_xy_quadrant_mirrored(patch_overlap_width,
interp_handle,
interp_par_table_handle,
print_detailed_msg_flag);
@@ -202,12 +209,13 @@ case patch_system__plus_xy_quadrant_mirrored:
case patch_system__plus_xy_quadrant_rotating:
create_patches(patch_system_info::plus_xy_quadrant_rotating
::patch_info_array,
- N_ghost_points, N_extend_points, delta_drho_dsigma,
+ 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_xy_quadrant_rotating(N_overlap_points,
+ setup_ghost_zones__plus_xy_quadrant_rotating(patch_overlap_width,
interp_handle,
interp_par_table_handle,
print_detailed_msg_flag);
@@ -216,12 +224,13 @@ case patch_system__plus_xy_quadrant_rotating:
case patch_system__plus_xz_quadrant_rotating:
create_patches(patch_system_info::plus_xz_quadrant_rotating
::patch_info_array,
- N_ghost_points, N_extend_points, delta_drho_dsigma,
+ 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_rotating(N_overlap_points,
+ setup_ghost_zones__plus_xz_quadrant_rotating(patch_overlap_width,
interp_handle,
interp_par_table_handle,
print_detailed_msg_flag);
@@ -230,12 +239,13 @@ case patch_system__plus_xz_quadrant_rotating:
case patch_system__plus_xyz_octant_mirrored:
create_patches(patch_system_info::plus_xyz_octant_mirrored
::patch_info_array,
- N_ghost_points, N_extend_points, delta_drho_dsigma,
+ 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_xyz_octant_mirrored(N_overlap_points,
+ setup_ghost_zones__plus_xyz_octant_mirrored(patch_overlap_width,
interp_handle,
interp_par_table_handle,
print_detailed_msg_flag);
@@ -244,12 +254,13 @@ case patch_system__plus_xyz_octant_mirrored:
case patch_system__plus_xyz_octant_rotating:
create_patches(patch_system_info::plus_xyz_octant_rotating
::patch_info_array,
- N_ghost_points, N_extend_points, delta_drho_dsigma,
+ 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_xyz_octant_rotating(N_overlap_points,
+ setup_ghost_zones__plus_xyz_octant_rotating(patch_overlap_width,
interp_handle,
interp_par_table_handle,
print_detailed_msg_flag);
@@ -295,8 +306,8 @@ delete gridfn_storage_;
// *NOT* set up any gridfns.
//
void patch_system::create_patches(const struct patch_info patch_info_in[],
- int N_ghost_points, int N_extend_points,
- fp delta_drho_dsigma,
+ int ghost_zone_width, int patch_extend_width,
+ int N_zones_per_right_angle,
bool print_msg_flag)
{
N_grid_points_ = 0;
@@ -316,29 +327,29 @@ ghosted_N_grid_points_ = 0;
case 'z':
p = new z_patch(*this, pn,
pi.name, pi.is_plus,
- pi.grid_array_pars(N_ghost_points,
- N_extend_points,
- delta_drho_dsigma),
- pi.grid_pars(N_extend_points,
- delta_drho_dsigma));
+ pi.grid_array_pars(ghost_zone_width,
+ patch_extend_width,
+ N_zones_per_right_angle),
+ pi.grid_pars(patch_extend_width,
+ N_zones_per_right_angle));
break;
case 'x':
p = new x_patch(*this, pn,
pi.name, pi.is_plus,
- pi.grid_array_pars(N_ghost_points,
- N_extend_points,
- delta_drho_dsigma),
- pi.grid_pars(N_extend_points,
- delta_drho_dsigma));
+ pi.grid_array_pars(ghost_zone_width,
+ patch_extend_width,
+ N_zones_per_right_angle),
+ pi.grid_pars(patch_extend_width,
+ N_zones_per_right_angle));
break;
case 'y':
p = new y_patch(*this, pn,
pi.name, pi.is_plus,
- pi.grid_array_pars(N_ghost_points,
- N_extend_points,
- delta_drho_dsigma),
- pi.grid_pars(N_extend_points,
- delta_drho_dsigma));
+ pi.grid_array_pars(ghost_zone_width,
+ patch_extend_width,
+ N_zones_per_right_angle),
+ pi.grid_pars(patch_extend_width,
+ N_zones_per_right_angle));
break;
default:
error_exit(ERROR_EXIT,
@@ -604,7 +615,7 @@ const patch& plast = ith_patch(N_patches()-1);
// for a full-sphere patch system.
//
void patch_system::setup_ghost_zones__full_sphere
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag)
{
@@ -623,58 +634,58 @@ patch& mz = ith_patch(patch_number_of_name("-z"));
if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" creating ghost zones");
-create_interpatch_ghost_zones(pz, px, N_overlap_points);
-create_interpatch_ghost_zones(pz, py, N_overlap_points);
-create_interpatch_ghost_zones(pz, mx, N_overlap_points);
-create_interpatch_ghost_zones(pz, my, N_overlap_points);
-create_interpatch_ghost_zones(px, py, N_overlap_points);
-create_interpatch_ghost_zones(py, mx, N_overlap_points);
-create_interpatch_ghost_zones(mx, my, N_overlap_points);
-create_interpatch_ghost_zones(my, px, N_overlap_points);
-create_interpatch_ghost_zones(mz, px, N_overlap_points);
-create_interpatch_ghost_zones(mz, py, N_overlap_points);
-create_interpatch_ghost_zones(mz, mx, N_overlap_points);
-create_interpatch_ghost_zones(mz, my, N_overlap_points);
+create_interpatch_ghost_zones(pz, px, patch_overlap_width);
+create_interpatch_ghost_zones(pz, py, patch_overlap_width);
+create_interpatch_ghost_zones(pz, mx, 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(py, mx, patch_overlap_width);
+create_interpatch_ghost_zones(mx, my, patch_overlap_width);
+create_interpatch_ghost_zones(my, px, patch_overlap_width);
+create_interpatch_ghost_zones(mz, px, patch_overlap_width);
+create_interpatch_ghost_zones(mz, py, patch_overlap_width);
+create_interpatch_ghost_zones(mz, mx, patch_overlap_width);
+create_interpatch_ghost_zones(mz, my, patch_overlap_width);
// finish setting up the interpatch ghost zones
if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" finishing interpatch setup");
finish_interpatch_setup(pz, px,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(pz, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(pz, mx,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(pz, my,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(px, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(py, mx,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(mx, my,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(my, px,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(mz, px,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(mz, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(mz, mx,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(mz, my,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
assert_all_ghost_zones_fully_setup();
@@ -687,7 +698,7 @@ assert_all_ghost_zones_fully_setup();
// for a +z hemisphere patch system.
//
void patch_system::setup_ghost_zones__plus_z_hemisphere
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag)
{
@@ -705,14 +716,14 @@ patch& my = ith_patch(patch_number_of_name("-y"));
if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" creating ghost zones");
-create_interpatch_ghost_zones(pz, px, N_overlap_points);
-create_interpatch_ghost_zones(pz, py, N_overlap_points);
-create_interpatch_ghost_zones(pz, mx, N_overlap_points);
-create_interpatch_ghost_zones(pz, my, N_overlap_points);
-create_interpatch_ghost_zones(px, py, N_overlap_points);
-create_interpatch_ghost_zones(py, mx, N_overlap_points);
-create_interpatch_ghost_zones(mx, my, N_overlap_points);
-create_interpatch_ghost_zones(my, px, N_overlap_points);
+create_interpatch_ghost_zones(pz, px, patch_overlap_width);
+create_interpatch_ghost_zones(pz, py, patch_overlap_width);
+create_interpatch_ghost_zones(pz, mx, 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(py, mx, patch_overlap_width);
+create_interpatch_ghost_zones(mx, my, patch_overlap_width);
+create_interpatch_ghost_zones(my, px, patch_overlap_width);
px.create_mirror_symmetry_ghost_zone(px.max_rho_patch_edge());
py.create_mirror_symmetry_ghost_zone(py.max_rho_patch_edge());
mx.create_mirror_symmetry_ghost_zone(mx.min_rho_patch_edge());
@@ -723,28 +734,28 @@ if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" finishing interpatch setup");
finish_interpatch_setup(pz, px,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(pz, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(pz, mx,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(pz, my,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(px, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(py, mx,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(mx, my,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(my, px,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
assert_all_ghost_zones_fully_setup();
@@ -757,7 +768,7 @@ assert_all_ghost_zones_fully_setup();
// for a +xy quadrant (mirrored) patch system.
//
void patch_system::setup_ghost_zones__plus_xy_quadrant_mirrored
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag)
{
@@ -774,11 +785,11 @@ patch& mz = ith_patch(patch_number_of_name("-z"));
if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" creating ghost zones");
-create_interpatch_ghost_zones(pz, px, N_overlap_points);
-create_interpatch_ghost_zones(pz, py, N_overlap_points);
-create_interpatch_ghost_zones(px, py, N_overlap_points);
-create_interpatch_ghost_zones(mz, px, N_overlap_points);
-create_interpatch_ghost_zones(mz, py, N_overlap_points);
+create_interpatch_ghost_zones(pz, px, patch_overlap_width);
+create_interpatch_ghost_zones(pz, py, patch_overlap_width);
+create_interpatch_ghost_zones(px, py, patch_overlap_width);
+create_interpatch_ghost_zones(mz, px, patch_overlap_width);
+create_interpatch_ghost_zones(mz, py, patch_overlap_width);
pz.create_mirror_symmetry_ghost_zone(pz.min_rho_patch_edge());
pz.create_mirror_symmetry_ghost_zone(pz.min_sigma_patch_edge());
px.create_mirror_symmetry_ghost_zone(px.min_sigma_patch_edge());
@@ -791,19 +802,19 @@ if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" finishing interpatch setup");
finish_interpatch_setup(pz, px,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(pz, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(px, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(mz, px,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(mz, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
assert_all_ghost_zones_fully_setup();
@@ -816,7 +827,7 @@ assert_all_ghost_zones_fully_setup();
// for a +xy quadrant (rotating) patch system.
//
void patch_system::setup_ghost_zones__plus_xy_quadrant_rotating
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag)
{
@@ -833,11 +844,11 @@ patch& mz = ith_patch(patch_number_of_name("-z"));
if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" creating ghost zones");
-create_interpatch_ghost_zones(pz, px, N_overlap_points);
-create_interpatch_ghost_zones(pz, py, N_overlap_points);
-create_interpatch_ghost_zones(px, py, N_overlap_points);
-create_interpatch_ghost_zones(mz, px, N_overlap_points);
-create_interpatch_ghost_zones(mz, py, N_overlap_points);
+create_interpatch_ghost_zones(pz, px, patch_overlap_width);
+create_interpatch_ghost_zones(pz, py, patch_overlap_width);
+create_interpatch_ghost_zones(px, py, patch_overlap_width);
+create_interpatch_ghost_zones(mz, px, patch_overlap_width);
+create_interpatch_ghost_zones(mz, py, patch_overlap_width);
create_periodic_symmetry_ghost_zones(pz.min_rho_patch_edge(),
pz.min_sigma_patch_edge(),
true);
@@ -853,19 +864,19 @@ if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" finishing interpatch setup");
finish_interpatch_setup(pz, px,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(pz, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(px, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(mz, px,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(mz, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
assert_all_ghost_zones_fully_setup();
@@ -878,7 +889,7 @@ assert_all_ghost_zones_fully_setup();
// for a +xz quadrant (rotating) patch system.
//
void patch_system::setup_ghost_zones__plus_xz_quadrant_rotating
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag)
{
@@ -895,11 +906,11 @@ patch& my = ith_patch(patch_number_of_name("-y"));
if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" creating ghost zones");
-create_interpatch_ghost_zones(pz, px, N_overlap_points);
-create_interpatch_ghost_zones(pz, py, N_overlap_points);
-create_interpatch_ghost_zones(pz, my, N_overlap_points);
-create_interpatch_ghost_zones(px, py, N_overlap_points);
-create_interpatch_ghost_zones(px, my, N_overlap_points);
+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);
px.create_mirror_symmetry_ghost_zone(px.max_rho_patch_edge());
py.create_mirror_symmetry_ghost_zone(py.max_rho_patch_edge());
my.create_mirror_symmetry_ghost_zone(my.min_rho_patch_edge());
@@ -915,19 +926,19 @@ if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" finishing interpatch setup");
finish_interpatch_setup(pz, px,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(pz, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(pz, my,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(px, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(px, my,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
assert_all_ghost_zones_fully_setup();
@@ -940,7 +951,7 @@ assert_all_ghost_zones_fully_setup();
// for a +xyz octant (mirrored) patch system.
//
void patch_system::setup_ghost_zones__plus_xyz_octant_mirrored
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag)
{
@@ -956,9 +967,9 @@ patch& py = ith_patch(patch_number_of_name("+y"));
if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" creating ghost zones");
-create_interpatch_ghost_zones(pz, px, N_overlap_points);
-create_interpatch_ghost_zones(pz, py, N_overlap_points);
-create_interpatch_ghost_zones(px, py, N_overlap_points);
+create_interpatch_ghost_zones(pz, px, patch_overlap_width);
+create_interpatch_ghost_zones(pz, py, patch_overlap_width);
+create_interpatch_ghost_zones(px, py, patch_overlap_width);
pz.create_mirror_symmetry_ghost_zone(pz.min_rho_patch_edge());
pz.create_mirror_symmetry_ghost_zone(pz.min_sigma_patch_edge());
px.create_mirror_symmetry_ghost_zone(px.max_rho_patch_edge());
@@ -971,13 +982,13 @@ if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" finishing interpatch setup");
finish_interpatch_setup(pz, px,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(pz, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(px, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
assert_all_ghost_zones_fully_setup();
@@ -990,7 +1001,7 @@ assert_all_ghost_zones_fully_setup();
// for a +xyz octant (rotating) patch system.
//
void patch_system::setup_ghost_zones__plus_xyz_octant_rotating
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag)
{
@@ -1006,9 +1017,9 @@ patch& py = ith_patch(patch_number_of_name("+y"));
if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" creating ghost zones");
-create_interpatch_ghost_zones(pz, px, N_overlap_points);
-create_interpatch_ghost_zones(pz, py, N_overlap_points);
-create_interpatch_ghost_zones(px, py, N_overlap_points);
+create_interpatch_ghost_zones(pz, px, patch_overlap_width);
+create_interpatch_ghost_zones(pz, py, patch_overlap_width);
+create_interpatch_ghost_zones(px, py, patch_overlap_width);
px.create_mirror_symmetry_ghost_zone(px.max_rho_patch_edge());
py.create_mirror_symmetry_ghost_zone(py.max_rho_patch_edge());
create_periodic_symmetry_ghost_zones(pz.min_rho_patch_edge(),
@@ -1023,13 +1034,13 @@ if (print_msg_flag)
then CCTK_VInfo(CCTK_THORNSTRING,
" finishing interpatch setup");
finish_interpatch_setup(pz, px,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(pz, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
finish_interpatch_setup(px, py,
- N_overlap_points,
+ patch_overlap_width,
interp_handle, interp_par_table_handle);
assert_all_ghost_zones_fully_setup();
@@ -1069,13 +1080,13 @@ if (ex == ey)
//
//static
void patch_system::create_interpatch_ghost_zones(patch &px, patch &py,
- int N_overlap_points)
+ int patch_overlap_width)
{
-const patch_edge& ex = px.edge_adjacent_to_patch(py, N_overlap_points);
-const patch_edge& ey = py.edge_adjacent_to_patch(px, N_overlap_points);
+const patch_edge& ex = px.edge_adjacent_to_patch(py, patch_overlap_width);
+const patch_edge& ey = py.edge_adjacent_to_patch(px, patch_overlap_width);
-px.create_interpatch_ghost_zone(ex, ey, N_overlap_points);
-py.create_interpatch_ghost_zone(ey, ex, N_overlap_points);
+px.create_interpatch_ghost_zone(ex, ey, patch_overlap_width);
+py.create_interpatch_ghost_zone(ey, ex, patch_overlap_width);
}
//******************************************************************************
@@ -1087,11 +1098,11 @@ py.create_interpatch_ghost_zone(ey, ex, N_overlap_points);
//static
void patch_system::finish_interpatch_setup
(patch &px, patch &py,
- int N_overlap_points,
+ int patch_overlap_width,
int interp_handle, int interp_par_table_handle)
{
-const patch_edge& ex = px.edge_adjacent_to_patch(py, N_overlap_points);
-const patch_edge& ey = py.edge_adjacent_to_patch(px, N_overlap_points);
+const patch_edge& ex = px.edge_adjacent_to_patch(py, patch_overlap_width);
+const patch_edge& ey = py.edge_adjacent_to_patch(px, patch_overlap_width);
px.ghost_zone_on_edge(ex)
.cast_to_interpatch_ghost_zone()
.finish_setup(interp_handle, interp_par_table_handle);
@@ -1545,7 +1556,7 @@ norms.reset();
//
// FIXME:
// We silently assume that the patches butt-join, i.e. that they don't
-// overlap, i.e. that N_overlap_points=1
+// overlap, i.e. that patch_overlap_width=1
//
// Arguments:
// src_gfn = (in) The gridfn to be integrated.
diff --git a/src/patch/patch_system.hh b/src/patch/patch_system.hh
index 0683a6f..26d324d 100644
--- a/src/patch/patch_system.hh
+++ b/src/patch/patch_system.hh
@@ -419,8 +419,8 @@ public:
// ***** constructor, destructor *****
//
// This constructor doesn't support the full generality of the
- // patch data structures (which would, eg, allow N_ghost_points
- // and N_extend_points and the interpolator parameters to vary
+ // patch data structures (which would, eg, allow ghost_zone_width
+ // and patch_extend_width and the interpolator parameters to vary
// from ghost zone to ghost zone, and the grid spacings to vary
// from patch to patch. But in practice we'd probably never
// use that generality...
@@ -428,8 +428,8 @@ public:
public:
patch_system(fp origin_x_in, fp origin_y_in, fp origin_z_in,
enum patch_system_type type_in,
- int N_ghost_points, int N_overlap_points,
- fp delta_drho_dsigma,
+ int ghost_zone_width, int patch_overlap_width,
+ int N_zones_per_right_angle,
int min_gfn_in, int max_gfn_in,
int ghosted_min_gfn_in, int ghosted_max_gfn_in,
int interp_handle_in, int interp_par_table_handle_in,
@@ -446,8 +446,8 @@ private:
// does *NOT* create ghost zones
// does *NOT* set up gridfns
void create_patches(const struct patch_info patch_info_in[],
- int N_ghost_points, int N_extend_points,
- fp delta_drho_dsigma,
+ int ghost_zone_width, int patch_extend_width,
+ int N_zones_per_right_angle,
bool print_msg_flag);
// setup all gridfns with contiguous-across-patches storage
@@ -458,31 +458,31 @@ private:
// setup (create/interlink) all ghost zones
void setup_ghost_zones__full_sphere
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag);
void setup_ghost_zones__plus_z_hemisphere
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag);
void setup_ghost_zones__plus_xy_quadrant_mirrored
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag);
void setup_ghost_zones__plus_xy_quadrant_rotating
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag);
void setup_ghost_zones__plus_xz_quadrant_rotating
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag);
void setup_ghost_zones__plus_xyz_octant_mirrored
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag);
void setup_ghost_zones__plus_xyz_octant_rotating
- (int N_overlap_points,
+ (int patch_overlap_width,
int interp_handle, int interp_par_table_handle,
bool print_msg_flag);
@@ -496,14 +496,14 @@ private:
// ... automagically figures out which edges are adjacent
static
void create_interpatch_ghost_zones(patch &px, patch &py,
- int N_overlap_points);
+ int patch_overlap_width);
// finish setup of a pair of interpatch ghost zones
// ... automagically figures out which edges are adjacent
static
void finish_interpatch_setup
(patch &px, patch &py,
- int N_overlap_points,
+ int patch_overlap_width,
int interp_handle, int interp_par_table_handle);
// assert() that all ghost zones of all patches are fully setup
diff --git a/src/patch/test_patch_system.cc b/src/patch/test_patch_system.cc
index 863f780..1aa0917 100644
--- a/src/patch/test_patch_system.cc
+++ b/src/patch/test_patch_system.cc
@@ -168,7 +168,7 @@ if (interp_par_table_handle < 0)
CCTK_VInfo(CCTK_THORNSTRING, "about to create patch system");
patch_system ps(origin_x, origin_y, origin_z,
patch_system::type_of_name(patch_system_type),
- N_ghost_points, N_overlap_points, delta_drho_dsigma,
+ ghost_zone_width, patch_overlap_width, N_zones_per_right_angle,
nominal_min_gfn, nominal_max_gfn,
ghosted_min_gfn, ghosted_max_gfn,
interp_handle, interp_par_table_handle);