allocating arrays for new fluid sim approach
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
This commit is contained in:
parent
9b3f37017c
commit
c914582c92
@ -228,7 +228,10 @@ void fluid_grid2_normalizeDensity(float ** d, float ratio);
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Allocates the arrays necessary for grid2 simulation
|
||||
*/
|
||||
void fluid_grid2_allocate_arrays();
|
||||
|
||||
|
||||
|
||||
|
||||
@ -13,6 +13,7 @@
|
||||
#include "fluid/env/environment.h"
|
||||
#include "fluid/env/utilities.h"
|
||||
#include "fluid/sim/grid/simulation.h"
|
||||
#include "fluid/sim/grid2/simulation.h"
|
||||
#include "fluid/sim/simulator.h"
|
||||
#include "fluid/dispatch/dispatcher.h"
|
||||
|
||||
@ -138,6 +139,10 @@ JNIEXPORT void JNICALL Java_electrosphere_server_fluid_simulator_FluidAccelerate
|
||||
environment->lookupTable.serverFluidChunkTable.asleepId = (*env)->GetFieldID(env,fluidSimStorageClass,"asleep","Z");
|
||||
environment->lookupTable.serverFluidChunkTable.homogenousId = (*env)->GetFieldID(env,fluidSimStorageClass,"isHomogenous","Z");
|
||||
environment->lookupTable.serverFluidChunkTable.normalizationRatioId = (*env)->GetStaticFieldID(env,fluidSimStorageClass,"normalizationRatio","F");
|
||||
|
||||
|
||||
//init grid2 sim
|
||||
fluid_grid2_allocate_arrays();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
//native interfaces
|
||||
#include "native/electrosphere_server_fluid_simulator_FluidAcceleratedSimulator.h"
|
||||
@ -25,6 +26,24 @@ static inline void fluid_grid2_saveStep(float * values, const char * name);
|
||||
static inline void fluid_grid2_applyGravity(Chunk * currentChunk, Environment * environment);
|
||||
static inline void fluid_grid2_clearArr(float ** d);
|
||||
|
||||
/**
|
||||
* A grid that stores a mask of the border locations
|
||||
*/
|
||||
float * fluid_grid2_borderArr;
|
||||
|
||||
/**
|
||||
* An array that stores values for the neighbor's arrays
|
||||
*/
|
||||
float * fluid_grid2_neighborArr_d;
|
||||
float * fluid_grid2_neighborArr_d0;
|
||||
float * fluid_grid2_neighborArr_u;
|
||||
float * fluid_grid2_neighborArr_v;
|
||||
float * fluid_grid2_neighborArr_w;
|
||||
float * fluid_grid2_neighborArr_u0;
|
||||
float * fluid_grid2_neighborArr_v0;
|
||||
float * fluid_grid2_neighborArr_w0;
|
||||
float * fluid_grid2_neighborArr_bounds;
|
||||
|
||||
void fluid_grid2_simulate(
|
||||
int numChunks,
|
||||
Chunk ** passedInChunks,
|
||||
@ -33,14 +52,6 @@ void fluid_grid2_simulate(
|
||||
){
|
||||
Chunk ** chunks = passedInChunks;
|
||||
|
||||
// printf("%p\n",chunks[0].d);
|
||||
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/beginU");
|
||||
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/beginV");
|
||||
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/beginW");
|
||||
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/beginU0");
|
||||
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/beginV0");
|
||||
// saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/beginW0");
|
||||
|
||||
//solve chunk mask
|
||||
for(int i = 0; i < numChunks; i++){
|
||||
Chunk * currentChunk = chunks[i];
|
||||
@ -57,12 +68,6 @@ void fluid_grid2_simulate(
|
||||
FLUID_GRID2_VISCOSITY_CONSTANT,
|
||||
timestep
|
||||
);
|
||||
// saveStep(currentChunk->u[CENTER_LOC], "./chunks/addSrcU");
|
||||
// saveStep(currentChunk->v[CENTER_LOC], "./chunks/addSrcV");
|
||||
// saveStep(currentChunk->w[CENTER_LOC], "./chunks/addSrcW");
|
||||
// saveStep(currentChunk->u0[CENTER_LOC], "./chunks/addSrcU0");
|
||||
// saveStep(currentChunk->v0[CENTER_LOC], "./chunks/addSrcV0");
|
||||
// saveStep(currentChunk->w0[CENTER_LOC], "./chunks/addSrcW0");
|
||||
}
|
||||
//swap all vector fields
|
||||
{
|
||||
@ -98,16 +103,6 @@ void fluid_grid2_simulate(
|
||||
fluid_grid2_copyNeighborsRaw(currentChunk->chunkMask,0,3,currentChunk->w0);
|
||||
}
|
||||
}
|
||||
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/swapU");
|
||||
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/swapV");
|
||||
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/swapW");
|
||||
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/swapU0");
|
||||
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/swapV0");
|
||||
// saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/swapW0");
|
||||
// printf("after swap vecs u\n");
|
||||
// printLayer(chunks[0]->u[CENTER_LOC],targetLayer);
|
||||
// printf("after swap vecs u0\n");
|
||||
// printLayer(chunks[0]->u0[CENTER_LOC],targetLayer);
|
||||
//solve vector diffusion
|
||||
{
|
||||
for(int l = 0; l < FLUID_GRID2_VECTOR_DIFFUSE_TIMES; l++){
|
||||
@ -116,20 +111,6 @@ void fluid_grid2_simulate(
|
||||
Chunk * currentChunk = chunks[i];
|
||||
fluid_grid2_solveVectorDiffuse(currentChunk->chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,FLUID_GRID2_DIFFUSION_CONSTANT,FLUID_GRID2_VISCOSITY_CONSTANT,timestep);
|
||||
}
|
||||
// if(SAVE_STEPS){
|
||||
// sprintf(fileNameBuff, "./chunks/diffuseUStep%dx", l);
|
||||
// saveStep(chunks[0]->u[CENTER_LOC], fileNameBuff);
|
||||
// sprintf(fileNameBuff, "./chunks/diffuseUStep%dx0", l);
|
||||
// saveStep(chunks[0]->u0[CENTER_LOC], fileNameBuff);
|
||||
// sprintf(fileNameBuff, "./chunks/diffuseVStep%dx", l);
|
||||
// saveStep(chunks[0]->v[CENTER_LOC], fileNameBuff);
|
||||
// sprintf(fileNameBuff, "./chunks/diffuseVStep%dx0", l);
|
||||
// saveStep(chunks[0]->v0[CENTER_LOC], fileNameBuff);
|
||||
// sprintf(fileNameBuff, "./chunks/diffuseWStep%dx", l);
|
||||
// saveStep(chunks[0]->w[CENTER_LOC], fileNameBuff);
|
||||
// sprintf(fileNameBuff, "./chunks/diffuseWStep%dx0", l);
|
||||
// saveStep(chunks[0]->w0[CENTER_LOC], fileNameBuff);
|
||||
// }
|
||||
//update array for vectors
|
||||
for(int i = 0; i < numChunks; i++){
|
||||
Chunk * currentChunk = chunks[i];
|
||||
@ -146,38 +127,13 @@ void fluid_grid2_simulate(
|
||||
fluid_grid2_copyNeighborsRaw(currentChunk->chunkMask,0,0,currentChunk->v0);
|
||||
fluid_grid2_copyNeighborsRaw(currentChunk->chunkMask,0,0,currentChunk->w0);
|
||||
}
|
||||
// if(SAVE_STEPS){
|
||||
// sprintf(fileNameBuff, "./chunks/diffuseUStep%dxBnd", l);
|
||||
// saveStep(chunks[0]->u[CENTER_LOC], fileNameBuff);
|
||||
// sprintf(fileNameBuff, "./chunks/diffuseUStep%dx0Bnd", l);
|
||||
// saveStep(chunks[0]->u0[CENTER_LOC], fileNameBuff);
|
||||
// sprintf(fileNameBuff, "./chunks/diffuseVStep%dxBnd", l);
|
||||
// saveStep(chunks[0]->v[CENTER_LOC], fileNameBuff);
|
||||
// sprintf(fileNameBuff, "./chunks/diffuseVStep%dx0Bnd", l);
|
||||
// saveStep(chunks[0]->v0[CENTER_LOC], fileNameBuff);
|
||||
// sprintf(fileNameBuff, "./chunks/diffuseWStep%dxBnd", l);
|
||||
// saveStep(chunks[0]->w[CENTER_LOC], fileNameBuff);
|
||||
// sprintf(fileNameBuff, "./chunks/diffuseWStep%dx0Bnd", l);
|
||||
// saveStep(chunks[0]->w0[CENTER_LOC], fileNameBuff);
|
||||
// }
|
||||
}
|
||||
}
|
||||
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/diffuseU");
|
||||
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/diffuseV");
|
||||
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/diffuseW");
|
||||
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/diffuseU0");
|
||||
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/diffuseV0");
|
||||
// saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/diffuseW0");
|
||||
//solve projection
|
||||
{
|
||||
//update array for vectors
|
||||
for(int i = 0; i < numChunks; i++){
|
||||
Chunk * currentChunk = chunks[i];
|
||||
// setBoundsToNeighborsRaw(DIM,chunkMask,1,currentChunk->u);
|
||||
// setBoundsToNeighborsRaw(DIM,chunkMask,2,currentChunk->v);
|
||||
// setBoundsToNeighborsRaw(DIM,chunkMask,3,currentChunk->w);
|
||||
// setBoundsToNeighborsRaw(DIM,chunkMask,1,currentChunk->u0);
|
||||
// setBoundsToNeighborsRaw(DIM,chunkMask,2,currentChunk->v0);
|
||||
fluid_grid2_copyNeighborsRaw(currentChunk->chunkMask,0,1,currentChunk->u);
|
||||
fluid_grid2_copyNeighborsRaw(currentChunk->chunkMask,0,2,currentChunk->v);
|
||||
fluid_grid2_copyNeighborsRaw(currentChunk->chunkMask,0,3,currentChunk->w);
|
||||
@ -190,9 +146,6 @@ void fluid_grid2_simulate(
|
||||
fluid_grid2_setupProjection(currentChunk->chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,FLUID_GRID2_DIFFUSION_CONSTANT,FLUID_GRID2_VISCOSITY_CONSTANT,timestep);
|
||||
}
|
||||
|
||||
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/setupProj1Div");
|
||||
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/setupProj1P");
|
||||
|
||||
//update array for vectors
|
||||
for(int i = 0; i < numChunks; i++){
|
||||
Chunk * currentChunk = chunks[i];
|
||||
@ -202,9 +155,6 @@ void fluid_grid2_simulate(
|
||||
fluid_grid2_copyNeighborsRaw(currentChunk->chunkMask,0,0,currentChunk->v0);
|
||||
}
|
||||
|
||||
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/setupProj1DivBnd");
|
||||
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/setupProj1PBnd");
|
||||
|
||||
//samples u0, v0
|
||||
//sets u0
|
||||
//these should have just been mirrored in the above
|
||||
@ -215,23 +165,11 @@ void fluid_grid2_simulate(
|
||||
Chunk * currentChunk = chunks[i];
|
||||
fluid_grid2_solveProjection(currentChunk->chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,FLUID_GRID2_DIFFUSION_CONSTANT,FLUID_GRID2_VISCOSITY_CONSTANT,timestep);
|
||||
}
|
||||
// if(SAVE_STEPS){
|
||||
// sprintf(fileNameBuff, "./chunks/proj1Step%dx", l);
|
||||
// saveStep(chunks[0]->u0[CENTER_LOC], fileNameBuff);
|
||||
// sprintf(fileNameBuff, "./chunks/proj1Step%dx0", l);
|
||||
// saveStep(chunks[0]->v0[CENTER_LOC], fileNameBuff);
|
||||
// }
|
||||
for(int i = 0; i < numChunks; i++){
|
||||
Chunk * currentChunk = chunks[i];
|
||||
fluid_grid2_setBoundsToNeighborsRaw(currentChunk->chunkMask,0,currentChunk->u0);
|
||||
fluid_grid2_copyNeighborsRaw(currentChunk->chunkMask,0,0,currentChunk->u0);
|
||||
}
|
||||
// if(SAVE_STEPS){
|
||||
// sprintf(fileNameBuff, "./chunks/proj1Step%dxBnd", l);
|
||||
// saveStep(chunks[0]->u0[CENTER_LOC], fileNameBuff);
|
||||
// sprintf(fileNameBuff, "./chunks/proj1Step%dx0Bnd", l);
|
||||
// saveStep(chunks[0]->v0[CENTER_LOC], fileNameBuff);
|
||||
// }
|
||||
}
|
||||
//samples u,v,w,u0
|
||||
//sets u,v,w
|
||||
@ -241,10 +179,6 @@ void fluid_grid2_simulate(
|
||||
fluid_grid2_finalizeProjection(currentChunk->chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,FLUID_GRID2_DIFFUSION_CONSTANT,FLUID_GRID2_VISCOSITY_CONSTANT,timestep);
|
||||
}
|
||||
|
||||
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/finalizeProj1U");
|
||||
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/finalizeProj1V");
|
||||
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/finalizeProj1W");
|
||||
// exit(0);
|
||||
//set boundaries a final time for u,v,w
|
||||
//...
|
||||
for(int i = 0; i < numChunks; i++){
|
||||
@ -263,13 +197,6 @@ void fluid_grid2_simulate(
|
||||
fluid_grid2_copyNeighborsRaw(currentChunk->chunkMask,0,3,currentChunk->w0);
|
||||
}
|
||||
}
|
||||
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/projU");
|
||||
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/projV");
|
||||
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/projW");
|
||||
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/projU0");
|
||||
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/projV0");
|
||||
// saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/projW0");
|
||||
// exit(0);
|
||||
//swap all vector fields
|
||||
{
|
||||
//swap vector fields
|
||||
@ -304,12 +231,6 @@ void fluid_grid2_simulate(
|
||||
fluid_grid2_copyNeighborsRaw(currentChunk->chunkMask,0,3,currentChunk->w0);
|
||||
}
|
||||
}
|
||||
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/swap2U");
|
||||
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/swap2V");
|
||||
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/swap2W");
|
||||
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/swap2U0");
|
||||
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/swap2V0");
|
||||
// saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/swap2W0");
|
||||
//advect vectors across boundaries
|
||||
{
|
||||
//update border arrs
|
||||
@ -344,12 +265,6 @@ void fluid_grid2_simulate(
|
||||
fluid_grid2_copyNeighborsRaw(currentChunk->chunkMask,0,3,currentChunk->w);
|
||||
}
|
||||
}
|
||||
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/advectU");
|
||||
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/advectV");
|
||||
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/advectW");
|
||||
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/advectU0");
|
||||
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/advectV0");
|
||||
// saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/advectW0");
|
||||
//solve projection
|
||||
{
|
||||
//update array for vectors
|
||||
@ -589,4 +504,51 @@ static inline void fluid_grid2_clearArr(float ** d){
|
||||
for(int j = 0; j < DIM * DIM * DIM; j++){
|
||||
x[j] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Allocates the arrays necessary for grid2 simulation
|
||||
*/
|
||||
void fluid_grid2_allocate_arrays(){
|
||||
fluid_grid2_borderArr = (float *)calloc(1,DIM * DIM * DIM * sizeof(float));
|
||||
for(int x = 0; x < DIM; x++){
|
||||
for(int y = 0; y < DIM; y++){
|
||||
for(int z = 0; z < DIM; z++){
|
||||
if(x == 0 || x == DIM-1 || y == 0 || y == DIM-1 || z == 0 || z == DIM-1){
|
||||
fluid_grid2_borderArr[IX(x,y,z)] = 1;
|
||||
} else {
|
||||
fluid_grid2_borderArr[IX(x,y,z)] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fluid_grid2_neighborArr_d = (float *)calloc(1,DIM * DIM * DIM * sizeof(float));
|
||||
fluid_grid2_neighborArr_d0 = (float *)calloc(1,DIM * DIM * DIM * sizeof(float));
|
||||
fluid_grid2_neighborArr_u = (float *)calloc(1,DIM * DIM * DIM * sizeof(float));
|
||||
fluid_grid2_neighborArr_v = (float *)calloc(1,DIM * DIM * DIM * sizeof(float));
|
||||
fluid_grid2_neighborArr_w = (float *)calloc(1,DIM * DIM * DIM * sizeof(float));
|
||||
fluid_grid2_neighborArr_u0 = (float *)calloc(1,DIM * DIM * DIM * sizeof(float));
|
||||
fluid_grid2_neighborArr_v0 = (float *)calloc(1,DIM * DIM * DIM * sizeof(float));
|
||||
fluid_grid2_neighborArr_w0 = (float *)calloc(1,DIM * DIM * DIM * sizeof(float));
|
||||
fluid_grid2_neighborArr_bounds = (float *)calloc(1,DIM * DIM * DIM * sizeof(float));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -29,7 +29,7 @@ public class FluidAcceleratedSimulator implements ServerFluidSimulator {
|
||||
/**
|
||||
* The gravity constant
|
||||
*/
|
||||
public static final float GRAVITY_CONST = -1000;
|
||||
public static final float GRAVITY_CONST = -10f;
|
||||
|
||||
/**
|
||||
* Load fluid sim library
|
||||
|
||||
Loading…
Reference in New Issue
Block a user