| tMerge branch 'master' of github.com:anders-dc/lbm-d3q19 - lbm-d3q19 - 3D latti… | |
| git clone git://src.adamsgaard.dk/lbm-d3q19 | |
| Log | |
| Files | |
| Refs | |
| LICENSE | |
| --- | |
| commit bbd7958b3e9bca800e6af752613d2d2afe2e45e2 | |
| parent 7686c38cd9015de88f6cf34e01451cfe5884d341 | |
| Author: Anders Damsgaard <[email protected]> | |
| Date: Sat, 7 Sep 2019 06:51:40 +0200 | |
| Merge branch 'master' of github.com:anders-dc/lbm-d3q19 | |
| Diffstat: | |
| M Makefile | 2 +- | |
| M lbm.c | 57 ++++++++++++++++-------------… | |
| 2 files changed, 31 insertions(+), 28 deletions(-) | |
| --- | |
| diff --git a/Makefile b/Makefile | |
| t@@ -1,4 +1,4 @@ | |
| -CFLAGS=-g -Wall -pg -O2 -fopenmp | |
| +CFLAGS=-Wall -O2 -fopenmp -march=native -funroll-loops #-g -pg | |
| LDLIBS=-lm | |
| BIN=lbm | |
| diff --git a/lbm.c b/lbm.c | |
| t@@ -85,19 +85,19 @@ Float tau(void) { | |
| // Get i-th value from cell x,y,z | |
| unsigned int idx( | |
| - unsigned int x, | |
| - unsigned int y, | |
| - unsigned int z) | |
| + const unsigned int x, | |
| + const unsigned int y, | |
| + const unsigned int z) | |
| { | |
| return x + nx*y + nx*ny*z; | |
| } | |
| // Get i-th value from cell x,y,z | |
| unsigned int idxi( | |
| - unsigned int x, | |
| - unsigned int y, | |
| - unsigned int z, | |
| - unsigned int i) | |
| + const unsigned int x, | |
| + const unsigned int y, | |
| + const unsigned int z, | |
| + const unsigned int i) | |
| { | |
| return x + ((y + z*ny)*nx) + (nx*ny*nz*i); | |
| } | |
| t@@ -222,10 +222,10 @@ Float bgk( | |
| // Cell fluid density | |
| Float find_rho( | |
| - Float* f, | |
| - unsigned int x, | |
| - unsigned int y, | |
| - unsigned int z) | |
| + const Float* f, | |
| + const unsigned int x, | |
| + const unsigned int y, | |
| + const unsigned int z) | |
| { | |
| int i; | |
| Float rho = 0.0; | |
| t@@ -236,17 +236,16 @@ Float find_rho( | |
| // Cell fluid velocity | |
| Float3 find_u( | |
| - Float* f, | |
| - Float rho, | |
| - Float3* e, | |
| - unsigned int x, | |
| - unsigned int y, | |
| - unsigned int z) | |
| + const Float* f, | |
| + const Float rho, | |
| + const Float3* e, | |
| + const unsigned int x, | |
| + const unsigned int y, | |
| + const unsigned int z) | |
| { | |
| Float3 u = {0.0, 0.0, 0.0}; | |
| Float f_i; | |
| unsigned int i; | |
| -//#pragma omp parallel for private(f_i,u) | |
| for (i=0; i<m; i++) { | |
| f_i = f[idxi(x,y,z,i)]; | |
| u.x += f_i*e[i].x/rho; | |
| t@@ -270,19 +269,23 @@ Float3 find_u( | |
| // Lattice-Boltzmann collision step. | |
| // Fluid distributions are modified towards the cell equilibrium. | |
| -// Values are read from f, and written to rho and u. | |
| +// Values are read from f, and written to f, rho, and u. | |
| void collide( | |
| Float* f, | |
| Float* rho, | |
| Float3* u, | |
| - Float3* e) | |
| + const Float3* e) | |
| { | |
| unsigned int x, y, z, i; | |
| Float rho_new; | |
| Float3 u_new; | |
| - // Parallelize this with OpenMP | |
| // For each cell | |
| +/*#pragma omp parallel for default(none) \ | |
| + private(x, y, z, rho_new, u_new, i) \ | |
| + firstprivate(e) \ | |
| + shared(f, rho, u) \ | |
| + schedule(dynamic)*/ | |
| for (z=0; z<nz; z++) { | |
| for (y=0; y<ny; y++) { | |
| for (x=0; x<nx; x++) { | |
| t@@ -292,15 +295,15 @@ void collide( | |
| u_new = find_u(f, rho_new, e, x, y, z); | |
| // Store macroscopic parameters | |
| - rho[idx(x,y,z)] = rho_new; | |
| - u[idx(x,y,z)] = u_new; | |
| + int idx_ = idx(x,y,z); | |
| + rho[idx_] = rho_new; | |
| + u[idx_] = u_new; | |
| // Find new f values by fluid particle collision | |
| -//#pragma omp parallel for | |
| for (i=0; i<m; i++) { | |
| - f[idxi(x,y,z,i)] = | |
| - bgk(f[idxi(x,y,z,i)], tau(), rho_new, | |
| - w(i), e[i], u_new); | |
| + int idxi_ = idxi(x,y,z,i); | |
| + f[idxi_] = bgk(f[idxi_], tau(), rho_new, | |
| + w(i), e[i], u_new); | |
| } | |
| } | |
| } |