aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/patch/patch_system.cc222
-rw-r--r--src/patch/patch_system.hh26
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)