Compare commits
No commits in common. "79fa7715f09d0e9b76c996925eedd2dd8eca5ceb" and "18ac90affadbafad096732bdbcd32387c8e08b18" have entirely different histories.
79fa7715f0
...
18ac90affa
@ -42,9 +42,9 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveDiffuseDensity
|
|||||||
jint chunk_mask,
|
jint chunk_mask,
|
||||||
float ** d,
|
float ** d,
|
||||||
float ** d0,
|
float ** d0,
|
||||||
float ** jru,
|
jobjectArray jru,
|
||||||
float ** jrv,
|
jobjectArray jrv,
|
||||||
float ** jrw,
|
jobjectArray jrw,
|
||||||
jfloat DIFFUSION_CONST,
|
jfloat DIFFUSION_CONST,
|
||||||
jfloat VISCOSITY_CONST,
|
jfloat VISCOSITY_CONST,
|
||||||
jfloat dt){
|
jfloat dt){
|
||||||
@ -96,13 +96,13 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_advectDensity
|
|||||||
jint chunk_mask,
|
jint chunk_mask,
|
||||||
float ** d,
|
float ** d,
|
||||||
float ** d0,
|
float ** d0,
|
||||||
float ** jru,
|
jobjectArray jru,
|
||||||
float ** jrv,
|
jobjectArray jrv,
|
||||||
float ** jrw,
|
jobjectArray jrw,
|
||||||
jfloat DIFFUSION_CONST,
|
jfloat DIFFUSION_CONST,
|
||||||
jfloat VISCOSITY_CONST,
|
jfloat VISCOSITY_CONST,
|
||||||
jfloat dt){
|
jfloat dt){
|
||||||
advectDensity(env,chunk_mask,N,3,d,d0,GET_ARR_RAW(env,jru,CENTER_LOC),GET_ARR_RAW(env,jrv,CENTER_LOC),GET_ARR_RAW(env,jrw,CENTER_LOC),dt);
|
advectDensity(env,chunk_mask,N,3,d,d0,GET_ARR(env,jru,CENTER_LOC),GET_ARR(env,jrv,CENTER_LOC),GET_ARR(env,jrw,CENTER_LOC),dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void advectDensity(JNIEnv * env, uint32_t chunk_mask, int N, int b, float ** d, float ** d0, float * u, float * v, float * w, float dt){
|
void advectDensity(JNIEnv * env, uint32_t chunk_mask, int N, int b, float ** d, float ** d0, float * u, float * v, float * w, float dt){
|
||||||
|
|||||||
@ -285,7 +285,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u0 = currentChunk->ju0;
|
u0 = currentChunk->ju0;
|
||||||
v0 = currentChunk->jv0;
|
v0 = currentChunk->jv0;
|
||||||
w0 = currentChunk->jw0;
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_solveVectorDiffuse(env,chunkJRaw,DIM,chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
Java_electrosphere_FluidSim_solveVectorDiffuse(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
||||||
}
|
}
|
||||||
//update array for vectors
|
//update array for vectors
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
@ -348,7 +348,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u0 = currentChunk->ju0;
|
u0 = currentChunk->ju0;
|
||||||
v0 = currentChunk->jv0;
|
v0 = currentChunk->jv0;
|
||||||
w0 = currentChunk->jw0;
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_setupProjection(env,chunkJRaw,DIM,chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
Java_electrosphere_FluidSim_setupProjection(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
||||||
}
|
}
|
||||||
//update array for vectors
|
//update array for vectors
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
@ -386,7 +386,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u0 = currentChunk->ju0;
|
u0 = currentChunk->ju0;
|
||||||
v0 = currentChunk->jv0;
|
v0 = currentChunk->jv0;
|
||||||
w0 = currentChunk->jw0;
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_solveProjection(env,chunkJRaw,DIM,chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
Java_electrosphere_FluidSim_solveProjection(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
||||||
}
|
}
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
Chunk * currentChunk = chunks[i];
|
Chunk * currentChunk = chunks[i];
|
||||||
@ -400,8 +400,8 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u0 = currentChunk->ju0;
|
u0 = currentChunk->ju0;
|
||||||
v0 = currentChunk->jv0;
|
v0 = currentChunk->jv0;
|
||||||
w0 = currentChunk->jw0;
|
w0 = currentChunk->jw0;
|
||||||
setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,1,currentChunk->u0);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u0);
|
||||||
copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,1,currentChunk->u0);
|
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,1,u0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//samples u,v,w,u0
|
//samples u,v,w,u0
|
||||||
@ -419,7 +419,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u0 = currentChunk->ju0;
|
u0 = currentChunk->ju0;
|
||||||
v0 = currentChunk->jv0;
|
v0 = currentChunk->jv0;
|
||||||
w0 = currentChunk->jw0;
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_finalizeProjection(env,chunkJRaw,DIM,chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
Java_electrosphere_FluidSim_finalizeProjection(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
||||||
}
|
}
|
||||||
//set boundaries a final time for u,v,w
|
//set boundaries a final time for u,v,w
|
||||||
//...
|
//...
|
||||||
@ -435,12 +435,12 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u0 = currentChunk->ju0;
|
u0 = currentChunk->ju0;
|
||||||
v0 = currentChunk->jv0;
|
v0 = currentChunk->jv0;
|
||||||
w0 = currentChunk->jw0;
|
w0 = currentChunk->jw0;
|
||||||
setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,1,currentChunk->u);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u);
|
||||||
setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,2,currentChunk->v);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,2,v);
|
||||||
setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,3,currentChunk->w);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,3,w);
|
||||||
setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,1,currentChunk->u0);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u0);
|
||||||
setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,2,currentChunk->v0);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,2,v0);
|
||||||
setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,3,currentChunk->w0);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,3,w0);
|
||||||
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,1,u);
|
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,1,u);
|
||||||
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,2,v);
|
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,2,v);
|
||||||
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,3,w);
|
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,3,w);
|
||||||
@ -565,7 +565,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u0 = currentChunk->ju0;
|
u0 = currentChunk->ju0;
|
||||||
v0 = currentChunk->jv0;
|
v0 = currentChunk->jv0;
|
||||||
w0 = currentChunk->jw0;
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_advectVectors(env,chunkJRaw,DIM,chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
Java_electrosphere_FluidSim_advectVectors(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
||||||
}
|
}
|
||||||
//update neighbor arr
|
//update neighbor arr
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
@ -627,7 +627,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u0 = currentChunk->ju0;
|
u0 = currentChunk->ju0;
|
||||||
v0 = currentChunk->jv0;
|
v0 = currentChunk->jv0;
|
||||||
w0 = currentChunk->jw0;
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_setupProjection(env,chunkJRaw,DIM,chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
Java_electrosphere_FluidSim_setupProjection(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
||||||
}
|
}
|
||||||
//update array for vectors
|
//update array for vectors
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
@ -642,10 +642,10 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u0 = currentChunk->ju0;
|
u0 = currentChunk->ju0;
|
||||||
v0 = currentChunk->jv0;
|
v0 = currentChunk->jv0;
|
||||||
w0 = currentChunk->jw0;
|
w0 = currentChunk->jw0;
|
||||||
setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,1,currentChunk->u0);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u0);
|
||||||
setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,2,currentChunk->v0);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,2,v0);
|
||||||
copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,1,currentChunk->u0);
|
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,1,u0);
|
||||||
copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,2,currentChunk->v0);
|
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,2,v0);
|
||||||
}
|
}
|
||||||
//samples u0, v0
|
//samples u0, v0
|
||||||
//sets u0
|
//sets u0
|
||||||
@ -665,7 +665,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u0 = currentChunk->ju0;
|
u0 = currentChunk->ju0;
|
||||||
v0 = currentChunk->jv0;
|
v0 = currentChunk->jv0;
|
||||||
w0 = currentChunk->jw0;
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_solveProjection(env,chunkJRaw,DIM,chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
Java_electrosphere_FluidSim_solveProjection(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
||||||
}
|
}
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
Chunk * currentChunk = chunks[i];
|
Chunk * currentChunk = chunks[i];
|
||||||
@ -679,8 +679,8 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u0 = currentChunk->ju0;
|
u0 = currentChunk->ju0;
|
||||||
v0 = currentChunk->jv0;
|
v0 = currentChunk->jv0;
|
||||||
w0 = currentChunk->jw0;
|
w0 = currentChunk->jw0;
|
||||||
setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,1,currentChunk->u0);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u0);
|
||||||
copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,1,currentChunk->u0);
|
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,1,u0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//samples u,v,w,u0
|
//samples u,v,w,u0
|
||||||
@ -698,7 +698,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u0 = currentChunk->ju0;
|
u0 = currentChunk->ju0;
|
||||||
v0 = currentChunk->jv0;
|
v0 = currentChunk->jv0;
|
||||||
w0 = currentChunk->jw0;
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_finalizeProjection(env,chunkJRaw,DIM,chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
Java_electrosphere_FluidSim_finalizeProjection(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
||||||
}
|
}
|
||||||
//set boundaries a final time for u,v,w
|
//set boundaries a final time for u,v,w
|
||||||
//...
|
//...
|
||||||
@ -783,7 +783,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u = currentChunk->ju;
|
u = currentChunk->ju;
|
||||||
v = currentChunk->jv;
|
v = currentChunk->jv;
|
||||||
w = currentChunk->jw;
|
w = currentChunk->jw;
|
||||||
Java_electrosphere_FluidSim_solveDiffuseDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,currentChunk->u,currentChunk->v,currentChunk->w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
Java_electrosphere_FluidSim_solveDiffuseDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,u,v,w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
||||||
}
|
}
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
Chunk * currentChunk = chunks[i];
|
Chunk * currentChunk = chunks[i];
|
||||||
@ -822,7 +822,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
u = currentChunk->ju;
|
u = currentChunk->ju;
|
||||||
v = currentChunk->jv;
|
v = currentChunk->jv;
|
||||||
w = currentChunk->jw;
|
w = currentChunk->jw;
|
||||||
Java_electrosphere_FluidSim_advectDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,currentChunk->u,currentChunk->v,currentChunk->w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
Java_electrosphere_FluidSim_advectDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,u,v,w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//mirror densities
|
//mirror densities
|
||||||
|
|||||||
@ -25,7 +25,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_addSourceToVectors
|
|||||||
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
||||||
*/
|
*/
|
||||||
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveVectorDiffuse
|
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveVectorDiffuse
|
||||||
(JNIEnv *, jobject, jint, jint, float **, float **, float **, float **, float **, float **, jfloat, jfloat, jfloat);
|
(JNIEnv *, jobject, jint, jint, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: electrosphere_FluidSim
|
* Class: electrosphere_FluidSim
|
||||||
@ -33,7 +33,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveVectorDiffuse
|
|||||||
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
||||||
*/
|
*/
|
||||||
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_setupProjection
|
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_setupProjection
|
||||||
(JNIEnv *, jobject, jint, jint, float **, float **, float **, float **, float **, float **, jfloat, jfloat, jfloat);
|
(JNIEnv *, jobject, jint, jint, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: electrosphere_FluidSim
|
* Class: electrosphere_FluidSim
|
||||||
@ -41,7 +41,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_setupProjection
|
|||||||
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
||||||
*/
|
*/
|
||||||
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveProjection
|
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveProjection
|
||||||
(JNIEnv *, jobject, jint, jint, float **, float **, float **, float **, float **, float **, jfloat, jfloat, jfloat);
|
(JNIEnv *, jobject, jint, jint, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: electrosphere_FluidSim
|
* Class: electrosphere_FluidSim
|
||||||
@ -49,7 +49,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveProjection
|
|||||||
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
||||||
*/
|
*/
|
||||||
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_finalizeProjection
|
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_finalizeProjection
|
||||||
(JNIEnv *, jobject, jint, jint, float **, float **, float **, float **, float **, float **, jfloat, jfloat, jfloat);
|
(JNIEnv *, jobject, jint, jint, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: electrosphere_FluidSim
|
* Class: electrosphere_FluidSim
|
||||||
@ -57,7 +57,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_finalizeProjection
|
|||||||
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
||||||
*/
|
*/
|
||||||
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_advectVectors
|
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_advectVectors
|
||||||
(JNIEnv *, jobject, jint, jint, float **, float **, float **, float **, float **, float **, jfloat, jfloat, jfloat);
|
(JNIEnv *, jobject, jint, jint, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: electrosphere_FluidSim
|
* Class: electrosphere_FluidSim
|
||||||
@ -73,7 +73,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_addDensity
|
|||||||
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
||||||
*/
|
*/
|
||||||
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveDiffuseDensity
|
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveDiffuseDensity
|
||||||
(JNIEnv *, jobject, jint, jint, float **, float **, float **, float **, float **, jfloat, jfloat, jfloat);
|
(JNIEnv *, jobject, jint, jint, float **, float **, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: electrosphere_FluidSim
|
* Class: electrosphere_FluidSim
|
||||||
@ -81,7 +81,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveDiffuseDensity
|
|||||||
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
|
||||||
*/
|
*/
|
||||||
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_advectDensity
|
JNIEXPORT void JNICALL Java_electrosphere_FluidSim_advectDensity
|
||||||
(JNIEnv *, jobject, jint, jint, float **, float **, float **, float **, float **, jfloat, jfloat, jfloat);
|
(JNIEnv *, jobject, jint, jint, float **, float **, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: electrosphere_FluidSim
|
* Class: electrosphere_FluidSim
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
#define SET_BOUND_USE_NEIGHBOR 1
|
#define SET_BOUND_USE_NEIGHBOR 1
|
||||||
|
|
||||||
void add_source(int N, float * x, float * s, float dt);
|
void add_source(int N, float * x, float * s, float dt);
|
||||||
void advect(JNIEnv * env, uint32_t chunk_mask, int N, int b, float ** jrd, float ** jrd0, float * u, float * v, float * w, float dt);
|
void advect(JNIEnv * env, uint32_t chunk_mask, int N, int b, jobjectArray jrd, jobjectArray jrd0, float * u, float * v, float * w, float dt);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -57,24 +57,24 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveVectorDiffuse
|
|||||||
jobject this,
|
jobject this,
|
||||||
jint N,
|
jint N,
|
||||||
jint chunk_mask,
|
jint chunk_mask,
|
||||||
float ** jru,
|
jobjectArray jru,
|
||||||
float ** jrv,
|
jobjectArray jrv,
|
||||||
float ** jrw,
|
jobjectArray jrw,
|
||||||
float ** jru0,
|
jobjectArray jru0,
|
||||||
float ** jrv0,
|
jobjectArray jrv0,
|
||||||
float ** jrw0,
|
jobjectArray jrw0,
|
||||||
jfloat DIFFUSION_CONST,
|
jfloat DIFFUSION_CONST,
|
||||||
jfloat VISCOSITY_CONST,
|
jfloat VISCOSITY_CONST,
|
||||||
jfloat dt){
|
jfloat dt){
|
||||||
float a=dt*VISCOSITY_CONST*N*N*N;
|
float a=dt*VISCOSITY_CONST*N*N*N;
|
||||||
float c=1+6*a;
|
float c=1+6*a;
|
||||||
int i, j, k, l, m;
|
int i, j, k, l, m;
|
||||||
float * u = GET_ARR_RAW(env,jru,CENTER_LOC);
|
float * u = GET_ARR(env,jru,CENTER_LOC);
|
||||||
float * v = GET_ARR_RAW(env,jrv,CENTER_LOC);
|
float * v = GET_ARR(env,jrv,CENTER_LOC);
|
||||||
float * w = GET_ARR_RAW(env,jrw,CENTER_LOC);
|
float * w = GET_ARR(env,jrw,CENTER_LOC);
|
||||||
float * u0 = GET_ARR_RAW(env,jru0,CENTER_LOC);
|
float * u0 = GET_ARR(env,jru0,CENTER_LOC);
|
||||||
float * v0 = GET_ARR_RAW(env,jrv0,CENTER_LOC);
|
float * v0 = GET_ARR(env,jrv0,CENTER_LOC);
|
||||||
float * w0 = GET_ARR_RAW(env,jrw0,CENTER_LOC);
|
float * w0 = GET_ARR(env,jrw0,CENTER_LOC);
|
||||||
|
|
||||||
__m256 aScalar = _mm256_set1_ps(a);
|
__m256 aScalar = _mm256_set1_ps(a);
|
||||||
__m256 cScalar = _mm256_set1_ps(c);
|
__m256 cScalar = _mm256_set1_ps(c);
|
||||||
@ -166,12 +166,12 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_setupProjection
|
|||||||
jobject this,
|
jobject this,
|
||||||
jint N,
|
jint N,
|
||||||
jint chunk_mask,
|
jint chunk_mask,
|
||||||
float ** jru,
|
jobjectArray jru,
|
||||||
float ** jrv,
|
jobjectArray jrv,
|
||||||
float ** jrw,
|
jobjectArray jrw,
|
||||||
float ** jru0,
|
jobjectArray jru0,
|
||||||
float ** jrv0,
|
jobjectArray jrv0,
|
||||||
float ** jrw0,
|
jobjectArray jrw0,
|
||||||
jfloat DIFFUSION_CONST,
|
jfloat DIFFUSION_CONST,
|
||||||
jfloat VISCOSITY_CONST,
|
jfloat VISCOSITY_CONST,
|
||||||
jfloat dt){
|
jfloat dt){
|
||||||
@ -184,12 +184,12 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_setupProjection
|
|||||||
__m256 zeroVec = _mm256_set1_ps(0);
|
__m256 zeroVec = _mm256_set1_ps(0);
|
||||||
__m256 vector, vector2, vector3;
|
__m256 vector, vector2, vector3;
|
||||||
|
|
||||||
float * u = GET_ARR_RAW(env,jru,CENTER_LOC);
|
float * u = GET_ARR(env,jru,CENTER_LOC);
|
||||||
float * v = GET_ARR_RAW(env,jrv,CENTER_LOC);
|
float * v = GET_ARR(env,jrv,CENTER_LOC);
|
||||||
float * w = GET_ARR_RAW(env,jrw,CENTER_LOC);
|
float * w = GET_ARR(env,jrw,CENTER_LOC);
|
||||||
|
|
||||||
float * p = GET_ARR_RAW(env,jru0,CENTER_LOC);
|
float * p = GET_ARR(env,jru0,CENTER_LOC);
|
||||||
float * div = GET_ARR_RAW(env,jrv0,CENTER_LOC);
|
float * div = GET_ARR(env,jrv0,CENTER_LOC);
|
||||||
|
|
||||||
float scalar = 1.0/3.0;
|
float scalar = 1.0/3.0;
|
||||||
float h = 1.0/N;
|
float h = 1.0/N;
|
||||||
@ -261,12 +261,12 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveProjection
|
|||||||
jobject this,
|
jobject this,
|
||||||
jint N,
|
jint N,
|
||||||
jint chunk_mask,
|
jint chunk_mask,
|
||||||
float ** jru,
|
jobjectArray jru,
|
||||||
float ** jrv,
|
jobjectArray jrv,
|
||||||
float ** jrw,
|
jobjectArray jrw,
|
||||||
float ** jru0,
|
jobjectArray jru0,
|
||||||
float ** jrv0,
|
jobjectArray jrv0,
|
||||||
float ** jrw0,
|
jobjectArray jrw0,
|
||||||
jfloat DIFFUSION_CONST,
|
jfloat DIFFUSION_CONST,
|
||||||
jfloat VISCOSITY_CONST,
|
jfloat VISCOSITY_CONST,
|
||||||
jfloat dt){
|
jfloat dt){
|
||||||
@ -276,8 +276,8 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveProjection
|
|||||||
__m256 aScalar = _mm256_set1_ps(a);
|
__m256 aScalar = _mm256_set1_ps(a);
|
||||||
__m256 cScalar = _mm256_set1_ps(c);
|
__m256 cScalar = _mm256_set1_ps(c);
|
||||||
|
|
||||||
float * p = GET_ARR_RAW(env,jru0,CENTER_LOC);
|
float * p = GET_ARR(env,jru0,CENTER_LOC);
|
||||||
float * div = GET_ARR_RAW(env,jrv0,CENTER_LOC);
|
float * div = GET_ARR(env,jrv0,CENTER_LOC);
|
||||||
// update for each cell
|
// update for each cell
|
||||||
for(k=1; k<N-1; k++){
|
for(k=1; k<N-1; k++){
|
||||||
for(j=1; j<N-1; j++){
|
for(j=1; j<N-1; j++){
|
||||||
@ -316,12 +316,12 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_finalizeProjection
|
|||||||
jobject this,
|
jobject this,
|
||||||
jint N,
|
jint N,
|
||||||
jint chunk_mask,
|
jint chunk_mask,
|
||||||
float ** jru,
|
jobjectArray jru,
|
||||||
float ** jrv,
|
jobjectArray jrv,
|
||||||
float ** jrw,
|
jobjectArray jrw,
|
||||||
float ** jru0,
|
jobjectArray jru0,
|
||||||
float ** jrv0,
|
jobjectArray jrv0,
|
||||||
float ** jrw0,
|
jobjectArray jrw0,
|
||||||
jfloat DIFFUSION_CONST,
|
jfloat DIFFUSION_CONST,
|
||||||
jfloat VISCOSITY_CONST,
|
jfloat VISCOSITY_CONST,
|
||||||
jfloat dt){
|
jfloat dt){
|
||||||
@ -332,12 +332,12 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_finalizeProjection
|
|||||||
__m256 zScalar = _mm256_set1_ps(0.5*N);
|
__m256 zScalar = _mm256_set1_ps(0.5*N);
|
||||||
__m256 vector, vector2, vector3;
|
__m256 vector, vector2, vector3;
|
||||||
|
|
||||||
float * u = GET_ARR_RAW(env,jru,CENTER_LOC);
|
float * u = GET_ARR(env,jru,CENTER_LOC);
|
||||||
float * v = GET_ARR_RAW(env,jrv,CENTER_LOC);
|
float * v = GET_ARR(env,jrv,CENTER_LOC);
|
||||||
float * w = GET_ARR_RAW(env,jrw,CENTER_LOC);
|
float * w = GET_ARR(env,jrw,CENTER_LOC);
|
||||||
|
|
||||||
float * p = GET_ARR_RAW(env,jru0,CENTER_LOC);
|
float * p = GET_ARR(env,jru0,CENTER_LOC);
|
||||||
float * div = GET_ARR_RAW(env,jrv0,CENTER_LOC);
|
float * div = GET_ARR(env,jrv0,CENTER_LOC);
|
||||||
|
|
||||||
float h = 1.0 / N;
|
float h = 1.0 / N;
|
||||||
|
|
||||||
@ -411,36 +411,36 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_advectVectors
|
|||||||
jobject this,
|
jobject this,
|
||||||
jint N,
|
jint N,
|
||||||
jint chunk_mask,
|
jint chunk_mask,
|
||||||
float ** jru,
|
jobjectArray jru,
|
||||||
float ** jrv,
|
jobjectArray jrv,
|
||||||
float ** jrw,
|
jobjectArray jrw,
|
||||||
float ** jru0,
|
jobjectArray jru0,
|
||||||
float ** jrv0,
|
jobjectArray jrv0,
|
||||||
float ** jrw0,
|
jobjectArray jrw0,
|
||||||
jfloat DIFFUSION_CONST,
|
jfloat DIFFUSION_CONST,
|
||||||
jfloat VISCOSITY_CONST,
|
jfloat VISCOSITY_CONST,
|
||||||
jfloat dt){
|
jfloat dt){
|
||||||
advect(env,chunk_mask,N,1,jru,jru0,GET_ARR_RAW(env,jru0,CENTER_LOC),GET_ARR_RAW(env,jrv0,CENTER_LOC),GET_ARR_RAW(env,jrw0,CENTER_LOC),dt);
|
advect(env,chunk_mask,N,1,jru,jru0,GET_ARR(env,jru0,CENTER_LOC),GET_ARR(env,jrv0,CENTER_LOC),GET_ARR(env,jrw0,CENTER_LOC),dt);
|
||||||
advect(env,chunk_mask,N,2,jrv,jrv0,GET_ARR_RAW(env,jru0,CENTER_LOC),GET_ARR_RAW(env,jrv0,CENTER_LOC),GET_ARR_RAW(env,jrw0,CENTER_LOC),dt);
|
advect(env,chunk_mask,N,2,jrv,jrv0,GET_ARR(env,jru0,CENTER_LOC),GET_ARR(env,jrv0,CENTER_LOC),GET_ARR(env,jrw0,CENTER_LOC),dt);
|
||||||
advect(env,chunk_mask,N,3,jrw,jrw0,GET_ARR_RAW(env,jru0,CENTER_LOC),GET_ARR_RAW(env,jrv0,CENTER_LOC),GET_ARR_RAW(env,jrw0,CENTER_LOC),dt);
|
advect(env,chunk_mask,N,3,jrw,jrw0,GET_ARR(env,jru0,CENTER_LOC),GET_ARR(env,jrv0,CENTER_LOC),GET_ARR(env,jrw0,CENTER_LOC),dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void advect(JNIEnv * env, uint32_t chunk_mask, int N, int b, float ** jrd, float ** jrd0, float * u, float * v, float * w, float dt){
|
void advect(JNIEnv * env, uint32_t chunk_mask, int N, int b, jobjectArray jrd, jobjectArray jrd0, float * u, float * v, float * w, float dt){
|
||||||
int i, j, k, i0, j0, k0, i1, j1, k1;
|
int i, j, k, i0, j0, k0, i1, j1, k1;
|
||||||
int m,n,o;
|
int m,n,o;
|
||||||
float x, y, z, s0, t0, s1, t1, u1, u0, dtx,dty,dtz;
|
float x, y, z, s0, t0, s1, t1, u1, u0, dtx,dty,dtz;
|
||||||
|
|
||||||
dtx=dty=dtz=dt*N;
|
dtx=dty=dtz=dt*N;
|
||||||
|
|
||||||
float * d = GET_ARR_RAW(env,jrd,CENTER_LOC);
|
float * d = GET_ARR(env,jrd,CENTER_LOC);
|
||||||
|
|
||||||
float * d0 = GET_ARR_RAW(env,jrd0,CENTER_LOC);
|
float * d0 = GET_ARR(env,jrd0,CENTER_LOC);
|
||||||
|
|
||||||
for(k=1; k<N-1; k++){
|
for(k=1; k<N-1; k++){
|
||||||
for(j=1; j<N-1; j++){
|
for(j=1; j<N-1; j++){
|
||||||
for(i=1; i<N-1; i++){
|
for(i=1; i<N-1; i++){
|
||||||
d0 = GET_ARR_RAW(env,jrd0,CENTER_LOC);
|
d0 = GET_ARR(env,jrd0,CENTER_LOC);
|
||||||
//calculate location to pull from
|
//calculate location to pull from
|
||||||
x = i-dtx*u[IX(i,j,k)];
|
x = i-dtx*u[IX(i,j,k)];
|
||||||
y = j-dty*v[IX(i,j,k)];
|
y = j-dty*v[IX(i,j,k)];
|
||||||
@ -506,7 +506,7 @@ void advect(JNIEnv * env, uint32_t chunk_mask, int N, int b, float ** jrd, float
|
|||||||
|
|
||||||
|
|
||||||
// printf("Hit other chunk\n");
|
// printf("Hit other chunk\n");
|
||||||
d0 = GET_ARR_RAW(env,jrd0,CK(m,n,o));
|
d0 = GET_ARR(env,jrd0,CK(m,n,o));
|
||||||
x = x + CHUNK_NORMALIZE_U[CK(m,n,o)] * (N-2);
|
x = x + CHUNK_NORMALIZE_U[CK(m,n,o)] * (N-2);
|
||||||
// printf("%d => %f\n",m,x);
|
// printf("%d => %f\n",m,x);
|
||||||
y = y + CHUNK_NORMALIZE_V[CK(m,n,o)] * (N-2);
|
y = y + CHUNK_NORMALIZE_V[CK(m,n,o)] * (N-2);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user