diff options
author | jthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5> | 2002-10-31 18:30:50 +0000 |
---|---|---|
committer | jthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5> | 2002-10-31 18:30:50 +0000 |
commit | 1f22316779d658286289f583363095a31df67290 (patch) | |
tree | c6484f6b516c4a61c6440409e6677e0da58f4f93 /src/patch | |
parent | fea351e3f95fd7e7f525c018ee989db296e3f7ad (diff) |
*** empty log message ***
git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinAnalysis/AHFinderDirect/trunk@874 f88db872-0e4f-0410-b76b-b9085cfa78c5
Diffstat (limited to 'src/patch')
-rw-r--r-- | src/patch/ghost_zone.cc | 12 | ||||
-rw-r--r-- | src/patch/ghost_zone.hh | 2 | ||||
-rw-r--r-- | src/patch/grid.cc | 24 | ||||
-rw-r--r-- | src/patch/grid.hh | 4 | ||||
-rw-r--r-- | src/patch/patch.cc | 34 | ||||
-rw-r--r-- | src/patch/patch.hh | 8 | ||||
-rw-r--r-- | src/patch/patch_info.cc | 120 | ||||
-rw-r--r-- | src/patch/patch_info.hh | 39 | ||||
-rw-r--r-- | src/patch/patch_system.cc | 301 | ||||
-rw-r--r-- | src/patch/patch_system.hh | 30 | ||||
-rw-r--r-- | src/patch/test_patch_system.cc | 2 |
11 files changed, 333 insertions, 243 deletions
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); |