first density diffusion test
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
1b36112e24
commit
a142aa6f55
@ -32,7 +32,7 @@ void fluid_grid2_addDensity(
|
|||||||
/*
|
/*
|
||||||
* A single iteration of the jacobi to solve density diffusion
|
* A single iteration of the jacobi to solve density diffusion
|
||||||
*/
|
*/
|
||||||
void fluid_grid2_solveDiffuseDensity(
|
LIBRARY_API void fluid_grid2_solveDiffuseDensity(
|
||||||
int chunk_mask,
|
int chunk_mask,
|
||||||
float ** d,
|
float ** d,
|
||||||
float ** d0,
|
float ** d0,
|
||||||
|
|||||||
@ -1,8 +1,40 @@
|
|||||||
#ifndef FLUID_GRID2_SOLVER_CONSTS_H
|
#ifndef FLUID_GRID2_SOLVER_CONSTS_H
|
||||||
#define FLUID_GRID2_SOLVER_CONSTS_H
|
#define FLUID_GRID2_SOLVER_CONSTS_H
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of times to relax most solvers
|
||||||
|
*/
|
||||||
#define FLUID_GRID2_LINEARSOLVERTIMES 20
|
#define FLUID_GRID2_LINEARSOLVERTIMES 20
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of times to relax the vector diffusion solver
|
||||||
|
*/
|
||||||
#define FLUID_GRID2_VECTOR_DIFFUSE_TIMES 20
|
#define FLUID_GRID2_VECTOR_DIFFUSE_TIMES 20
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Width of a single grid cell
|
||||||
|
*/
|
||||||
#define FLUID_GRID2_H (1)
|
#define FLUID_GRID2_H (1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Timestep to simulate by
|
||||||
|
*/
|
||||||
|
#define FLUID_GRID2_SIM_STEP 0.01f
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Really small value used for something
|
||||||
|
*/
|
||||||
|
#define FLUID_GRID2_REALLY_SMALL_VALUE 0.00001
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Diffusion constant
|
||||||
|
*/
|
||||||
|
#define FLUID_GRID2_DIFFUSION_CONSTANT 0.00001
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Viscosity constant
|
||||||
|
*/
|
||||||
|
#define FLUID_GRID2_VISCOSITY_CONSTANT 0.00001
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -16,7 +16,7 @@ void fluid_grid2_add_source(float * x, float * s, float dt);
|
|||||||
/**
|
/**
|
||||||
* Sets the bounds of this cube to those of its neighbor
|
* Sets the bounds of this cube to those of its neighbor
|
||||||
*/
|
*/
|
||||||
void fluid_grid2_setBoundsToNeighborsRaw(
|
LIBRARY_API void fluid_grid2_setBoundsToNeighborsRaw(
|
||||||
int chunk_mask,
|
int chunk_mask,
|
||||||
int vector_dir,
|
int vector_dir,
|
||||||
float ** neighborArray
|
float ** neighborArray
|
||||||
|
|||||||
@ -41,7 +41,7 @@ void fluid_grid2_addDensity(
|
|||||||
/*
|
/*
|
||||||
* A single iteration of the jacobi to solve density diffusion
|
* A single iteration of the jacobi to solve density diffusion
|
||||||
*/
|
*/
|
||||||
void fluid_grid2_solveDiffuseDensity(
|
LIBRARY_API void fluid_grid2_solveDiffuseDensity(
|
||||||
int chunk_mask,
|
int chunk_mask,
|
||||||
float ** d,
|
float ** d,
|
||||||
float ** d0,
|
float ** d0,
|
||||||
|
|||||||
@ -19,12 +19,6 @@
|
|||||||
#define SAVE_STEPS 0
|
#define SAVE_STEPS 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define FLUID_GRID2_REALLY_SMALL_VALUE 0.00001
|
|
||||||
|
|
||||||
#define FLUID_GRID2_DIFFUSION_CONSTANT 0.00001
|
|
||||||
#define FLUID_GRID2_VISCOSITY_CONSTANT 0.00001
|
|
||||||
|
|
||||||
static inline void fluid_grid2_saveStep(float * values, const char * name);
|
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_applyGravity(Chunk * currentChunk, Environment * environment);
|
||||||
static inline void fluid_grid2_clearArr(float ** d);
|
static inline void fluid_grid2_clearArr(float ** d);
|
||||||
|
|||||||
@ -652,7 +652,7 @@ void fluid_grid2_advect_velocity(uint32_t chunk_mask, int b, float ** jrd, float
|
|||||||
/**
|
/**
|
||||||
* Sets the bounds of this cube to those of its neighbor
|
* Sets the bounds of this cube to those of its neighbor
|
||||||
*/
|
*/
|
||||||
void fluid_grid2_setBoundsToNeighborsRaw(
|
LIBRARY_API void fluid_grid2_setBoundsToNeighborsRaw(
|
||||||
int chunk_mask,
|
int chunk_mask,
|
||||||
int vector_dir,
|
int vector_dir,
|
||||||
float ** neighborArray
|
float ** neighborArray
|
||||||
|
|||||||
@ -1,4 +1,36 @@
|
|||||||
|
|
||||||
|
#include "stb/stb_ds.h"
|
||||||
|
|
||||||
|
#include "fluid/queue/boundsolver.h"
|
||||||
|
#include "fluid/queue/chunkmask.h"
|
||||||
|
#include "fluid/queue/chunk.h"
|
||||||
|
#include "fluid/env/environment.h"
|
||||||
|
#include "fluid/env/utilities.h"
|
||||||
|
#include "fluid/sim/grid2/density.h"
|
||||||
|
#include "fluid/sim/grid2/solver_consts.h"
|
||||||
|
#include "fluid/sim/grid2/utilities.h"
|
||||||
|
#include "../../../util/chunk_test_utils.h"
|
||||||
|
#include "../../../util/test.h"
|
||||||
|
|
||||||
|
|
||||||
|
int fluid_sim_grid2_density_diffuse_tests_kernelx[27] = {
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
|
2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
int fluid_sim_grid2_density_diffuse_tests_kernely[27] = {
|
||||||
|
0, 0, 0, 1, 1, 1, 2, 2, 2,
|
||||||
|
0, 0, 0, 1, 1, 1, 2, 2, 2,
|
||||||
|
0, 0, 0, 1, 1, 1, 2, 2, 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
int fluid_sim_grid2_density_diffuse_tests_kernelz[27] = {
|
||||||
|
0, 1, 2, 0, 1, 2, 0, 1, 2,
|
||||||
|
0, 1, 2, 0, 1, 2, 0, 1, 2,
|
||||||
|
0, 1, 2, 0, 1, 2, 0, 1, 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -7,17 +39,70 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Testing density diffusion
|
||||||
|
*/
|
||||||
|
int fluid_sim_grid2_density_diffuse_test1(){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int fluid_sim_grid2_density_diffuse_tests(int argc, char **argv){
|
|
||||||
int rVal = 0;
|
int rVal = 0;
|
||||||
|
printf("fluid_sim_grid2_density_diffuse_test1\n");
|
||||||
|
Environment * env = fluid_environment_create();
|
||||||
|
int chunkCount = 27;
|
||||||
|
|
||||||
|
Chunk ** queue = NULL;
|
||||||
|
for(int i = 0; i < chunkCount; i++){
|
||||||
|
arrput(queue,chunk_create(
|
||||||
|
fluid_sim_grid2_density_diffuse_tests_kernelx[i],
|
||||||
|
fluid_sim_grid2_density_diffuse_tests_kernely[i],
|
||||||
|
fluid_sim_grid2_density_diffuse_tests_kernelz[i]
|
||||||
|
));
|
||||||
|
chunk_fill(queue[i],0);
|
||||||
|
}
|
||||||
|
//link neighbors
|
||||||
|
chunk_link_neighbors(queue);
|
||||||
|
fluid_solve_bounds(1,queue,env);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Chunk * currentChunk = queue[0];
|
||||||
|
currentChunk->d[CENTER_LOC][IX(2,2,2)] = MAX_FLUID_VALUE;
|
||||||
|
|
||||||
|
float * tmpArr;
|
||||||
|
for(int j = 0; j < 27; j++){
|
||||||
|
tmpArr = currentChunk->d[j];
|
||||||
|
currentChunk->d[j] = currentChunk->d0[j];
|
||||||
|
currentChunk->d0[j] = tmpArr;
|
||||||
|
}
|
||||||
|
//diffuse density
|
||||||
|
for(int l = 0; l < FLUID_GRID2_LINEARSOLVERTIMES; l++){
|
||||||
|
fluid_grid2_solveDiffuseDensity(currentChunk->chunkMask,currentChunk->d,currentChunk->d0,currentChunk->u,currentChunk->v,currentChunk->w,FLUID_GRID2_DIFFUSION_CONSTANT,FLUID_GRID2_VISCOSITY_CONSTANT,FLUID_GRID2_SIM_STEP);
|
||||||
|
fluid_grid2_setBoundsToNeighborsRaw(currentChunk->chunkMask,0,currentChunk->d);
|
||||||
|
}
|
||||||
|
//swap all density arrays
|
||||||
|
//swap vector fields
|
||||||
|
for(int j = 0; j < 27; j++){
|
||||||
|
tmpArr = currentChunk->d[j];
|
||||||
|
currentChunk->d[j] = currentChunk->d0[j];
|
||||||
|
currentChunk->d0[j] = tmpArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
//sum the result
|
||||||
|
float afterSum = chunk_queue_sum(queue);
|
||||||
|
|
||||||
|
rVal += assertEqualsFloat(afterSum,MAX_FLUID_VALUE,"Density diffuse step changed density sum! %f %f \n");
|
||||||
|
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Testing density diffusion
|
||||||
|
*/
|
||||||
|
int fluid_sim_grid2_density_diffuse_tests(int argc, char **argv){
|
||||||
|
int rVal = 0;
|
||||||
|
|
||||||
|
rVal += fluid_sim_grid2_density_diffuse_test1();
|
||||||
|
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user