diff --git a/src/main/c/fluidsim.c b/src/main/c/fluidsim.c index e6f4540..e55a536 100644 --- a/src/main/c/fluidsim.c +++ b/src/main/c/fluidsim.c @@ -451,16 +451,17 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( } //copy neighbors for(int i = 0; i < numChunks; i++){ - chunkJRaw = getChunk(i); - chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId); - d = getBuffArr(dJId); - d0 = getBuffArr(d0JId); - u = getBuffArr(uJId); - v = getBuffArr(vJId); - w = getBuffArr(wJId); - u0 = getBuffArr(u0JId); - v0 = getBuffArr(v0JId); - w0 = getBuffArr(w0JId); + Chunk * currentChunk = chunks[i]; + chunkJRaw = currentChunk->jchunk; + chunkMask = currentChunk->chunkMask; + d = currentChunk->jd; + d0 = currentChunk->jd0; + u = currentChunk->ju; + v = currentChunk->jv; + w = currentChunk->jw; + u0 = currentChunk->ju0; + v0 = currentChunk->jv0; + w0 = currentChunk->jw0; 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); @@ -473,16 +474,17 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( { //update border arrs for(int i = 0; i < numChunks; i++){ - chunkJRaw = getChunk(i); - chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId); - d = getBuffArr(dJId); - d0 = getBuffArr(d0JId); - u = getBuffArr(uJId); - v = getBuffArr(vJId); - w = getBuffArr(wJId); - u0 = getBuffArr(u0JId); - v0 = getBuffArr(v0JId); - w0 = getBuffArr(w0JId); + Chunk * currentChunk = chunks[i]; + chunkJRaw = currentChunk->jchunk; + chunkMask = currentChunk->chunkMask; + d = currentChunk->jd; + d0 = currentChunk->jd0; + u = currentChunk->ju; + v = currentChunk->jv; + w = currentChunk->jw; + 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); @@ -498,30 +500,32 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( } //advect for(int i = 0; i < numChunks; i++){ - chunkJRaw = getChunk(i); - chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId); - d = getBuffArr(dJId); - d0 = getBuffArr(d0JId); - u = getBuffArr(uJId); - v = getBuffArr(vJId); - w = getBuffArr(wJId); - u0 = getBuffArr(u0JId); - v0 = getBuffArr(v0JId); - w0 = getBuffArr(w0JId); + Chunk * currentChunk = chunks[i]; + chunkJRaw = currentChunk->jchunk; + chunkMask = currentChunk->chunkMask; + d = currentChunk->jd; + d0 = currentChunk->jd0; + u = currentChunk->ju; + v = currentChunk->jv; + w = currentChunk->jw; + 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); } //update neighbor arr for(int i = 0; i < numChunks; i++){ - chunkJRaw = getChunk(i); - chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId); - d = getBuffArr(dJId); - d0 = getBuffArr(d0JId); - u = getBuffArr(uJId); - v = getBuffArr(vJId); - w = getBuffArr(wJId); - u0 = getBuffArr(u0JId); - v0 = getBuffArr(v0JId); - w0 = getBuffArr(w0JId); + Chunk * currentChunk = chunks[i]; + chunkJRaw = currentChunk->jchunk; + chunkMask = currentChunk->chunkMask; + d = currentChunk->jd; + d0 = currentChunk->jd0; + u = currentChunk->ju; + v = currentChunk->jv; + w = currentChunk->jw; + 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); @@ -534,16 +538,17 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( { //update array for vectors for(int i = 0; i < numChunks; i++){ - chunkJRaw = getChunk(i); - chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId); - d = getBuffArr(dJId); - d0 = getBuffArr(d0JId); - u = getBuffArr(uJId); - v = getBuffArr(vJId); - w = getBuffArr(wJId); - u0 = getBuffArr(u0JId); - v0 = getBuffArr(v0JId); - w0 = getBuffArr(w0JId); + Chunk * currentChunk = chunks[i]; + chunkJRaw = currentChunk->jchunk; + chunkMask = currentChunk->chunkMask; + d = currentChunk->jd; + d0 = currentChunk->jd0; + u = currentChunk->ju; + v = currentChunk->jv; + w = currentChunk->jw; + 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); @@ -557,30 +562,32 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( } //setup projection for(int i = 0; i < numChunks; i++){ - chunkJRaw = getChunk(i); - chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId); - d = getBuffArr(dJId); - d0 = getBuffArr(d0JId); - u = getBuffArr(uJId); - v = getBuffArr(vJId); - w = getBuffArr(wJId); - u0 = getBuffArr(u0JId); - v0 = getBuffArr(v0JId); - w0 = getBuffArr(w0JId); + Chunk * currentChunk = chunks[i]; + chunkJRaw = currentChunk->jchunk; + chunkMask = currentChunk->chunkMask; + d = currentChunk->jd; + d0 = currentChunk->jd0; + u = currentChunk->ju; + v = currentChunk->jv; + w = currentChunk->jw; + 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); } //update array for vectors for(int i = 0; i < numChunks; i++){ - chunkJRaw = getChunk(i); - chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId); - d = getBuffArr(dJId); - d0 = getBuffArr(d0JId); - u = getBuffArr(uJId); - v = getBuffArr(vJId); - w = getBuffArr(wJId); - u0 = getBuffArr(u0JId); - v0 = getBuffArr(v0JId); - w0 = getBuffArr(w0JId); + Chunk * currentChunk = chunks[i]; + chunkJRaw = currentChunk->jchunk; + chunkMask = currentChunk->chunkMask; + d = currentChunk->jd; + d0 = currentChunk->jd0; + u = currentChunk->ju; + v = currentChunk->jv; + w = currentChunk->jw; + 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); @@ -593,29 +600,31 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( //Perform main projection solver for(int l = 0; l < LINEARSOLVERTIMES; l++){ for(int i = 0; i < numChunks; i++){ - chunkJRaw = getChunk(i); - chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId); - d = getBuffArr(dJId); - d0 = getBuffArr(d0JId); - u = getBuffArr(uJId); - v = getBuffArr(vJId); - w = getBuffArr(wJId); - u0 = getBuffArr(u0JId); - v0 = getBuffArr(v0JId); - w0 = getBuffArr(w0JId); + Chunk * currentChunk = chunks[i]; + chunkJRaw = currentChunk->jchunk; + chunkMask = currentChunk->chunkMask; + d = currentChunk->jd; + d0 = currentChunk->jd0; + u = currentChunk->ju; + v = currentChunk->jv; + w = currentChunk->jw; + 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); } for(int i = 0; i < numChunks; i++){ - chunkJRaw = getChunk(i); - chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId); - d = getBuffArr(dJId); - d0 = getBuffArr(d0JId); - u = getBuffArr(uJId); - v = getBuffArr(vJId); - w = getBuffArr(wJId); - u0 = getBuffArr(u0JId); - v0 = getBuffArr(v0JId); - w0 = getBuffArr(w0JId); + Chunk * currentChunk = chunks[i]; + chunkJRaw = currentChunk->jchunk; + chunkMask = currentChunk->chunkMask; + d = currentChunk->jd; + d0 = currentChunk->jd0; + u = currentChunk->ju; + v = currentChunk->jv; + w = currentChunk->jw; + 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); } @@ -624,31 +633,33 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( //sets u,v,w //Finalize projection for(int i = 0; i < numChunks; i++){ - chunkJRaw = getChunk(i); - chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId); - d = getBuffArr(dJId); - d0 = getBuffArr(d0JId); - u = getBuffArr(uJId); - v = getBuffArr(vJId); - w = getBuffArr(wJId); - u0 = getBuffArr(u0JId); - v0 = getBuffArr(v0JId); - w0 = getBuffArr(w0JId); + Chunk * currentChunk = chunks[i]; + chunkJRaw = currentChunk->jchunk; + chunkMask = currentChunk->chunkMask; + d = currentChunk->jd; + d0 = currentChunk->jd0; + u = currentChunk->ju; + v = currentChunk->jv; + w = currentChunk->jw; + 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); } //set boundaries a final time for u,v,w //... for(int i = 0; i < numChunks; i++){ - chunkJRaw = getChunk(i); - chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId); - d = getBuffArr(dJId); - d0 = getBuffArr(d0JId); - u = getBuffArr(uJId); - v = getBuffArr(vJId); - w = getBuffArr(wJId); - u0 = getBuffArr(u0JId); - v0 = getBuffArr(v0JId); - w0 = getBuffArr(w0JId); + Chunk * currentChunk = chunks[i]; + chunkJRaw = currentChunk->jchunk; + chunkMask = currentChunk->chunkMask; + d = currentChunk->jd; + d0 = currentChunk->jd0; + u = currentChunk->ju; + v = currentChunk->jv; + w = currentChunk->jw; + 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);