summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2019-03-17 13:25:21 +0100
committerAnton Khirnov <anton@khirnov.net>2019-03-17 13:26:29 +0100
commitd7ed9e22086510e900e167394305a809cf35bc02 (patch)
treeb44a4a8bf6beb525e4e6fd4724acaaa130128a5e
parente8715ece24b3751edae922331e3319dd0a3e51a6 (diff)
Eliminate offset_right.
It is ill-defined and confusing.
-rw-r--r--src/maximal_slicing_axi_mg.c34
1 files changed, 16 insertions, 18 deletions
diff --git a/src/maximal_slicing_axi_mg.c b/src/maximal_slicing_axi_mg.c
index bef2139..fed6ff5 100644
--- a/src/maximal_slicing_axi_mg.c
+++ b/src/maximal_slicing_axi_mg.c
@@ -59,7 +59,6 @@ typedef struct CoordPatch {
/* number of x/z grid points by which the elliptic solver domain is offset
* from the cactus grid */
ptrdiff_t offset_left[2];
- ptrdiff_t offset_right[2];
} CoordPatch;
typedef struct MSMGContext {
@@ -199,7 +198,6 @@ static CoordPatch *get_coord_patch(MSMGContext *ms, int level)
domain_size[i]++;
cp->offset_left[i] = offset_left;
- cp->offset_right[i] = offset_right;
}
if (domain_size[0] != domain_size[1])
@@ -476,14 +474,14 @@ static void solution_to_grid(CoordPatch *cp, double *dst)
if (cp->level == 0) {
/* on the coarsest level, extrapolate the outer boundary ghost points */
- for (int idx_z = cp->offset_left[1]; idx_z < cp->grid_size[2] - cp->offset_right[1]; idx_z++)
- for (int idx_x = cp->grid_size[0] - cp->offset_right[0]; idx_x < cp->grid_size[0]; idx_x++) {
+ for (int idx_z = cp->offset_left[1]; idx_z < cp->offset_left[1] + cp->solver->domain_size; idx_z++)
+ for (int idx_x = cp->offset_left[1] + cp->solver->domain_size; idx_x < cp->grid_size[0]; idx_x++) {
const ptrdiff_t idx_dst = CPINDEX(cp, idx_x, cp->y_idx, idx_z);
dst[idx_dst] = 2.0 * dst[idx_dst - 1] - dst[idx_dst - 2];
}
for (int idx_x = cp->offset_left[0]; idx_x < cp->grid_size[0]; idx_x++)
- for (int idx_z = cp->grid_size[2] - cp->offset_right[1]; idx_z < cp->grid_size[2]; idx_z++) {
+ for (int idx_z = cp->offset_left[1] + cp->solver->domain_size; idx_z < cp->grid_size[2]; idx_z++) {
const ptrdiff_t idx_dst = CPINDEX(cp, idx_x, cp->y_idx, idx_z);
const ptrdiff_t idx_src0 = CPINDEX(cp, idx_x, cp->y_idx, idx_z - 1);
const ptrdiff_t idx_src1 = CPINDEX(cp, idx_x, cp->y_idx, idx_z - 2);
@@ -566,14 +564,14 @@ void msa_mg_eval(CCTK_ARGUMENTS)
LOGDEBUG( "extrapolating BCs from t1=%g (%g) and t0=%g (%g)\n", lapse_prev1_time[reflevel], fact1, lapse_prev0_time[reflevel], fact0);
start = gettime();
- for (ptrdiff_t idx_z = 0; idx_z < cp->offset_right[1]; idx_z++)
+ for (ptrdiff_t idx_z = cp->offset_left[1] + cp->solver->domain_size - 1; idx_z < cctkGH->cctk_lsh[2]; idx_z++)
for (ptrdiff_t idx_x = 0; idx_x < cctkGH->cctk_lsh[0]; idx_x++) {
- const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, idx_x, cp->y_idx, cctkGH->cctk_lsh[2] - cp->offset_right[1] + idx_z);
+ const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, idx_x, cp->y_idx, idx_z);
lapse_mg_eval[idx] = fact0 * lapse_prev0[idx] + fact1 * lapse_prev1[idx];
}
- for (int idx_z = 0; idx_z < cctkGH->cctk_lsh[2]; idx_z++)
- for (int idx_x = 0; idx_x < cp->offset_right[0]; idx_x++) {
- const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, cctkGH->cctk_lsh[0] - cp->offset_right[0] + idx_x, cp->y_idx, idx_z);
+ for (ptrdiff_t idx_z = 0; idx_z < cctkGH->cctk_lsh[2]; idx_z++)
+ for (ptrdiff_t idx_x = cp->offset_left[0] + cp->solver->domain_size - 1; idx_x < cctkGH->cctk_lsh[0]; idx_x++) {
+ const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, idx_x, cp->y_idx, idx_z);
lapse_mg_eval[idx] = fact0 * lapse_prev0[idx] + fact1 * lapse_prev1[idx];
}
@@ -581,7 +579,7 @@ void msa_mg_eval(CCTK_ARGUMENTS)
MG2DBoundary *bnd = cp->solver->boundaries[MG2D_BOUNDARY_1U];
double *dst = bnd->val + j * bnd->val_stride;
for (ptrdiff_t i = -j; i < (ptrdiff_t)cp->solver->domain_size + j; i++) {
- const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, i + cp->offset_left[0], cp->y_idx, cctkGH->cctk_lsh[2] - cp->offset_right[1] + j);
+ const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, i + cp->offset_left[0], cp->y_idx, cp->offset_left[1] + cp->solver->domain_size - 1 + j);
dst[i] = lapse_mg_eval[idx] - 1.0;
}
}
@@ -589,7 +587,7 @@ void msa_mg_eval(CCTK_ARGUMENTS)
MG2DBoundary *bnd = cp->solver->boundaries[MG2D_BOUNDARY_0U];
double *dst = bnd->val + j * bnd->val_stride;
for (ptrdiff_t i = -j; i < (ptrdiff_t)cp->solver->domain_size + j; i++) {
- const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, cctkGH->cctk_lsh[0] - cp->offset_right[0] + j, cp->y_idx, cp->offset_left[1] + i);
+ const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, cp->offset_left[0] + cp->solver->domain_size - 1 + j, cp->y_idx, cp->offset_left[1] + i);
dst[i] = lapse_mg_eval[idx] - 1.0;
}
}
@@ -682,13 +680,13 @@ void msa_mg_solve(CCTK_ARGUMENTS)
for (int j = 0; j < cp->solver->fd_stencil; j++) {
for (ptrdiff_t i = -j; i < (ptrdiff_t)cp->solver->domain_size + j; i++) {
- const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, i + cp->offset_left[0], cp->y_idx, cctkGH->cctk_lsh[2] - cp->offset_right[1] + j);
+ const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, i + cp->offset_left[0], cp->y_idx, cp->offset_left[1] + cp->solver->domain_size - 1 + j);
lapse_mg[idx] = fact0 * lapse_prev0[idx] + fact1 * lapse_prev1[idx];
}
}
for (int j = 0; j < cp->solver->fd_stencil; j++) {
for (ptrdiff_t i = -j; i < (ptrdiff_t)cp->solver->domain_size + j; i++) {
- const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, cctkGH->cctk_lsh[0] - cp->offset_right[0] + j, cp->y_idx, cp->offset_left[1] + i);
+ const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, cp->offset_left[0] + cp->solver->domain_size - 1 + j, cp->y_idx, cp->offset_left[1] + i);
lapse_mg[idx] = fact0 * lapse_prev0[idx] + fact1 * lapse_prev1[idx];
}
}
@@ -701,7 +699,7 @@ void msa_mg_solve(CCTK_ARGUMENTS)
MG2DBoundary *bnd = cp->solver->boundaries[MG2D_BOUNDARY_1U];
double *dst = bnd->val + j * bnd->val_stride;
for (ptrdiff_t i = -j; i < (ptrdiff_t)cp->solver->domain_size + j; i++) {
- const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, i + cp->offset_left[0], cp->y_idx, cctkGH->cctk_lsh[2] - cp->offset_right[1] + j);
+ const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, i + cp->offset_left[0], cp->y_idx, cp->offset_left[1] + cp->solver->domain_size - 1 + j);
dst[i] = lapse_mg[idx] - 1.0;
}
}
@@ -709,7 +707,7 @@ void msa_mg_solve(CCTK_ARGUMENTS)
MG2DBoundary *bnd = cp->solver->boundaries[MG2D_BOUNDARY_0U];
double *dst = bnd->val + j * bnd->val_stride;
for (ptrdiff_t i = -j; i < (ptrdiff_t)cp->solver->domain_size + j; i++) {
- const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, cctkGH->cctk_lsh[0] - cp->offset_right[0] + j, cp->y_idx, cp->offset_left[1] + i);
+ const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, cp->offset_left[1] + cp->solver->domain_size - 1 + j, cp->y_idx, cp->offset_left[1] + i);
dst[i] = lapse_mg[idx] - 1.0;
}
}
@@ -884,13 +882,13 @@ void maximal_slicing_axi_mg_modify_diss(CCTK_ARGUMENTS)
cp = get_coord_patch(ms, reflevel);
for (int idx_z = 0; idx_z < cp->grid_size[2]; idx_z++)
- for (int idx_x = cp->grid_size[0] - cp->offset_right[0] - (ms->fd_stencil + 1); idx_x < cp->grid_size[0]; idx_x++) {
+ for (int idx_x = cp->offset_left[0] + cp->solver->domain_size - (ms->fd_stencil + 1); idx_x < cp->grid_size[0]; idx_x++) {
const ptrdiff_t idx_dst = CPINDEX(cp, idx_x, cp->y_idx, idx_z);
epsdis[idx_dst] = 0.0;
}
for (int idx_x = 0; idx_x < cp->grid_size[0]; idx_x++)
- for (int idx_z = cp->grid_size[2] - cp->offset_right[1] - (ms->fd_stencil + 1); idx_z < cp->grid_size[2]; idx_z++) {
+ for (int idx_z = cp->offset_left[0] + cp->solver->domain_size - (ms->fd_stencil + 1); idx_z < cp->grid_size[2]; idx_z++) {
const ptrdiff_t idx_dst = CPINDEX(cp, idx_x, cp->y_idx, idx_z);
epsdis[idx_dst] = 0.0;
}