From d53da89b9589a53ed31fa17b1477e56f8a612736 Mon Sep 17 00:00:00 2001 From: Jan Eitzinger Date: Wed, 10 Jan 2024 09:42:03 +0100 Subject: [PATCH] Move array extraction to comm module --- BasicSolver/3D-mpi/src/comm.c | 42 ++++++++++++++++++++++++++- BasicSolver/3D-mpi/src/main.c | 54 ----------------------------------- 2 files changed, 41 insertions(+), 55 deletions(-) diff --git a/BasicSolver/3D-mpi/src/comm.c b/BasicSolver/3D-mpi/src/comm.c index b9ad171..fb8f519 100644 --- a/BasicSolver/3D-mpi/src/comm.c +++ b/BasicSolver/3D-mpi/src/comm.c @@ -312,11 +312,11 @@ void commCollectResult(Comm* c, int jmax, int imax) { -#if defined(_MPI) int imaxLocal = c->imaxLocal; int jmaxLocal = c->jmaxLocal; int kmaxLocal = c->kmaxLocal; +#if defined(_MPI) int offset[c->size * NDIMS]; int imaxLocalAll[c->size]; int jmaxLocalAll[c->size]; @@ -439,6 +439,46 @@ void commCollectResult(Comm* c, imax); free(tmp); +#else + int idx = 0; + + for (int k = 1; k < kmaxLocal + 1; k++) { + for (int j = 1; j < jmaxLocal + 1; j++) { + for (int i = 1; i < imaxLocal + 1; i++) { + pg[idx++] = G(s->p, i, j, k); + } + } + } + + idx = 0; + + for (int k = 1; k < kmaxLocal + 1; k++) { + for (int j = 1; j < jmaxLocal + 1; j++) { + for (int i = 1; i < imaxLocal + 1; i++) { + ug[idx++] = (G(s->u, i, j, k) + G(s->u, i - 1, j, k)) / 2.0; + } + } + } + + idx = 0; + + for (int k = 1; k < kmaxLocal + 1; k++) { + for (int j = 1; j < jmaxLocal + 1; j++) { + for (int i = 1; i < imaxLocal + 1; i++) { + vg[idx++] = (G(s->v, i, j, k) + G(s->v, i, j - 1, k)) / 2.0; + } + } + } + + idx = 0; + + for (int k = 1; k < kmaxLocal + 1; k++) { + for (int j = 1; j < jmaxLocal + 1; j++) { + for (int i = 1; i < imaxLocal + 1; i++) { + wg[idx++] = (G(s->w, i, j, k) + G(s->w, i, j, k - 1)) / 2.0; + } + } + } #endif } diff --git a/BasicSolver/3D-mpi/src/main.c b/BasicSolver/3D-mpi/src/main.c index 73d5feb..cad1f8e 100644 --- a/BasicSolver/3D-mpi/src/main.c +++ b/BasicSolver/3D-mpi/src/main.c @@ -18,56 +18,6 @@ #include "timing.h" #include "vtkWriter.h" -#ifndef _MPI -#define G(v, i, j, k) v[(k) * (imax + 2) * (jmax + 2) + (j) * (imax + 2) + (i)] - -static void createBulkArrays(Solver* s, double* pg, double* ug, double* vg, double* wg) -{ - int imax = s->grid.imax; - int jmax = s->grid.jmax; - int kmax = s->grid.kmax; - int idx = 0; - - for (int k = 1; k < kmax + 1; k++) { - for (int j = 1; j < jmax + 1; j++) { - for (int i = 1; i < imax + 1; i++) { - pg[idx++] = G(s->p, i, j, k); - } - } - } - - idx = 0; - - for (int k = 1; k < kmax + 1; k++) { - for (int j = 1; j < jmax + 1; j++) { - for (int i = 1; i < imax + 1; i++) { - ug[idx++] = (G(s->u, i, j, k) + G(s->u, i - 1, j, k)) / 2.0; - } - } - } - - idx = 0; - - for (int k = 1; k < kmax + 1; k++) { - for (int j = 1; j < jmax + 1; j++) { - for (int i = 1; i < imax + 1; i++) { - vg[idx++] = (G(s->v, i, j, k) + G(s->v, i, j - 1, k)) / 2.0; - } - } - } - - idx = 0; - - for (int k = 1; k < kmax + 1; k++) { - for (int j = 1; j < jmax + 1; j++) { - for (int i = 1; i < imax + 1; i++) { - wg[idx++] = (G(s->w, i, j, k) + G(s->w, i, j, k - 1)) / 2.0; - } - } - } -} -#endif /* ifndef _MPI */ - int main(int argc, char** argv) { double timeStart, timeStop; @@ -134,7 +84,6 @@ int main(int argc, char** argv) wg = allocate(64, bytesize); } -#ifdef _MPI commCollectResult(&s.comm, ug, vg, @@ -147,9 +96,6 @@ int main(int argc, char** argv) s.grid.kmax, s.grid.jmax, s.grid.imax); -#else - createBulkArrays(&s, pg, ug, vg, wg); -#endif /* ifdef _MPI */ if (commIsMaster(&s.comm)) { VtkOptions opts = { .grid = s.grid };