From d7ed9e22086510e900e167394305a809cf35bc02 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 17 Mar 2019 13:25:21 +0100 Subject: Eliminate offset_right. It is ill-defined and confusing. --- src/maximal_slicing_axi_mg.c | 34 ++++++++++++++++------------------ 1 file 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; } -- cgit v1.2.3