diff options
author | Anton Khirnov <anton@khirnov.net> | 2022-08-27 01:44:41 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2022-08-27 01:44:41 +0200 |
commit | c6ea5350097ad5ce2e6adc8e3e49e3d80779a9ad (patch) | |
tree | c10de7465f161673894487c8703d0d67844ea337 | |
parent | fe0d44a860cfe9baae52f96e9aadf08808ee9f16 (diff) |
Store level_size/extends in CoordPatch.
Will be useful in following commits.
-rw-r--r-- | src/qms.c | 19 |
1 files changed, 12 insertions, 7 deletions
@@ -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; |