From 10c3987f2d2129664b20ad20147596fc753937f6 Mon Sep 17 00:00:00 2001 From: unknown <> Date: Sun, 10 Mar 2024 17:56:49 -0400 Subject: [PATCH] main project swapped to raw arrays --- src/main/c/fluidsim.c | 32 ++++++++++++++--------------- src/main/c/includes/mainFunctions.h | 2 +- src/main/c/velocitystep.c | 16 +++++++-------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/main/c/fluidsim.c b/src/main/c/fluidsim.c index 9ace5f7..f638976 100644 --- a/src/main/c/fluidsim.c +++ b/src/main/c/fluidsim.c @@ -386,7 +386,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u0 = currentChunk->ju0; v0 = currentChunk->jv0; w0 = currentChunk->jw0; - Java_electrosphere_FluidSim_solveProjection(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); + 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); } for(int i = 0; i < numChunks; i++){ Chunk * currentChunk = chunks[i]; @@ -400,8 +400,8 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u0 = currentChunk->ju0; v0 = currentChunk->jv0; w0 = currentChunk->jw0; - Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u0); - Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,1,u0); + setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,1,currentChunk->u0); + copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,1,currentChunk->u0); } } //samples u,v,w,u0 @@ -435,12 +435,12 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u0 = currentChunk->ju0; v0 = currentChunk->jv0; w0 = currentChunk->jw0; - Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u); - Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,2,v); - Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,3,w); - Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u0); - Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,2,v0); - Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,3,w0); + setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,1,currentChunk->u); + setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,2,currentChunk->v); + setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,3,currentChunk->w); + setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,1,currentChunk->u0); + setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,2,currentChunk->v0); + setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,3,currentChunk->w0); 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,3,w); @@ -642,10 +642,10 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u0 = currentChunk->ju0; v0 = currentChunk->jv0; w0 = currentChunk->jw0; - Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u0); - Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,2,v0); - Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,1,u0); - Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,2,v0); + setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,1,currentChunk->u0); + setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,2,currentChunk->v0); + copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,1,currentChunk->u0); + copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,2,currentChunk->v0); } //samples u0, v0 //sets u0 @@ -665,7 +665,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u0 = currentChunk->ju0; v0 = currentChunk->jv0; w0 = currentChunk->jw0; - Java_electrosphere_FluidSim_solveProjection(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); + 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); } for(int i = 0; i < numChunks; i++){ Chunk * currentChunk = chunks[i]; @@ -679,8 +679,8 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u0 = currentChunk->ju0; v0 = currentChunk->jv0; w0 = currentChunk->jw0; - Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u0); - Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,1,u0); + setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,1,currentChunk->u0); + copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,1,currentChunk->u0); } } //samples u,v,w,u0 diff --git a/src/main/c/includes/mainFunctions.h b/src/main/c/includes/mainFunctions.h index 639588d..78f39a2 100644 --- a/src/main/c/includes/mainFunctions.h +++ b/src/main/c/includes/mainFunctions.h @@ -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 */ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveProjection - (JNIEnv *, jobject, jint, jint, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat); + (JNIEnv *, jobject, jint, jint, float **, float **, float **, float **, float **, float **, jfloat, jfloat, jfloat); /* * Class: electrosphere_FluidSim diff --git a/src/main/c/velocitystep.c b/src/main/c/velocitystep.c index 721cc3b..b83cdb8 100644 --- a/src/main/c/velocitystep.c +++ b/src/main/c/velocitystep.c @@ -261,12 +261,12 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveProjection jobject this, jint N, jint chunk_mask, - jobjectArray jru, - jobjectArray jrv, - jobjectArray jrw, - jobjectArray jru0, - jobjectArray jrv0, - jobjectArray jrw0, + float ** jru, + float ** jrv, + float ** jrw, + float ** jru0, + float ** jrv0, + float ** jrw0, jfloat DIFFUSION_CONST, jfloat VISCOSITY_CONST, jfloat dt){ @@ -276,8 +276,8 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveProjection __m256 aScalar = _mm256_set1_ps(a); __m256 cScalar = _mm256_set1_ps(c); - float * p = GET_ARR(env,jru0,CENTER_LOC); - float * div = GET_ARR(env,jrv0,CENTER_LOC); + float * p = GET_ARR_RAW(env,jru0,CENTER_LOC); + float * div = GET_ARR_RAW(env,jrv0,CENTER_LOC); // update for each cell for(k=1; k