forked from moebiusband/NuSiF-Solver
		
	Move array extraction to comm module
This commit is contained in:
		@@ -312,11 +312,11 @@ void commCollectResult(Comm* c,
 | 
				
			|||||||
    int jmax,
 | 
					    int jmax,
 | 
				
			||||||
    int imax)
 | 
					    int imax)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if defined(_MPI)
 | 
					 | 
				
			||||||
    int imaxLocal = c->imaxLocal;
 | 
					    int imaxLocal = c->imaxLocal;
 | 
				
			||||||
    int jmaxLocal = c->jmaxLocal;
 | 
					    int jmaxLocal = c->jmaxLocal;
 | 
				
			||||||
    int kmaxLocal = c->kmaxLocal;
 | 
					    int kmaxLocal = c->kmaxLocal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(_MPI)
 | 
				
			||||||
    int offset[c->size * NDIMS];
 | 
					    int offset[c->size * NDIMS];
 | 
				
			||||||
    int imaxLocalAll[c->size];
 | 
					    int imaxLocalAll[c->size];
 | 
				
			||||||
    int jmaxLocalAll[c->size];
 | 
					    int jmaxLocalAll[c->size];
 | 
				
			||||||
@@ -439,6 +439,46 @@ void commCollectResult(Comm* c,
 | 
				
			|||||||
        imax);
 | 
					        imax);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    free(tmp);
 | 
					    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
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,56 +18,6 @@
 | 
				
			|||||||
#include "timing.h"
 | 
					#include "timing.h"
 | 
				
			||||||
#include "vtkWriter.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)
 | 
					int main(int argc, char** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    double timeStart, timeStop;
 | 
					    double timeStart, timeStop;
 | 
				
			||||||
@@ -134,7 +84,6 @@ int main(int argc, char** argv)
 | 
				
			|||||||
        wg = allocate(64, bytesize);
 | 
					        wg = allocate(64, bytesize);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef _MPI
 | 
					 | 
				
			||||||
    commCollectResult(&s.comm,
 | 
					    commCollectResult(&s.comm,
 | 
				
			||||||
        ug,
 | 
					        ug,
 | 
				
			||||||
        vg,
 | 
					        vg,
 | 
				
			||||||
@@ -147,9 +96,6 @@ int main(int argc, char** argv)
 | 
				
			|||||||
        s.grid.kmax,
 | 
					        s.grid.kmax,
 | 
				
			||||||
        s.grid.jmax,
 | 
					        s.grid.jmax,
 | 
				
			||||||
        s.grid.imax);
 | 
					        s.grid.imax);
 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
    createBulkArrays(&s, pg, ug, vg, wg);
 | 
					 | 
				
			||||||
#endif /* ifdef _MPI */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (commIsMaster(&s.comm)) {
 | 
					    if (commIsMaster(&s.comm)) {
 | 
				
			||||||
        VtkOptions opts = { .grid = s.grid };
 | 
					        VtkOptions opts = { .grid = s.grid };
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user