summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2022-08-27 01:44:41 +0200
committerAnton Khirnov <anton@khirnov.net>2022-08-27 01:44:41 +0200
commitc6ea5350097ad5ce2e6adc8e3e49e3d80779a9ad (patch)
treec10de7465f161673894487c8703d0d67844ea337
parentfe0d44a860cfe9baae52f96e9aadf08808ee9f16 (diff)
Store level_size/extends in CoordPatch.
Will be useful in following commits.
-rw-r--r--src/qms.c19
1 files 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;