chunk referencing
This commit is contained in:
parent
a41a848c04
commit
a004e7e2c3
@ -5,23 +5,35 @@
|
||||
#include "includes/electrosphere_FluidSim.h"
|
||||
#include "includes/mainFunctions.h"
|
||||
|
||||
//include stb ds
|
||||
#define STB_DS_IMPLEMENTATION
|
||||
#include "./lib/stb/stb_ds.h"
|
||||
|
||||
#define DIM 18
|
||||
#define LINEARSOLVERTIMES 20
|
||||
|
||||
#define DIFFUSION_CONSTANT 0.0
|
||||
#define VISCOSITY_CONSTANT 0.0
|
||||
|
||||
/**
|
||||
* A chunk
|
||||
*/
|
||||
typedef struct {
|
||||
float * d;
|
||||
float * u;
|
||||
float * v;
|
||||
float * w;
|
||||
float * d0;
|
||||
float * u0;
|
||||
float * v0;
|
||||
float * w0;
|
||||
jobject jchunk;
|
||||
jobjectArray jd;
|
||||
jobjectArray jd0;
|
||||
jobjectArray ju;
|
||||
jobjectArray jv;
|
||||
jobjectArray jw;
|
||||
jobjectArray ju0;
|
||||
jobjectArray jv0;
|
||||
jobjectArray jw0;
|
||||
int chunkMask;
|
||||
} Chunk;
|
||||
|
||||
//all chunks
|
||||
Chunk ** chunks = NULL;
|
||||
|
||||
#define getChunk(i) (*env)->CallObjectMethod(env,chunkList,jListGet,i)
|
||||
#define getBuffArr(buffId) (*env)->GetObjectField(env,chunkJRaw,buffId)
|
||||
#define setBuffArr(buffId,value) (*env)->SetObjectField(env,chunkJRaw,buffId,value)
|
||||
@ -74,20 +86,78 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate(
|
||||
chunkJRaw = getChunk(i);
|
||||
chunkMask = Java_electrosphere_FluidSim_calculateChunkMask(env,chunkJRaw,getBuffArr(dJId));
|
||||
(*env)->SetIntField(env,chunkJRaw,chunkmaskJId,chunkMask);
|
||||
|
||||
Chunk * newChunk;
|
||||
if(i >= stbds_arrlen(chunks)){
|
||||
// printf("allocate chunk %d\n",i);
|
||||
// fflush(stdout);
|
||||
newChunk = (Chunk *)malloc(sizeof(Chunk));
|
||||
// printf("new chunk %p\n",newChunk);
|
||||
// fflush(stdout);
|
||||
stbds_arrput(chunks,newChunk);
|
||||
// printf("new chunk %p\n",chunks[i]);
|
||||
// fflush(stdout);
|
||||
} else {
|
||||
newChunk = chunks[i];
|
||||
// printf("get chunk %d: %p\n",i,newChunk);
|
||||
// fflush(stdout);
|
||||
}
|
||||
d = (*env)->GetObjectField(env,chunkJRaw,dJId);
|
||||
d0 = (*env)->GetObjectField(env,chunkJRaw,d0JId);
|
||||
u = (*env)->GetObjectField(env,chunkJRaw,uJId);
|
||||
v = (*env)->GetObjectField(env,chunkJRaw,vJId);
|
||||
w = (*env)->GetObjectField(env,chunkJRaw,wJId);
|
||||
u0 = (*env)->GetObjectField(env,chunkJRaw,u0JId);
|
||||
v0 = (*env)->GetObjectField(env,chunkJRaw,v0JId);
|
||||
w0 = (*env)->GetObjectField(env,chunkJRaw,w0JId);
|
||||
newChunk->jd = d;
|
||||
newChunk->jd0 = d0;
|
||||
newChunk->ju = u;
|
||||
newChunk->jv = v;
|
||||
newChunk->jw = w;
|
||||
newChunk->ju0 = u0;
|
||||
newChunk->jv0 = v0;
|
||||
newChunk->jw0 = w0;
|
||||
newChunk->jchunk = chunkJRaw;
|
||||
newChunk->chunkMask = chunkMask;
|
||||
// for(int j = 0; j < 27; j++){
|
||||
// newChunk.d[j] = GET_ARR(env,d,j);
|
||||
// }
|
||||
// chunks[i].d0 = getBuffArr(d0JId);
|
||||
// chunks[i].u = getBuffArr(uJId);
|
||||
// chunks[i].v = getBuffArr(vJId);
|
||||
// chunks[i].w = getBuffArr(wJId);
|
||||
// chunks[i].u0 = getBuffArr(u0JId);
|
||||
// chunks[i].v0 = getBuffArr(v0JId);
|
||||
// chunks[i].w0 = getBuffArr(w0JId);
|
||||
}
|
||||
|
||||
// printf("%p\n",chunks[0].d);
|
||||
|
||||
//solve chunk mask
|
||||
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;
|
||||
d = currentChunk->jd0;
|
||||
u = currentChunk->ju;
|
||||
v = currentChunk->jv;
|
||||
w = currentChunk->jw;
|
||||
u0 = currentChunk->ju0;
|
||||
v0 = currentChunk->jv0;
|
||||
w0 = currentChunk->jw0;
|
||||
//old assignments
|
||||
// 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);
|
||||
Java_electrosphere_FluidSim_addSourceToVectors(
|
||||
env,
|
||||
chunkJRaw,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user