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