migrate velocity phase

This commit is contained in:
unknown 2024-03-10 17:08:50 -04:00
parent 2c70036f07
commit 6867733a0f

View File

@ -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);