From f593a6c4f69aa11986b2a3836d90f013c25b8cc4 Mon Sep 17 00:00:00 2001 From: Xin Li <lixin.reco@gmail.com> Date: Mon, 23 Aug 2021 17:33:03 +0200 Subject: [PATCH] updated advanced_lab --- advanced_lab/c/Makefile | 16 +++++++--------- advanced_lab/c/shwater2d.c | 36 ++++++++++++++++++------------------ advanced_lab/f90/Makefile | 19 +++++++------------ 3 files changed, 32 insertions(+), 39 deletions(-) diff --git a/advanced_lab/c/Makefile b/advanced_lab/c/Makefile index e0e17db..f7d4303 100644 --- a/advanced_lab/c/Makefile +++ b/advanced_lab/c/Makefile @@ -1,13 +1,11 @@ -CC = cc -ifeq ($(CRAY_PRGENVCRAY), loaded) -CFLAGS = -O2 -openmp -else ifeq ($(CRAY_PRGENVINTEL), loaded) -CFLAGS = -O2 -openmp -D_Float128=__float128 -else ifeq ($(CRAY_PRGENVGNU), loaded) +# for GNU compiler +CC = gcc CFLAGS = -O2 -fopenmp -else -CFLAGS = -O2 -endif + +# for Intel compiler +#CC = icc +#CFLAGS = -O2 -qopenmp + SRC = vtk_export.c shwater2d.c OBJS = ${SRC:.c=.o} DEST = shwater2d diff --git a/advanced_lab/c/shwater2d.c b/advanced_lab/c/shwater2d.c index 94748ee..902c357 100644 --- a/advanced_lab/c/shwater2d.c +++ b/advanced_lab/c/shwater2d.c @@ -30,10 +30,10 @@ void validate(double *Q, int m, int n) { for (i = 0; i < n; i++) for (j = 0; j < m; j++) for (k = 0; k < cell_size; k++) - if (!isfinite(Q(k, j, i))) { - fprintf(stderr, "Invalid solution\n"); - exit(-1); - } + if (!isfinite(Q(k, j, i))) { + fprintf(stderr, "Invalid solution\n"); + exit(-1); + } } /* Flux function in the x-direction */ @@ -69,7 +69,7 @@ void fy(double *Q, double **fq, int m, int n, int i) { Try to parallelize it in an efficient way! */ void laxf_scheme_2d(double *Q, double **ffx, double **ffy, double **nFx, double **nFy, - int m, int n, double dx, double dy, double dt) { + int m, int n, double dx, double dy, double dt) { int i, j, k; /* Calculate and update fluxes in the x-direction */ @@ -77,11 +77,11 @@ void laxf_scheme_2d(double *Q, double **ffx, double **ffy, double **nFx, double fx(Q, ffx, m, n, i); for (j = 1; j < m; j++) for (k = 0; k < cell_size; k++) - nFx[k][j] = 0.5 * ((ffx[k][j-1] + ffx[k][j]) - - dx/dt * (Q(k, j, i) - Q(k, j-1, i))); + nFx[k][j] = 0.5 * ((ffx[k][j-1] + ffx[k][j]) - + dx/dt * (Q(k, j, i) - Q(k, j-1, i))); for (j = 1; j < m-1; j++) for (k = 0; k < cell_size; k++) - Q(k, j, i) = Q(k, j, i) - dt/dx * ((nFx[k][j+1] - nFx[k][j])); + Q(k, j, i) = Q(k, j, i) - dt/dx * ((nFx[k][j+1] - nFx[k][j])); } @@ -90,11 +90,11 @@ void laxf_scheme_2d(double *Q, double **ffx, double **ffy, double **nFx, double fy(Q, ffy, m, n, i); for (j = 1; j < n; j++) for (k = 0; k < cell_size; k++) - nFy[k][j] = 0.5 * ((ffy[k][j-1] + ffy[k][j]) - - dy/dt * (Q(k, i, j) - Q(k, i, j -1))); + nFy[k][j] = 0.5 * ((ffy[k][j-1] + ffy[k][j]) - + dy/dt * (Q(k, i, j) - Q(k, i, j -1))); for (j = 1; j < n-1; j++) for (k = 0; k < cell_size; k++) - Q(k,i,j) = Q(k,i,j) - dt/dy * ((nFy[k][j+1] - nFy[k][j])); + Q(k,i,j) = Q(k,i,j) - dt/dy * ((nFy[k][j+1] - nFy[k][j])); } } @@ -104,7 +104,7 @@ void laxf_scheme_2d(double *Q, double **ffx, double **ffy, double **nFx, double But don't forget the subroutine laxf_scheme_2d */ void solver(double *Q, double **ffx, double **ffy, double **nFx, double **nFy, - int m, int n, double tend, double dx, double dy, double dt) { + int m, int n, double tend, double dx, double dy, double dt) { double bc_mask[3] = {1.0, -1.0, -1.0}; double time; int i, j, k, steps; @@ -115,15 +115,15 @@ void solver(double *Q, double **ffx, double **ffy, double **nFx, double **nFy, /* Apply boundary condition */ for (j = 1; j < n - 1 ; j++) { for (k = 0; k < cell_size; k++) { - Q(k, 0, j) = bc_mask[k] * Q(k, 1, j); - Q(k, m-1, j) = bc_mask[k] * Q(k, m-2, j); + Q(k, 0, j) = bc_mask[k] * Q(k, 1, j); + Q(k, m-1, j) = bc_mask[k] * Q(k, m-2, j); } } for (j = 0; j < m; j++) { for (k = 0; k < cell_size; k++) { - Q(k, j, 0) = bc_mask[k] * Q(k, j, 1); - Q(k, j, n-1) = bc_mask[k] * Q(k, j, n-2); + Q(k, j, 0) = bc_mask[k] * Q(k, j, 1); + Q(k, j, n-1) = bc_mask[k] * Q(k, j, n-2); } } @@ -178,7 +178,7 @@ int main(int argc, char **argv) { Q = (double *) malloc(m * n * cell_size * sizeof(double)); x = (double *) malloc(m * sizeof(double)); - y = (double *) malloc(n * sizeof(double)); + y = (double *) malloc(n * sizeof(double)); /* Allocate memory for fluxes */ ffx = (double **) malloc(cell_size * sizeof(double *)); @@ -216,7 +216,7 @@ int main(int argc, char **argv) { for (i = 1; i < m-1; i++) { for (j = 1; j < n-1; j++) { Q(0, i, j) = 4.0 + epsi * exp(-(pow(x[i] - xend / 4.0, 2) + pow(y[j] - yend / 4.0, 2)) / - (pow(delta, 2))); + (pow(delta, 2))); } } diff --git a/advanced_lab/f90/Makefile b/advanced_lab/f90/Makefile index f902430..16c5b00 100644 --- a/advanced_lab/f90/Makefile +++ b/advanced_lab/f90/Makefile @@ -1,16 +1,11 @@ -FC = ftn -ifeq ($(CRAY_PRGENVCRAY), loaded) -FFLAGS = -O2 -openmp -else ifeq ($(CRAY_PRGENVINTEL), loaded) -FFLAGS = -O2 -openmp -else ifeq ($(CRAY_PRGENVGNU), loaded) -ifeq ($(shell expr $(GCC_VERSION) '<' 5.0), 1) -$(error Unsupported GCC version, use at least v5.x (module swap gcc gcc/5.1.0)) -endif +# for GNU compiler +FC = gfortran FFLAGS = -O2 -fopenmp -else -FFLAGS = -O2 -endif + +# for Intel compiler +#FC = ifort +#FFLAGS = -O2 -fopenmp + SRC = vtk_export.f90 shwater2d.f90 OBJS = ${SRC:.f90=.o} DEST = shwater2d -- GitLab