From 29bfa17b477adf7cd7adff3763900d555e745dd1 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Fri, 19 Apr 2019 20:28:05 +0200 Subject: Make sure the initial guess conforms to the boundary condition. --- src/maximal_slicing_axi_mg.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/maximal_slicing_axi_mg.c b/src/maximal_slicing_axi_mg.c index 2020079..833fbbf 100644 --- a/src/maximal_slicing_axi_mg.c +++ b/src/maximal_slicing_axi_mg.c @@ -666,6 +666,10 @@ void msa_mg_eval(CCTK_ARGUMENTS) const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, i + cp->offset_left[0], cp->y_idx, cp->offset_left[1] + solver->domain_size - 1 + j); dst[i] = lapse_mg_eval[idx] - 1.0; } + if (j == 0) { + dst = solver->u + solver->u_stride * (solver->domain_size - 1); + memcpy(dst, bnd->val, sizeof(*dst) * solver->domain_size); + } } for (int j = 0; j < solver->fd_stencil; j++) { MG2DBoundary *bnd = solver->boundaries[MG2D_BOUNDARY_0U]; @@ -674,6 +678,11 @@ void msa_mg_eval(CCTK_ARGUMENTS) const ptrdiff_t idx = CCTK_GFINDEX3D(cctkGH, cp->offset_left[0] + solver->domain_size - 1 + j, cp->y_idx, cp->offset_left[1] + i); dst[i] = lapse_mg_eval[idx] - 1.0; } + if (j == 0) { + dst = solver->u + solver->domain_size - 1; + for (ptrdiff_t i = 0; i < solver->domain_size; i++) + dst[i * solver->u_stride] = bnd->val[i]; + } } ms->time_fine_boundaries += gettime() - start; -- cgit v1.2.3