From 5f565c457dbcb93cfcb33e89c3958502c8ca74d2 Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 11 Dec 2024 11:49:17 -0500 Subject: [PATCH] swap diffuse to use generic solver func --- src/main/c/src/fluid/sim/grid2/density.c | 29 +-------- src/main/c/src/fluid/sim/grid2/velocity.c | 75 +---------------------- 2 files changed, 5 insertions(+), 99 deletions(-) diff --git a/src/main/c/src/fluid/sim/grid2/density.c b/src/main/c/src/fluid/sim/grid2/density.c index 699cb793..17ef8f63 100644 --- a/src/main/c/src/fluid/sim/grid2/density.c +++ b/src/main/c/src/fluid/sim/grid2/density.c @@ -9,6 +9,7 @@ #include "fluid/sim/grid2/solver_consts.h" #include "fluid/sim/grid2/utilities.h" #include "math/ode/multigrid.h" +#include "math/ode/gauss_seidel.h" /** @@ -49,35 +50,9 @@ LIBRARY_API void fluid_grid2_solveDiffuseDensity( float * x = GET_ARR_RAW(d,CENTER_LOC); float * x0 = GET_ARR_RAW(d0,CENTER_LOC); - __m256 aScalar = _mm256_set1_ps(a); - __m256 cScalar = _mm256_set1_ps(c); - for(int l = 0; l < FLUID_GRID2_LINEARSOLVERTIMES; l++){ //iterate - for(k=1; kDIM-1){ - for(i=i-8; i < DIM-1; i++){ - x[IX(i,j,k)] = (x0[IX(i,j,k)] + a*(x[IX(i-1,j,k)]+x[IX(i+1,j,k)]+x[IX(i,j-1,k)]+x[IX(i,j+1,k)]+x[IX(i,j,k-1)]+x[IX(i,j,k+1)]))/c; - } - } - } - } + solver_gauss_seidel_iterate_parallel(x,x0,a,c,DIM); //set bounds fluid_grid2_set_bounds(0,x); diff --git a/src/main/c/src/fluid/sim/grid2/velocity.c b/src/main/c/src/fluid/sim/grid2/velocity.c index 58c6807b..2f977e91 100644 --- a/src/main/c/src/fluid/sim/grid2/velocity.c +++ b/src/main/c/src/fluid/sim/grid2/velocity.c @@ -58,84 +58,15 @@ LIBRARY_API void fluid_grid2_solveVectorDiffuse ( float * v0 = GET_ARR_RAW(jrv0,CENTER_LOC); float * w0 = GET_ARR_RAW(jrw0,CENTER_LOC); - __m256 aScalar = _mm256_set1_ps(a); - __m256 cScalar = _mm256_set1_ps(c); - for(int l = 0; l < FLUID_GRID2_LINEARSOLVERTIMES; l++){ //transform u direction - for(k=1; kDIM-1){ - for(i=i-8; i < DIM-1; i++){ - u[IX(i,j,k)] = (u0[IX(i,j,k)] + a*(u[IX(i-1,j,k)]+u[IX(i+1,j,k)]+u[IX(i,j-1,k)]+u[IX(i,j+1,k)]+u[IX(i,j,k-1)]+u[IX(i,j,k+1)]))/c; - } - } - } - } + solver_gauss_seidel_iterate_parallel(u,u0,a,c,DIM); //transform v direction - for(k=1; kDIM-1){ - for(i=i-8; i < DIM-1; i++){ - v[IX(i,j,k)] = (v0[IX(i,j,k)] + a*(v[IX(i-1,j,k)]+v[IX(i+1,j,k)]+v[IX(i,j-1,k)]+v[IX(i,j+1,k)]+v[IX(i,j,k-1)]+v[IX(i,j,k+1)]))/c; - } - } - } - } + solver_gauss_seidel_iterate_parallel(v,v0,a,c,DIM); //transform w direction - for(k=1; kDIM-1){ - for(i=i-8; i < DIM-1; i++){ - w[IX(i,j,k)] = (w0[IX(i,j,k)] + a*(w[IX(i-1,j,k)]+w[IX(i+1,j,k)]+w[IX(i,j-1,k)]+w[IX(i,j+1,k)]+w[IX(i,j,k-1)]+w[IX(i,j,k+1)]))/c; - } - } - } - } + solver_gauss_seidel_iterate_parallel(w,w0,a,c,DIM); //set bounds fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_U,u);