From c6ea5350097ad5ce2e6adc8e3e49e3d80779a9ad Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 27 Aug 2022 01:44:41 +0200 Subject: Store level_size/extends in CoordPatch. Will be useful in following commits. --- src/qms.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/qms.c b/src/qms.c index 576fcbf..eb38f36 100644 --- a/src/qms.c +++ b/src/qms.c @@ -50,6 +50,11 @@ typedef struct CoordPatch { ptrdiff_t offset_left[2]; int bnd_intercomp[2][2]; + int level_size[2]; + + size_t *extents; + int nb_extents; + double *interp_tmp0; double *interp_tmp1; @@ -255,8 +260,6 @@ static int alloc_coord_patch(QMSMGContext *ms, int level) size_t *extents; size_t component_start[2], component_size[2]; - int level_size[2]; - int *solver_ranks; int nb_solver_ranks; @@ -286,18 +289,20 @@ static int alloc_coord_patch(QMSMGContext *ms, int level) if (i == gh->cctk_lsh[1]) CCTK_WARN(0, "The grid does not include y==0"); - get_extents(&extents, level_size, gh); + get_extents(&extents, cp->level_size, gh); component_start[0] = extents[4 * local_proc + 0 + 0]; component_start[1] = extents[4 * local_proc + 0 + 1]; component_size[0] = extents[4 * local_proc + 2 + 0]; component_size[1] = extents[4 * local_proc + 2 + 1]; for (int dir = 0; dir < 2; dir++) { cp->bnd_intercomp[dir][0] = component_start[dir] > 0; - cp->bnd_intercomp[dir][1] = (component_start[dir] + component_size[dir]) < level_size[dir]; + cp->bnd_intercomp[dir][1] = (component_start[dir] + component_size[dir]) < cp->level_size[dir]; cp->offset_left[dir] = gh->cctk_nghostzones[2 * dir]; } - if (level_size[0] != level_size[1]) + cp->extents = extents; + + if (cp->level_size[0] != cp->level_size[1]) CCTK_WARN(0, "Non-square domain"); solver_ranks = calloc(nb_procs, sizeof(*solver_ranks)); @@ -323,7 +328,7 @@ static int alloc_coord_patch(QMSMGContext *ms, int level) offset_right -= ms->boundary_offset; } - end = MIN(end, level_size[dir] - offset_right); + end = MIN(end, cp->level_size[dir] - offset_right); if (end > start) { cp->solver_start[proc][dir] = start; @@ -409,7 +414,6 @@ static int alloc_coord_patch(QMSMGContext *ms, int level) finish: free(solver_ranks); - free(extents); ms->nb_patches++; return 0; @@ -429,6 +433,7 @@ static void coord_patch_free(CoordPatch **pcp) free(cp->interp_tmp0); free(cp->interp_tmp1); + free(cp->extents); free(cp); *pcp = NULL; -- cgit v1.2.3