summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2019-03-17 13:26:49 +0100
committerAnton Khirnov <anton@khirnov.net>2019-03-17 13:26:49 +0100
commitc2551314a7064880d4f675d69114e6c8a7b34d60 (patch)
tree10f8f2506dba9cb02d8ee983d48bd17676874684
parentd7ed9e22086510e900e167394305a809cf35bc02 (diff)
Fix filling reflection-ghostzone boundary points
Reflection ghostzones are not filled on sync.
-rw-r--r--src/maximal_slicing_axi_mg.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/maximal_slicing_axi_mg.c b/src/maximal_slicing_axi_mg.c
index fed6ff5..3d082a3 100644
--- a/src/maximal_slicing_axi_mg.c
+++ b/src/maximal_slicing_axi_mg.c
@@ -17,6 +17,7 @@
#include "util_Table.h"
#define SQR(x) ((x) * (x))
+#define ABS(x) ((x >= 0) ? (x) : -(x))
#define ARRAY_ELEMS(x) (sizeof(x) / sizeof(*x))
#define CPINDEX(cp, i, j, k) ((k * cp->grid_size[1] + j) * cp->grid_size[0] + i)
@@ -692,14 +693,16 @@ void msa_mg_solve(CCTK_ARGUMENTS)
}
}
/* if the condition above was false, then lapse_mg should be filled by
- * prolongation from the coarser level */
+ * prolongation from the coarser level
+ * note that the reflection-boundary ghost points are not filled
+ */
/* fill the solver boundary conditions */
for (int j = 0; j < cp->solver->fd_stencil; j++) {
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, cp->offset_left[1] + cp->solver->domain_size - 1 + j);
+ const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, ABS(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;
}
}
@@ -707,7 +710,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, cp->offset_left[1] + cp->solver->domain_size - 1 + 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] + ABS(i));
dst[i] = lapse_mg[idx] - 1.0;
}
}