first projection correct
This commit is contained in:
parent
f1d3c3d011
commit
2c70036f07
@ -213,16 +213,17 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
}
|
}
|
||||||
//copy neighbors
|
//copy neighbors
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
chunkJRaw = getChunk(i);
|
Chunk * currentChunk = chunks[i];
|
||||||
chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId);
|
chunkJRaw = currentChunk->jchunk;
|
||||||
d = getBuffArr(dJId);
|
chunkMask = currentChunk->chunkMask;
|
||||||
d0 = getBuffArr(d0JId);
|
d = currentChunk->jd;
|
||||||
u = getBuffArr(uJId);
|
d0 = currentChunk->jd0;
|
||||||
v = getBuffArr(vJId);
|
u = currentChunk->ju;
|
||||||
w = getBuffArr(wJId);
|
v = currentChunk->jv;
|
||||||
u0 = getBuffArr(u0JId);
|
w = currentChunk->jw;
|
||||||
v0 = getBuffArr(v0JId);
|
u0 = currentChunk->ju0;
|
||||||
w0 = getBuffArr(w0JId);
|
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,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);
|
||||||
@ -236,30 +237,32 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
for(int l = 0; l < LINEARSOLVERTIMES; l++){
|
for(int l = 0; l < LINEARSOLVERTIMES; l++){
|
||||||
//solve vector diffusion
|
//solve vector diffusion
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
chunkJRaw = getChunk(i);
|
Chunk * currentChunk = chunks[i];
|
||||||
chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId);
|
chunkJRaw = currentChunk->jchunk;
|
||||||
d = getBuffArr(dJId);
|
chunkMask = currentChunk->chunkMask;
|
||||||
d0 = getBuffArr(d0JId);
|
d = currentChunk->jd;
|
||||||
u = getBuffArr(uJId);
|
d0 = currentChunk->jd0;
|
||||||
v = getBuffArr(vJId);
|
u = currentChunk->ju;
|
||||||
w = getBuffArr(wJId);
|
v = currentChunk->jv;
|
||||||
u0 = getBuffArr(u0JId);
|
w = currentChunk->jw;
|
||||||
v0 = getBuffArr(v0JId);
|
u0 = currentChunk->ju0;
|
||||||
w0 = getBuffArr(w0JId);
|
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,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++){
|
||||||
chunkJRaw = getChunk(i);
|
Chunk * currentChunk = chunks[i];
|
||||||
chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId);
|
chunkJRaw = currentChunk->jchunk;
|
||||||
d = getBuffArr(dJId);
|
chunkMask = currentChunk->chunkMask;
|
||||||
d0 = getBuffArr(d0JId);
|
d = currentChunk->jd;
|
||||||
u = getBuffArr(uJId);
|
d0 = currentChunk->jd0;
|
||||||
v = getBuffArr(vJId);
|
u = currentChunk->ju;
|
||||||
w = getBuffArr(wJId);
|
v = currentChunk->jv;
|
||||||
u0 = getBuffArr(u0JId);
|
w = currentChunk->jw;
|
||||||
v0 = getBuffArr(v0JId);
|
u0 = currentChunk->ju0;
|
||||||
w0 = getBuffArr(w0JId);
|
v0 = currentChunk->jv0;
|
||||||
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u);
|
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,2,v);
|
||||||
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,3,w);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,3,w);
|
||||||
@ -273,16 +276,17 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
{
|
{
|
||||||
//update array for vectors
|
//update array for vectors
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
chunkJRaw = getChunk(i);
|
Chunk * currentChunk = chunks[i];
|
||||||
chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId);
|
chunkJRaw = currentChunk->jchunk;
|
||||||
d = getBuffArr(dJId);
|
chunkMask = currentChunk->chunkMask;
|
||||||
d0 = getBuffArr(d0JId);
|
d = currentChunk->jd;
|
||||||
u = getBuffArr(uJId);
|
d0 = currentChunk->jd0;
|
||||||
v = getBuffArr(vJId);
|
u = currentChunk->ju;
|
||||||
w = getBuffArr(wJId);
|
v = currentChunk->jv;
|
||||||
u0 = getBuffArr(u0JId);
|
w = currentChunk->jw;
|
||||||
v0 = getBuffArr(v0JId);
|
u0 = currentChunk->ju0;
|
||||||
w0 = getBuffArr(w0JId);
|
v0 = currentChunk->jv0;
|
||||||
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u);
|
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,2,v);
|
||||||
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,3,w);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,3,w);
|
||||||
@ -296,30 +300,32 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
}
|
}
|
||||||
//setup projection
|
//setup projection
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
chunkJRaw = getChunk(i);
|
Chunk * currentChunk = chunks[i];
|
||||||
chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId);
|
chunkJRaw = currentChunk->jchunk;
|
||||||
d = getBuffArr(dJId);
|
chunkMask = currentChunk->chunkMask;
|
||||||
d0 = getBuffArr(d0JId);
|
d = currentChunk->jd;
|
||||||
u = getBuffArr(uJId);
|
d0 = currentChunk->jd0;
|
||||||
v = getBuffArr(vJId);
|
u = currentChunk->ju;
|
||||||
w = getBuffArr(wJId);
|
v = currentChunk->jv;
|
||||||
u0 = getBuffArr(u0JId);
|
w = currentChunk->jw;
|
||||||
v0 = getBuffArr(v0JId);
|
u0 = currentChunk->ju0;
|
||||||
w0 = getBuffArr(w0JId);
|
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,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++){
|
||||||
chunkJRaw = getChunk(i);
|
Chunk * currentChunk = chunks[i];
|
||||||
chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId);
|
chunkJRaw = currentChunk->jchunk;
|
||||||
d = getBuffArr(dJId);
|
chunkMask = currentChunk->chunkMask;
|
||||||
d0 = getBuffArr(d0JId);
|
d = currentChunk->jd;
|
||||||
u = getBuffArr(uJId);
|
d0 = currentChunk->jd0;
|
||||||
v = getBuffArr(vJId);
|
u = currentChunk->ju;
|
||||||
w = getBuffArr(wJId);
|
v = currentChunk->jv;
|
||||||
u0 = getBuffArr(u0JId);
|
w = currentChunk->jw;
|
||||||
v0 = getBuffArr(v0JId);
|
u0 = currentChunk->ju0;
|
||||||
w0 = getBuffArr(w0JId);
|
v0 = currentChunk->jv0;
|
||||||
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u0);
|
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,2,v0);
|
||||||
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,1,u0);
|
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,1,u0);
|
||||||
@ -332,29 +338,31 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
//Perform main projection solver
|
//Perform main projection solver
|
||||||
for(int l = 0; l < LINEARSOLVERTIMES; l++){
|
for(int l = 0; l < LINEARSOLVERTIMES; l++){
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
chunkJRaw = getChunk(i);
|
Chunk * currentChunk = chunks[i];
|
||||||
chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId);
|
chunkJRaw = currentChunk->jchunk;
|
||||||
d = getBuffArr(dJId);
|
chunkMask = currentChunk->chunkMask;
|
||||||
d0 = getBuffArr(d0JId);
|
d = currentChunk->jd;
|
||||||
u = getBuffArr(uJId);
|
d0 = currentChunk->jd0;
|
||||||
v = getBuffArr(vJId);
|
u = currentChunk->ju;
|
||||||
w = getBuffArr(wJId);
|
v = currentChunk->jv;
|
||||||
u0 = getBuffArr(u0JId);
|
w = currentChunk->jw;
|
||||||
v0 = getBuffArr(v0JId);
|
u0 = currentChunk->ju0;
|
||||||
w0 = getBuffArr(w0JId);
|
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,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++){
|
||||||
chunkJRaw = getChunk(i);
|
Chunk * currentChunk = chunks[i];
|
||||||
chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId);
|
chunkJRaw = currentChunk->jchunk;
|
||||||
d = getBuffArr(dJId);
|
chunkMask = currentChunk->chunkMask;
|
||||||
d0 = getBuffArr(d0JId);
|
d = currentChunk->jd;
|
||||||
u = getBuffArr(uJId);
|
d0 = currentChunk->jd0;
|
||||||
v = getBuffArr(vJId);
|
u = currentChunk->ju;
|
||||||
w = getBuffArr(wJId);
|
v = currentChunk->jv;
|
||||||
u0 = getBuffArr(u0JId);
|
w = currentChunk->jw;
|
||||||
v0 = getBuffArr(v0JId);
|
u0 = currentChunk->ju0;
|
||||||
w0 = getBuffArr(w0JId);
|
v0 = currentChunk->jv0;
|
||||||
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u0);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u0);
|
||||||
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,1,u0);
|
Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,1,u0);
|
||||||
}
|
}
|
||||||
@ -363,31 +371,33 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
|||||||
//sets u,v,w
|
//sets u,v,w
|
||||||
//Finalize projection
|
//Finalize projection
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
chunkJRaw = getChunk(i);
|
Chunk * currentChunk = chunks[i];
|
||||||
chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId);
|
chunkJRaw = currentChunk->jchunk;
|
||||||
d = getBuffArr(dJId);
|
chunkMask = currentChunk->chunkMask;
|
||||||
d0 = getBuffArr(d0JId);
|
d = currentChunk->jd;
|
||||||
u = getBuffArr(uJId);
|
d0 = currentChunk->jd0;
|
||||||
v = getBuffArr(vJId);
|
u = currentChunk->ju;
|
||||||
w = getBuffArr(wJId);
|
v = currentChunk->jv;
|
||||||
u0 = getBuffArr(u0JId);
|
w = currentChunk->jw;
|
||||||
v0 = getBuffArr(v0JId);
|
u0 = currentChunk->ju0;
|
||||||
w0 = getBuffArr(w0JId);
|
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,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
|
||||||
//...
|
//...
|
||||||
for(int i = 0; i < numChunks; i++){
|
for(int i = 0; i < numChunks; i++){
|
||||||
chunkJRaw = getChunk(i);
|
Chunk * currentChunk = chunks[i];
|
||||||
chunkMask = (*env)->GetIntField(env,chunkJRaw,chunkmaskJId);
|
chunkJRaw = currentChunk->jchunk;
|
||||||
d = getBuffArr(dJId);
|
chunkMask = currentChunk->chunkMask;
|
||||||
d0 = getBuffArr(d0JId);
|
d = currentChunk->jd;
|
||||||
u = getBuffArr(uJId);
|
d0 = currentChunk->jd0;
|
||||||
v = getBuffArr(vJId);
|
u = currentChunk->ju;
|
||||||
w = getBuffArr(wJId);
|
v = currentChunk->jv;
|
||||||
u0 = getBuffArr(u0JId);
|
w = currentChunk->jw;
|
||||||
v0 = getBuffArr(v0JId);
|
u0 = currentChunk->ju0;
|
||||||
w0 = getBuffArr(w0JId);
|
v0 = currentChunk->jv0;
|
||||||
|
w0 = currentChunk->jw0;
|
||||||
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,1,u);
|
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,2,v);
|
||||||
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,3,w);
|
Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,3,w);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user