diff --git a/src/main/c/includes/electrosphere_FluidSim.h b/src/main/c/includes/electrosphere_FluidSim.h index d874ff3..27f06f2 100644 --- a/src/main/c/includes/electrosphere_FluidSim.h +++ b/src/main/c/includes/electrosphere_FluidSim.h @@ -14,7 +14,7 @@ extern "C" { #undef electrosphere_FluidSim_VISCOSITY_CONSTANT #define electrosphere_FluidSim_VISCOSITY_CONSTANT 1.0E-5f #undef electrosphere_FluidSim_LINEARSOLVERTIMES -#define electrosphere_FluidSim_LINEARSOLVERTIMES 20L +#define electrosphere_FluidSim_LINEARSOLVERTIMES 10L #undef electrosphere_FluidSim_GRAVITY #define electrosphere_FluidSim_GRAVITY -1000.0f /* diff --git a/src/main/c/velocitystep.c b/src/main/c/velocitystep.c index e6aa3a5..6b46d20 100644 --- a/src/main/c/velocitystep.c +++ b/src/main/c/velocitystep.c @@ -45,9 +45,6 @@ void add_source(int N, float * x, float * s, float dt){ int i; int size=N*N*N; for(i=0; i 0){ - printf("%f\n",s[i]); - } x[i] += dt*s[i]; } } @@ -240,9 +237,6 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_setupProjection _mm256_storeu_ps(&p[IX(i,j,k)],zeroVec); } } - - // set_bnd(env, chunk_mask, N, BOUND_NO_DIR, div); - // set_bnd(env, chunk_mask, N, BOUND_NO_DIR, p); } /* @@ -295,8 +289,6 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveProjection } } } - // set_bnd(env, chunk_mask, SET_BOUND_USE_NEIGHBOR, N, b, d, jrd); - // set_bnd(env, chunk_mask, N, BOUND_NO_DIR, x); } /* @@ -384,10 +376,6 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_finalizeProjection _mm256_storeu_ps(&w[IX(9,j,k)],vector); } } - - // set_bnd_old(env, chunk_mask, N, 1, u); - // set_bnd_old(env, chunk_mask, N, 2, v); - // set_bnd_old(env, chunk_mask, N, 3, w); } /* @@ -532,7 +520,6 @@ void advect(JNIEnv * env, uint32_t chunk_mask, int N, int b, jobjectArray jrd, f } } } - // set_bnd(env, chunk_mask, SET_BOUND_USE_NEIGHBOR, N, b, d, jrd); } JNIEXPORT void JNICALL Java_electrosphere_FluidSim_setBoundsToNeighbors @@ -582,44 +569,3 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_setBoundsToNeighbors target[IX(DIM-1,0,DIM-1)] = (float)((target[IX(DIM-1,0,DIM-2)]+target[IX(DIM-2,0,DIM-1)]+target[IX(DIM-1,1,DIM-1)])/3.0); target[IX(DIM-1,DIM-1,DIM-1)] = (float)((target[IX(DIM-1,DIM-1,DIM-2)]+target[IX(DIM-1,DIM-2,DIM-1)]+target[IX(DIM-1,DIM-1,DIM-2)])/3.0); } - -void set_bnd(JNIEnv * env, uint32_t chunk_mask, int ignore_neighbor, int N, int b, float * target, jobjectArray neighborMap){ - int DIM = N; - for(int x=1; x < DIM-1; x++){ - for(int y = 1; y < DIM-1; y++){ - //((x)+(DIM)*(y) + (DIM)*(DIM)*(z)) - target[0 + DIM * x + DIM * DIM * y] = b==1 ? -target[1 + DIM * x + DIM * DIM * y] : target[1 + DIM * x + DIM * DIM * y]; - target[IX(DIM-1,x,y)] = b==1 ? -target[IX(DIM-2,x,y)] : target[IX(DIM-2,x,y)]; - target[IX(x,0,y)] = b==2 ? -target[IX(x,1,y)] : target[IX(x,1,y)]; - target[IX(x,DIM-1,y)] = b==2 ? -target[IX(x,DIM-2,y)] : target[IX(x,DIM-2,y)]; - target[IX(x,y,0)] = b==3 ? -target[IX(x,y,1)] : target[IX(x,y,1)]; - target[IX(x,y,DIM-1)] = b==3 ? -target[IX(x,y,DIM-2)] : target[IX(x,y,DIM-2)]; - } - } - for(int x = 1; x < DIM-1; x++){ - target[IX(x,0,0)] = (float)(0.5f * (target[IX(x,1,0)] + target[IX(x,0,1)])); - target[IX(x,DIM-1,0)] = (float)(0.5f * (target[IX(x,DIM-2,0)] + target[IX(x,DIM-1,1)])); - target[IX(x,0,DIM-1)] = (float)(0.5f * (target[IX(x,1,DIM-1)] + target[IX(x,0,DIM-2)])); - target[IX(x,DIM-1,DIM-1)] = (float)(0.5f * (target[IX(x,DIM-2,DIM-1)] + target[IX(x,DIM-1,DIM-2)])); - - target[IX(0,x,0)] = (float)(0.5f * (target[IX(1,x,0)] + target[IX(0,x,1)])); - target[IX(DIM-1,x,0)] = (float)(0.5f * (target[IX(DIM-2,x,0)] + target[IX(DIM-1,x,1)])); - target[IX(0,x,DIM-1)] = (float)(0.5f * (target[IX(1,x,DIM-1)] + target[IX(0,x,DIM-2)])); - target[IX(DIM-1,x,DIM-1)] = (float)(0.5f * (target[IX(DIM-2,x,DIM-1)] + target[IX(DIM-1,x,DIM-2)])); - - - target[IX(0,0,x)] = (float)(0.5f * (target[IX(1,0,x)] + target[IX(0,1,x)])); - target[IX(DIM-1,0,x)] = (float)(0.5f * (target[IX(DIM-2,0,x)] + target[IX(DIM-1,1,x)])); - target[IX(0,DIM-1,x)] = (float)(0.5f * (target[IX(1,DIM-1,x)] + target[IX(0,DIM-2,x)])); - target[IX(DIM-1,DIM-1,x)] = (float)(0.5f * (target[IX(DIM-2,DIM-1,x)] + target[IX(DIM-1,DIM-2,x)])); - - } - target[IX(0,0,0)] = (float)((target[IX(1,0,0)]+target[IX(0,1,0)]+target[IX(0,0,1)])/3.0); - target[IX(DIM-1,0,0)] = (float)((target[IX(DIM-2,0,0)]+target[IX(DIM-1,1,0)]+target[IX(DIM-1,0,1)])/3.0); - target[IX(0,DIM-1,0)] = (float)((target[IX(1,DIM-1,0)]+target[IX(0,DIM-2,0)]+target[IX(0,DIM-1,1)])/3.0); - target[IX(0,0,DIM-1)] = (float)((target[IX(0,0,DIM-2)]+target[IX(1,0,DIM-1)]+target[IX(0,1,DIM-1)])/3.0); - target[IX(DIM-1,DIM-1,0)] = (float)((target[IX(DIM-2,DIM-1,0)]+target[IX(DIM-1,DIM-2,0)]+target[IX(DIM-1,DIM-1,1)])/3.0); - target[IX(0,DIM-1,DIM-1)] = (float)((target[IX(1,DIM-1,DIM-1)]+target[IX(0,DIM-2,DIM-1)]+target[IX(0,DIM-1,DIM-2)])/3.0); - target[IX(DIM-1,0,DIM-1)] = (float)((target[IX(DIM-1,0,DIM-2)]+target[IX(DIM-2,0,DIM-1)]+target[IX(DIM-1,1,DIM-1)])/3.0); - target[IX(DIM-1,DIM-1,DIM-1)] = (float)((target[IX(DIM-1,DIM-1,DIM-2)]+target[IX(DIM-1,DIM-2,DIM-1)]+target[IX(DIM-1,DIM-1,DIM-2)])/3.0); -} \ No newline at end of file diff --git a/src/main/java/electrosphere/FluidSim.java b/src/main/java/electrosphere/FluidSim.java index 761b3fc..ebd47e0 100644 --- a/src/main/java/electrosphere/FluidSim.java +++ b/src/main/java/electrosphere/FluidSim.java @@ -75,7 +75,7 @@ public class FluidSim { static final float DIFFUSION_CONSTANT = 0.00001f; static final float VISCOSITY_CONSTANT = 0.00001f; - static final int LINEARSOLVERTIMES = 20; + static final int LINEARSOLVERTIMES = 10; static final float GRAVITY = -1000f; @@ -113,7 +113,10 @@ public class FluidSim { if( Math.abs(8 - i) < 4 && Math.abs(j) < 4 && - Math.abs(16 - k) < 4 + Math.abs(16 - k) < 4 && + i < 17 && i > 0 && + j < 17 && j > 0 && + k < 17 && k > 0 ){ xf.put(1); uf.put(18);