From 79fa7715f09d0e9b76c996925eedd2dd8eca5ceb Mon Sep 17 00:00:00 2001 From: unknown <> Date: Sun, 10 Mar 2024 18:04:55 -0400 Subject: [PATCH] swap all remaining to raw arrays --- src/main/c/densitystep.c | 14 ++--- src/main/c/fluidsim.c | 16 ++--- src/main/c/includes/mainFunctions.h | 12 ++-- src/main/c/velocitystep.c | 98 ++++++++++++++--------------- 4 files changed, 70 insertions(+), 70 deletions(-) diff --git a/src/main/c/densitystep.c b/src/main/c/densitystep.c index b25e82f..2da5e5e 100644 --- a/src/main/c/densitystep.c +++ b/src/main/c/densitystep.c @@ -42,9 +42,9 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveDiffuseDensity jint chunk_mask, float ** d, float ** d0, - jobjectArray jru, - jobjectArray jrv, - jobjectArray jrw, + float ** jru, + float ** jrv, + float ** jrw, jfloat DIFFUSION_CONST, jfloat VISCOSITY_CONST, jfloat dt){ @@ -96,13 +96,13 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_advectDensity jint chunk_mask, float ** d, float ** d0, - jobjectArray jru, - jobjectArray jrv, - jobjectArray jrw, + float ** jru, + float ** jrv, + float ** jrw, jfloat DIFFUSION_CONST, jfloat VISCOSITY_CONST, jfloat 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); + 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); } void advectDensity(JNIEnv * env, uint32_t chunk_mask, int N, int b, float ** d, float ** d0, float * u, float * v, float * w, float dt){ diff --git a/src/main/c/fluidsim.c b/src/main/c/fluidsim.c index f638976..df0757d 100644 --- a/src/main/c/fluidsim.c +++ b/src/main/c/fluidsim.c @@ -285,7 +285,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u0 = currentChunk->ju0; v0 = currentChunk->jv0; w0 = currentChunk->jw0; - Java_electrosphere_FluidSim_solveVectorDiffuse(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); + 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); } //update array for vectors for(int i = 0; i < numChunks; i++){ @@ -348,7 +348,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u0 = currentChunk->ju0; v0 = currentChunk->jv0; w0 = currentChunk->jw0; - Java_electrosphere_FluidSim_setupProjection(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); + 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); } //update array for vectors for(int i = 0; i < numChunks; i++){ @@ -419,7 +419,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u0 = currentChunk->ju0; v0 = currentChunk->jv0; w0 = currentChunk->jw0; - Java_electrosphere_FluidSim_finalizeProjection(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); + 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); } //set boundaries a final time for u,v,w //... @@ -565,7 +565,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u0 = currentChunk->ju0; v0 = currentChunk->jv0; w0 = currentChunk->jw0; - Java_electrosphere_FluidSim_advectVectors(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); + 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); } //update neighbor arr for(int i = 0; i < numChunks; i++){ @@ -627,7 +627,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u0 = currentChunk->ju0; v0 = currentChunk->jv0; w0 = currentChunk->jw0; - Java_electrosphere_FluidSim_setupProjection(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); + 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); } //update array for vectors for(int i = 0; i < numChunks; i++){ @@ -698,7 +698,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u0 = currentChunk->ju0; v0 = currentChunk->jv0; w0 = currentChunk->jw0; - Java_electrosphere_FluidSim_finalizeProjection(env,chunkJRaw,DIM,chunkMask,u,v,w,u0,v0,w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); + 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); } //set boundaries a final time for u,v,w //... @@ -783,7 +783,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u = currentChunk->ju; v = currentChunk->jv; w = currentChunk->jw; - Java_electrosphere_FluidSim_solveDiffuseDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,u,v,w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); + Java_electrosphere_FluidSim_solveDiffuseDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,currentChunk->u,currentChunk->v,currentChunk->w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); } for(int i = 0; i < numChunks; i++){ Chunk * currentChunk = chunks[i]; @@ -822,7 +822,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( u = currentChunk->ju; v = currentChunk->jv; w = currentChunk->jw; - Java_electrosphere_FluidSim_advectDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,u,v,w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); + Java_electrosphere_FluidSim_advectDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,currentChunk->u,currentChunk->v,currentChunk->w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); } } //mirror densities diff --git a/src/main/c/includes/mainFunctions.h b/src/main/c/includes/mainFunctions.h index 78f39a2..2c145e6 100644 --- a/src/main/c/includes/mainFunctions.h +++ b/src/main/c/includes/mainFunctions.h @@ -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 */ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveVectorDiffuse - (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 @@ -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 */ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_setupProjection - (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 @@ -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 */ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_finalizeProjection - (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 @@ -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 */ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_advectVectors - (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 @@ -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 */ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveDiffuseDensity - (JNIEnv *, jobject, jint, jint, float **, float **, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat); + (JNIEnv *, jobject, jint, jint, float **, float **, float **, float **, float **, jfloat, jfloat, jfloat); /* * 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 */ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_advectDensity - (JNIEnv *, jobject, jint, jint, float **, float **, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat); + (JNIEnv *, jobject, jint, jint, 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 b83cdb8..954e4c0 100644 --- a/src/main/c/velocitystep.c +++ b/src/main/c/velocitystep.c @@ -16,7 +16,7 @@ #define SET_BOUND_USE_NEIGHBOR 1 void add_source(int N, float * x, float * s, 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); +void advect(JNIEnv * env, uint32_t chunk_mask, int N, int b, float ** jrd, float ** jrd0, float * u, float * v, float * w, float dt); /* @@ -57,24 +57,24 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveVectorDiffuse 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){ float a=dt*VISCOSITY_CONST*N*N*N; float c=1+6*a; int i, j, k, l, m; - float * u = GET_ARR(env,jru,CENTER_LOC); - float * v = GET_ARR(env,jrv,CENTER_LOC); - float * w = GET_ARR(env,jrw,CENTER_LOC); - float * u0 = GET_ARR(env,jru0,CENTER_LOC); - float * v0 = GET_ARR(env,jrv0,CENTER_LOC); - float * w0 = GET_ARR(env,jrw0,CENTER_LOC); + float * u = GET_ARR_RAW(env,jru,CENTER_LOC); + float * v = GET_ARR_RAW(env,jrv,CENTER_LOC); + float * w = GET_ARR_RAW(env,jrw,CENTER_LOC); + float * u0 = GET_ARR_RAW(env,jru0,CENTER_LOC); + float * v0 = GET_ARR_RAW(env,jrv0,CENTER_LOC); + float * w0 = GET_ARR_RAW(env,jrw0,CENTER_LOC); __m256 aScalar = _mm256_set1_ps(a); __m256 cScalar = _mm256_set1_ps(c); @@ -166,12 +166,12 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_setupProjection 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){ @@ -184,12 +184,12 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_setupProjection __m256 zeroVec = _mm256_set1_ps(0); __m256 vector, vector2, vector3; - float * u = GET_ARR(env,jru,CENTER_LOC); - float * v = GET_ARR(env,jrv,CENTER_LOC); - float * w = GET_ARR(env,jrw,CENTER_LOC); + float * u = GET_ARR_RAW(env,jru,CENTER_LOC); + float * v = GET_ARR_RAW(env,jrv,CENTER_LOC); + float * w = GET_ARR_RAW(env,jrw,CENTER_LOC); - 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); float scalar = 1.0/3.0; float h = 1.0/N; @@ -316,12 +316,12 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_finalizeProjection 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){ @@ -332,12 +332,12 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_finalizeProjection __m256 zScalar = _mm256_set1_ps(0.5*N); __m256 vector, vector2, vector3; - float * u = GET_ARR(env,jru,CENTER_LOC); - float * v = GET_ARR(env,jrv,CENTER_LOC); - float * w = GET_ARR(env,jrw,CENTER_LOC); + float * u = GET_ARR_RAW(env,jru,CENTER_LOC); + float * v = GET_ARR_RAW(env,jrv,CENTER_LOC); + float * w = GET_ARR_RAW(env,jrw,CENTER_LOC); - 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); float h = 1.0 / N; @@ -411,36 +411,36 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_advectVectors 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){ - 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(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(env,jru0,CENTER_LOC),GET_ARR(env,jrv0,CENTER_LOC),GET_ARR(env,jrw0,CENTER_LOC),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,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,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); } -void advect(JNIEnv * env, uint32_t chunk_mask, int N, int b, jobjectArray jrd, jobjectArray jrd0, float * u, float * v, float * w, 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){ int i, j, k, i0, j0, k0, i1, j1, k1; int m,n,o; float x, y, z, s0, t0, s1, t1, u1, u0, dtx,dty,dtz; dtx=dty=dtz=dt*N; - float * d = GET_ARR(env,jrd,CENTER_LOC); + float * d = GET_ARR_RAW(env,jrd,CENTER_LOC); - float * d0 = GET_ARR(env,jrd0,CENTER_LOC); + float * d0 = GET_ARR_RAW(env,jrd0,CENTER_LOC); for(k=1; k %f\n",m,x); y = y + CHUNK_NORMALIZE_V[CK(m,n,o)] * (N-2);