diff options
-rw-r--r-- | src/patch/patch_system.cc | 222 | ||||
-rw-r--r-- | src/patch/patch_system.hh | 26 |
2 files changed, 144 insertions, 104 deletions
diff --git a/src/patch/patch_system.cc b/src/patch/patch_system.cc index 73ac047..ef62766 100644 --- a/src/patch/patch_system.cc +++ b/src/patch/patch_system.cc @@ -57,7 +57,7 @@ using jtutil::error_exit; namespace patch_system_info { const grid_arrays::grid_array_pars& patch_info::grid_array_pars - (int N_ghost_points, fp delta_drho_dsigma) + (int N_ghost_points, int N_overlap_points, fp delta_drho_dsigma) const { static struct grid_arrays::grid_array_pars array_pars; @@ -66,10 +66,16 @@ array_pars.min_irho = round<fp>::to_integer(min_drho/delta_drho_dsigma); array_pars.max_irho = array_pars.min_irho + round<fp>::to_integer((max_drho-min_drho) / delta_drho_dsigma); +array_pars.min_irho -= N_overlap_points; +array_pars.max_irho += N_overlap_points; + array_pars.min_isigma = round<fp>::to_integer(min_dsigma/delta_drho_dsigma); array_pars.max_isigma = array_pars.min_isigma + round<fp>::to_integer((max_dsigma-min_dsigma) / delta_drho_dsigma); +array_pars.min_isigma -= N_overlap_points; +array_pars.max_isigma += N_overlap_points; + array_pars.min_rho_N_ghost_points = N_ghost_points; array_pars.max_rho_N_ghost_points = N_ghost_points; array_pars.min_sigma_N_ghost_points = N_ghost_points; @@ -90,16 +96,19 @@ return array_pars; // namespace patch_system_info { -const grid::grid_pars& patch_info::grid_pars(fp delta_drho_dsigma) const +const grid::grid_pars& patch_info::grid_pars + (int N_overlap_points, fp delta_drho_dsigma) + const { +const fp fp_N_overlap = fp(N_overlap_points); static struct grid::grid_pars grid_pars_buffer; -grid_pars_buffer. min_drho = min_drho; +grid_pars_buffer. min_drho = min_drho - fp_N_overlap*delta_drho_dsigma; grid_pars_buffer.delta_drho = delta_drho_dsigma; -grid_pars_buffer. max_drho = max_drho; -grid_pars_buffer. min_dsigma = min_dsigma; +grid_pars_buffer. max_drho = max_drho + fp_N_overlap*delta_drho_dsigma; +grid_pars_buffer. min_dsigma = min_dsigma - fp_N_overlap*delta_drho_dsigma; grid_pars_buffer.delta_dsigma = delta_drho_dsigma; -grid_pars_buffer. max_dsigma = max_dsigma; +grid_pars_buffer. max_dsigma = max_dsigma + fp_N_overlap*delta_drho_dsigma; return grid_pars_buffer; } @@ -114,7 +123,8 @@ return grid_pars_buffer; // 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, fp delta_drho_dsigma, + int N_ghost_points, int N_overlap_points, + fp delta_drho_dsigma, int min_gfn_in, int max_gfn_in, int interpolator_order) @@ -127,22 +137,26 @@ all_patches_ = new array1d<patch *>(0, N_patches()-1); switch (type_in) { case full_sphere_patch_system: - setup_full_sphere_patch_system(N_ghost_points, delta_drho_dsigma, + setup_full_sphere_patch_system(N_ghost_points, N_overlap_points, + delta_drho_dsigma, min_gfn_in, max_gfn_in, interpolator_order); break; case hemisphere_patch_system: - setup_hemisphere_patch_system(N_ghost_points, delta_drho_dsigma, + setup_hemisphere_patch_system(N_ghost_points, N_overlap_points, + delta_drho_dsigma, min_gfn_in, max_gfn_in, interpolator_order); break; case quadrant_patch_system: - setup_quadrant_patch_system(N_ghost_points, delta_drho_dsigma, + setup_quadrant_patch_system(N_ghost_points, N_overlap_points, + delta_drho_dsigma, min_gfn_in, max_gfn_in, interpolator_order); break; case octant_patch_system: - setup_octant_patch_system(N_ghost_points, delta_drho_dsigma, + setup_octant_patch_system(N_ghost_points, N_overlap_points, + delta_drho_dsigma, min_gfn_in, max_gfn_in, interpolator_order); break; @@ -176,7 +190,7 @@ delete all_patches_; // full patch system. // void patch_system::setup_full_sphere_patch_system - (int N_ghost_points, fp delta_drho_dsigma, + (int N_ghost_points, int N_overlap_points, fp delta_drho_dsigma, int min_gfn_in, int max_gfn_in, int interpolator_order) { @@ -186,38 +200,44 @@ using namespace patch_system_info::full_sphere_patch_system_info; patch& pz = *new z_patch(*this, plus_z.patch_number, "+z", patch::patch_is_plus, plus_z.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - plus_z.grid_pars(delta_drho_dsigma), + plus_z.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& px = *new x_patch(*this, plus_x.patch_number, "+x", patch::patch_is_plus, plus_x.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - plus_x.grid_pars(delta_drho_dsigma), + plus_x.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& py = *new y_patch(*this, plus_y.patch_number, "+y", patch::patch_is_plus, plus_y.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - plus_y.grid_pars(delta_drho_dsigma), + plus_y.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& mx = *new x_patch(*this, minus_x.patch_number, "-x", patch::patch_is_minus, minus_x.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - minus_x.grid_pars(delta_drho_dsigma), + minus_x.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& my = *new y_patch(*this, minus_y.patch_number, "-y", patch::patch_is_minus, minus_y.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - minus_y.grid_pars(delta_drho_dsigma), + minus_y.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& mz = *new z_patch(*this, minus_z.patch_number, "-z", patch::patch_is_minus, minus_z.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - minus_z.grid_pars(delta_drho_dsigma), + minus_z.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); // attach the patches to the patch system @@ -229,32 +249,32 @@ patch& mz = *new z_patch(*this, minus_z.patch_number, (*all_patches_)(minus_z.patch_number) = & mz; // create the ghost zones -setup_adjacent_ghost_zones(pz, px); -setup_adjacent_ghost_zones(pz, py); -setup_adjacent_ghost_zones(pz, mx); -setup_adjacent_ghost_zones(pz, my); -setup_adjacent_ghost_zones(px, py); -setup_adjacent_ghost_zones(py, mx); -setup_adjacent_ghost_zones(mx, my); -setup_adjacent_ghost_zones(my, px); -setup_adjacent_ghost_zones(mz, px); -setup_adjacent_ghost_zones(mz, py); -setup_adjacent_ghost_zones(mz, mx); -setup_adjacent_ghost_zones(mz, my); +setup_adjacent_ghost_zones(pz, px, N_overlap_points); +setup_adjacent_ghost_zones(pz, py, N_overlap_points); +setup_adjacent_ghost_zones(pz, mx, N_overlap_points); +setup_adjacent_ghost_zones(pz, my, N_overlap_points); +setup_adjacent_ghost_zones(px, py, N_overlap_points); +setup_adjacent_ghost_zones(py, mx, N_overlap_points); +setup_adjacent_ghost_zones(mx, my, N_overlap_points); +setup_adjacent_ghost_zones(my, px, N_overlap_points); +setup_adjacent_ghost_zones(mz, px, N_overlap_points); +setup_adjacent_ghost_zones(mz, py, N_overlap_points); +setup_adjacent_ghost_zones(mz, mx, N_overlap_points); +setup_adjacent_ghost_zones(mz, my, N_overlap_points); // create the patch frontiers -setup_adjacent_patch_frontiers(pz, px, interpolator_order); -setup_adjacent_patch_frontiers(pz, py, interpolator_order); -setup_adjacent_patch_frontiers(pz, mx, interpolator_order); -setup_adjacent_patch_frontiers(pz, my, interpolator_order); -setup_adjacent_patch_frontiers(px, py, interpolator_order); -setup_adjacent_patch_frontiers(py, mx, interpolator_order); -setup_adjacent_patch_frontiers(mx, my, interpolator_order); -setup_adjacent_patch_frontiers(my, px, interpolator_order); -setup_adjacent_patch_frontiers(mz, px, interpolator_order); -setup_adjacent_patch_frontiers(mz, py, interpolator_order); -setup_adjacent_patch_frontiers(mz, mx, interpolator_order); -setup_adjacent_patch_frontiers(mz, my, interpolator_order); +setup_adjacent_patch_frontiers(pz, px, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(pz, py, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(pz, mx, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(pz, my, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(px, py, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(py, mx, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(mx, my, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(my, px, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(mz, px, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(mz, py, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(mz, mx, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(mz, my, N_overlap_points, interpolator_order); assert_all_ghost_zones_fully_setup(); } @@ -266,7 +286,7 @@ assert_all_ghost_zones_fully_setup(); // half patch system. // void patch_system::setup_hemisphere_patch_system - (int N_ghost_points, fp delta_drho_dsigma, + (int N_ghost_points, int N_overlap_points, fp delta_drho_dsigma, int min_gfn_in, int max_gfn_in, int interpolator_order) { @@ -276,32 +296,37 @@ using namespace patch_system_info::hemisphere_patch_system_info; patch& pz = *new z_patch(*this, plus_z.patch_number, "+z", patch::patch_is_plus, plus_z.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - plus_z.grid_pars(delta_drho_dsigma), + plus_z.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& px = *new x_patch(*this, plus_x.patch_number, "+x", patch::patch_is_plus, plus_x.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - plus_x.grid_pars(delta_drho_dsigma), + plus_x.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& py = *new y_patch(*this, plus_y.patch_number, "+y", patch::patch_is_plus, plus_y.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - plus_y.grid_pars(delta_drho_dsigma), + plus_y.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& mx = *new x_patch(*this, minus_x.patch_number, "-x", patch::patch_is_minus, minus_x.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - minus_x.grid_pars(delta_drho_dsigma), + minus_x.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& my = *new y_patch(*this, minus_y.patch_number, "-y", patch::patch_is_minus, minus_y.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - minus_y.grid_pars(delta_drho_dsigma), + minus_y.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); // attach the patches to the patch system @@ -312,28 +337,28 @@ patch& my = *new y_patch(*this, minus_y.patch_number, (*all_patches_)(minus_y.patch_number) = & my; // create the ghost zones -setup_adjacent_ghost_zones(pz, px); -setup_adjacent_ghost_zones(pz, py); -setup_adjacent_ghost_zones(pz, mx); -setup_adjacent_ghost_zones(pz, my); -setup_adjacent_ghost_zones(px, py); -setup_adjacent_ghost_zones(py, mx); -setup_adjacent_ghost_zones(mx, my); -setup_adjacent_ghost_zones(my, px); +setup_adjacent_ghost_zones(pz, px, N_overlap_points); +setup_adjacent_ghost_zones(pz, py, N_overlap_points); +setup_adjacent_ghost_zones(pz, mx, N_overlap_points); +setup_adjacent_ghost_zones(pz, my, N_overlap_points); +setup_adjacent_ghost_zones(px, py, N_overlap_points); +setup_adjacent_ghost_zones(py, mx, N_overlap_points); +setup_adjacent_ghost_zones(mx, my, N_overlap_points); +setup_adjacent_ghost_zones(my, px, N_overlap_points); px.setup_mirror_symmetry_ghost_zone(px.max_rho_patch_edge()); py.setup_mirror_symmetry_ghost_zone(py.max_rho_patch_edge()); mx.setup_mirror_symmetry_ghost_zone(mx.min_rho_patch_edge()); my.setup_mirror_symmetry_ghost_zone(my.min_rho_patch_edge()); // create the patch frontiers -setup_adjacent_patch_frontiers(pz, px, interpolator_order); -setup_adjacent_patch_frontiers(pz, py, interpolator_order); -setup_adjacent_patch_frontiers(pz, mx, interpolator_order); -setup_adjacent_patch_frontiers(pz, my, interpolator_order); -setup_adjacent_patch_frontiers(px, py, interpolator_order); -setup_adjacent_patch_frontiers(py, mx, interpolator_order); -setup_adjacent_patch_frontiers(mx, my, interpolator_order); -setup_adjacent_patch_frontiers(my, px, interpolator_order); +setup_adjacent_patch_frontiers(pz, px, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(pz, py, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(pz, mx, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(pz, my, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(px, py, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(py, mx, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(mx, my, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(my, px, N_overlap_points, interpolator_order); assert_all_ghost_zones_fully_setup(); } @@ -345,7 +370,7 @@ assert_all_ghost_zones_fully_setup(); // quadrant patch system. // void patch_system::setup_quadrant_patch_system - (int N_ghost_points, fp delta_drho_dsigma, + (int N_ghost_points, int N_overlap_points, fp delta_drho_dsigma, int min_gfn_in, int max_gfn_in, int interpolator_order) { @@ -355,26 +380,30 @@ using namespace patch_system_info::quadrant_patch_system_info; patch& pz = *new z_patch(*this, plus_z.patch_number, "+z", patch::patch_is_plus, plus_z.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - plus_z.grid_pars(delta_drho_dsigma), + plus_z.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& px = *new x_patch(*this, plus_x.patch_number, "+x", patch::patch_is_plus, plus_x.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - plus_x.grid_pars(delta_drho_dsigma), + plus_x.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& py = *new y_patch(*this, plus_y.patch_number, "+y", patch::patch_is_plus, plus_y.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - plus_y.grid_pars(delta_drho_dsigma), + plus_y.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& mz = *new z_patch(*this, minus_z.patch_number, "-z", patch::patch_is_minus, minus_z.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - minus_z.grid_pars(delta_drho_dsigma), + minus_z.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); // attach the patches to the patch system @@ -384,11 +413,11 @@ patch& mz = *new z_patch(*this, minus_z.patch_number, (*all_patches_)(minus_z.patch_number) = & mz; // create the ghost zones -setup_adjacent_ghost_zones(pz, px); -setup_adjacent_ghost_zones(pz, py); -setup_adjacent_ghost_zones(px, py); -setup_adjacent_ghost_zones(mz, px); -setup_adjacent_ghost_zones(mz, py); +setup_adjacent_ghost_zones(pz, px, N_overlap_points); +setup_adjacent_ghost_zones(pz, py, N_overlap_points); +setup_adjacent_ghost_zones(px, py, N_overlap_points); +setup_adjacent_ghost_zones(mz, px, N_overlap_points); +setup_adjacent_ghost_zones(mz, py, N_overlap_points); setup_periodic_symmetry_ghost_zones(pz.min_rho_patch_edge(), pz.min_sigma_patch_edge(), cpm_map::plus_map); @@ -400,11 +429,11 @@ setup_periodic_symmetry_ghost_zones(mz.max_rho_patch_edge(), cpm_map::plus_map); // create the patch frontiers -setup_adjacent_patch_frontiers(pz, px, interpolator_order); -setup_adjacent_patch_frontiers(pz, py, interpolator_order); -setup_adjacent_patch_frontiers(px, py, interpolator_order); -setup_adjacent_patch_frontiers(mz, px, interpolator_order); -setup_adjacent_patch_frontiers(mz, py, interpolator_order); +setup_adjacent_patch_frontiers(pz, px, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(pz, py, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(px, py, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(mz, px, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(mz, py, N_overlap_points, interpolator_order); assert_all_ghost_zones_fully_setup(); } @@ -416,7 +445,7 @@ assert_all_ghost_zones_fully_setup(); // octant patch system. // void patch_system::setup_octant_patch_system - (int N_ghost_points, fp delta_drho_dsigma, + (int N_ghost_points, int N_overlap_points, fp delta_drho_dsigma, int min_gfn_in, int max_gfn_in, int interpolator_order) { @@ -426,20 +455,23 @@ using namespace patch_system_info::octant_patch_system_info; patch& pz = *new z_patch(*this, plus_z.patch_number, "+z", patch::patch_is_plus, plus_z.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - plus_z.grid_pars(delta_drho_dsigma), + plus_z.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& px = *new x_patch(*this, plus_x.patch_number, "+x", patch::patch_is_plus, plus_x.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - plus_x.grid_pars(delta_drho_dsigma), + plus_x.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); patch& py = *new y_patch(*this, plus_y.patch_number, "+y", patch::patch_is_plus, plus_y.grid_array_pars(N_ghost_points, + N_overlap_points, delta_drho_dsigma), - plus_y.grid_pars(delta_drho_dsigma), + plus_y.grid_pars(N_overlap_points, delta_drho_dsigma), min_gfn_in, max_gfn_in); // attach the patches to the patch system @@ -448,9 +480,9 @@ patch& py = *new y_patch(*this, plus_y.patch_number, (*all_patches_)(plus_y.patch_number) = & py; // create the ghost zones -setup_adjacent_ghost_zones(pz, px); -setup_adjacent_ghost_zones(pz, py); -setup_adjacent_ghost_zones(px, py); +setup_adjacent_ghost_zones(pz, px, N_overlap_points); +setup_adjacent_ghost_zones(pz, py, N_overlap_points); +setup_adjacent_ghost_zones(px, py, N_overlap_points); setup_periodic_symmetry_ghost_zones(pz.min_rho_patch_edge(), pz.min_sigma_patch_edge(), cpm_map::plus_map); @@ -459,9 +491,9 @@ setup_periodic_symmetry_ghost_zones(px.min_sigma_patch_edge(), cpm_map::plus_map); // create the patch frontiers -setup_adjacent_patch_frontiers(pz, px, interpolator_order); -setup_adjacent_patch_frontiers(pz, py, interpolator_order); -setup_adjacent_patch_frontiers(px, py, interpolator_order); +setup_adjacent_patch_frontiers(pz, px, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(pz, py, N_overlap_points, interpolator_order); +setup_adjacent_patch_frontiers(px, py, N_overlap_points, interpolator_order); assert_all_ghost_zones_fully_setup(); } @@ -490,10 +522,11 @@ ey.my_patch().setup_periodic_symmetry_ghost_zone(ey, ex, ipar_map_sign); // edges. // //static - void patch_system::setup_adjacent_ghost_zones(patch &px, patch &py) + void patch_system::setup_adjacent_ghost_zones(patch &px, patch &py, + int N_overlap_points) { -const patch_edge& ex = px.edge_adjacent_to_patch(py); -const patch_edge& ey = py.edge_adjacent_to_patch(px); +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); px.setup_interpatch_ghost_zone(ex, ey); py.setup_interpatch_ghost_zone(ey, ex); @@ -508,10 +541,11 @@ py.setup_interpatch_ghost_zone(ey, ex); // //static void patch_system::setup_adjacent_patch_frontiers(patch &px, patch &py, + int N_overlap_points, int interpolator_order) { -const patch_edge& ex = px.edge_adjacent_to_patch(py); -const patch_edge& ey = py.edge_adjacent_to_patch(px); +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); interpatch_ghost_zone& igx = px.interpatch_ghost_zone_on_edge(ex); interpatch_ghost_zone& igy = py.interpatch_ghost_zone_on_edge(ey); diff --git a/src/patch/patch_system.hh b/src/patch/patch_system.hh index 64efff8..4352122 100644 --- a/src/patch/patch_system.hh +++ b/src/patch/patch_system.hh @@ -59,14 +59,16 @@ 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, fp delta_drho_dsigma) + (int N_ghost_points, int N_overlap_points, fp delta_drho_dsigma) const; // compute and return reference to struct grid::grid_pars // from the info in this struct // ... result refers to internal static buffer; // the usual caveats about lifetimes/overwriting apply - const grid::grid_pars& grid_pars(fp delta_drho_dsigma) const; + const grid::grid_pars& grid_pars + (int N_overlap_points, fp delta_drho_dsigma) + const; }; // @@ -252,7 +254,8 @@ 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, fp delta_drho_dsigma, + int N_ghost_points, int N_overlap_points, + fp delta_drho_dsigma, int min_gfn_in, int max_gfn_in, int interpolator_order_in); ~patch_system(); @@ -264,20 +267,21 @@ private: // create/interlink patches, ghost zones, and frontiers void setup_full_sphere_patch_system - (int N_ghost_points, fp delta_drho_dsigma, + (int N_ghost_points, int N_overlap_points, fp delta_drho_dsigma, int min_gfn_in, int max_gfn_in, int interpolator_order_in); void setup_hemisphere_patch_system - (int N_ghost_points, fp delta_drho_dsigma, + (int N_ghost_points, int N_overlap_points, fp delta_drho_dsigma, int min_gfn_in, int max_gfn_in, int interpolator_order_in); void setup_quadrant_patch_system - (int N_ghost_points, fp delta_drho_dsigma, + (int N_ghost_points, int N_overlap_points, fp delta_drho_dsigma, + int min_gfn_in, int max_gfn_in, + int interpolator_order_in); + void setup_octant_patch_system + (int N_ghost_points, int N_overlap_points, fp delta_drho_dsigma, int min_gfn_in, int max_gfn_in, int interpolator_order_in); - void setup_octant_patch_system(int N_ghost_points, fp delta_drho_dsigma, - int min_gfn_in, int max_gfn_in, - int interpolator_order_in); // create/interlink a pair of periodic-symmetry ghost zones static @@ -288,12 +292,14 @@ private: // create/interlink a pair of interpatch ghost zones // ... automagically figures out which edges are adjacent static - void setup_adjacent_ghost_zones(patch &px, patch &py); + void setup_adjacent_ghost_zones(patch &px, patch &py, + int N_overlap_points); // create/interlink a pair of patch frontiers // ... automagically figures out which edges are adjacent static void setup_adjacent_patch_frontiers(patch &px, patch &py, + int N_overlap_points, int interpolator_order); // assert() that all ghost zones (and frontiers, where applicable) |