moving bounds setting around
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
5f565c457d
commit
2a753ddf53
@ -208,6 +208,8 @@ LIBRARY_API void fluid_grid2_advectDensity(float ** d, float ** d0, float ** ur,
|
||||
}
|
||||
}
|
||||
}
|
||||
//set bounds
|
||||
fluid_grid2_set_bounds(0,center_d);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -86,28 +86,13 @@ LIBRARY_API void fluid_grid2_simulate(
|
||||
//setup projection
|
||||
fluid_grid2_setupProjection(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,timestep);
|
||||
|
||||
//update array for vectors
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_U,currentChunk->u[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_V,currentChunk->v[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_NO_DIR,currentChunk->u0[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_NO_DIR,currentChunk->v0[CENTER_LOC]);
|
||||
|
||||
//
|
||||
//Perform main projection solver
|
||||
fluid_grid2_solveProjection(currentChunk->u0,currentChunk->v0,timestep);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_NO_DIR,currentChunk->u0[CENTER_LOC]);
|
||||
|
||||
//Finalize projection
|
||||
fluid_grid2_finalizeProjection(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,timestep);
|
||||
|
||||
//set boundaries for u,v,w
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_U,currentChunk->u[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_V,currentChunk->v[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_W,currentChunk->w[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_U,currentChunk->u0[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_V,currentChunk->v0[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_W,currentChunk->w0[CENTER_LOC]);
|
||||
|
||||
//swap all vector fields
|
||||
fluid_grid2_flip_arrays(currentChunk->u,currentChunk->u0);
|
||||
fluid_grid2_flip_arrays(currentChunk->v,currentChunk->v0);
|
||||
@ -115,31 +100,13 @@ LIBRARY_API void fluid_grid2_simulate(
|
||||
|
||||
//advect
|
||||
fluid_grid2_advectVectors(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,timestep);
|
||||
//update neighbor arr
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_U,currentChunk->u[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_V,currentChunk->v[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_W,currentChunk->w[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_U,currentChunk->u0[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_V,currentChunk->v0[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_W,currentChunk->w0[CENTER_LOC]);
|
||||
|
||||
//setup projection
|
||||
fluid_grid2_setupProjection(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,timestep);
|
||||
//update array for vectors
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_U,currentChunk->u0[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_V,currentChunk->v0[CENTER_LOC]);
|
||||
//Perform main projection solver
|
||||
fluid_grid2_solveProjection(currentChunk->u0,currentChunk->v0,timestep);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_NO_DIR,currentChunk->u0[CENTER_LOC]);
|
||||
//Finalize projection
|
||||
fluid_grid2_finalizeProjection(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,timestep);
|
||||
//set boundaries for u,v,w
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_U,currentChunk->u[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_V,currentChunk->v[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_W,currentChunk->w[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_U,currentChunk->u0[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_V,currentChunk->v0[CENTER_LOC]);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_W,currentChunk->w0[CENTER_LOC]);
|
||||
}
|
||||
|
||||
|
||||
@ -169,13 +136,10 @@ LIBRARY_API void fluid_grid2_simulate(
|
||||
fluid_grid2_addDensity(environment,currentChunk->d,currentChunk->d0,timestep);
|
||||
|
||||
//swap all density arrays
|
||||
//swap vector fields
|
||||
fluid_grid2_flip_arrays(currentChunk->d,currentChunk->d0);
|
||||
//diffuse density
|
||||
fluid_grid2_solveDiffuseDensity(currentChunk->d,currentChunk->d0,timestep);
|
||||
fluid_grid2_set_bounds(0,currentChunk->d[CENTER_LOC]);
|
||||
//swap all density arrays
|
||||
//swap vector fields
|
||||
fluid_grid2_flip_arrays(currentChunk->d,currentChunk->d0);
|
||||
|
||||
//advect density
|
||||
|
||||
@ -153,6 +153,8 @@ LIBRARY_API void fluid_grid2_setupProjection(
|
||||
|
||||
}
|
||||
}
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_NO_DIR,p);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_NO_DIR,div);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -214,8 +216,8 @@ LIBRARY_API void fluid_grid2_finalizeProjection(
|
||||
float * p = GET_ARR_RAW(jru0,CENTER_LOC);
|
||||
float * div = GET_ARR_RAW(jrv0,CENTER_LOC);
|
||||
|
||||
for ( k=1 ; k<DIM-1 ; k++ ) {
|
||||
for ( j=1 ; j<DIM-1 ; j++ ) {
|
||||
for(k=1; k<DIM-1; k++){
|
||||
for(j=1; j<DIM-1; j++){
|
||||
//
|
||||
//v
|
||||
//
|
||||
@ -269,6 +271,10 @@ LIBRARY_API void fluid_grid2_finalizeProjection(
|
||||
_mm256_storeu_ps(&w[IX(9,j,k)],vector);
|
||||
}
|
||||
}
|
||||
//set bounds
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_U,u);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_V,v);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_W,w);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -437,4 +443,8 @@ void fluid_grid2_advect_velocity(int b, float ** jrd, float ** jrd0, float * u,
|
||||
}
|
||||
}
|
||||
}
|
||||
//set bounds
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_U,u);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_V,v);
|
||||
fluid_grid2_set_bounds(FLUID_GRID2_BOUND_DIR_W,w);
|
||||
}
|
||||
|
||||
82
src/test/c/fluid/sim/grid2/add_dens_tests.c
Normal file
82
src/test/c/fluid/sim/grid2/add_dens_tests.c
Normal file
@ -0,0 +1,82 @@
|
||||
#include <math.h>
|
||||
|
||||
#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/grid2.h"
|
||||
#include "fluid/sim/grid2/solver_consts.h"
|
||||
#include "fluid/sim/grid2/utilities.h"
|
||||
#include "fluid/sim/grid2/velocity.h"
|
||||
#include "math/ode/multigrid.h"
|
||||
#include "../../../util/chunk_test_utils.h"
|
||||
#include "../../../util/test.h"
|
||||
|
||||
/**
|
||||
* Center of the advection cell
|
||||
*/
|
||||
#define FLUID_GRID2_PROJECTION_CELL_CENTER 24
|
||||
|
||||
/**
|
||||
* Error margin for tests
|
||||
*/
|
||||
#define FLUID_GRID2_PROJECTION_ERROR_MARGIN 0.00001f
|
||||
|
||||
/**
|
||||
* Testing full sim routine
|
||||
*/
|
||||
int fluid_sim_grid2_add_dens_test1(){
|
||||
printf("fluid_sim_grid2_add_dens_test1\n");
|
||||
int rVal = 0;
|
||||
Environment * env = fluid_environment_create();
|
||||
Chunk ** queue = NULL;
|
||||
queue = createChunkGrid(env,3,3,3);
|
||||
|
||||
|
||||
|
||||
//setup chunk values
|
||||
Chunk * currentChunk = queue[0];
|
||||
float beforeSum = chunk_queue_sum_density(queue);
|
||||
|
||||
//actually simulate
|
||||
int frameCount = 50;
|
||||
int additionFrameCutoff = 10;
|
||||
for(int frame = 0; frame < frameCount; frame++){
|
||||
if(frame < additionFrameCutoff){
|
||||
queue[0]->d0[CENTER_LOC][IX(5,5,5)] = MAX_FLUID_VALUE;
|
||||
}
|
||||
fluid_grid2_simulate(3*3*3,queue,env,FLUID_GRID2_SIM_STEP);
|
||||
printf("Existing sum: %lf\n", env->state.existingDensity);
|
||||
printf("New density: %lf\n", env->state.newDensity);
|
||||
printf("Adjustment Ratio: %f\n", env->state.normalizationRatio);
|
||||
float afterSum = chunk_queue_sum_density(queue);
|
||||
printf("AFter transform sum: %f\n",afterSum);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
//test the result
|
||||
float afterSum = chunk_queue_sum_density(queue);
|
||||
if(fabs(beforeSum - afterSum) > FLUID_GRID2_PROJECTION_ERROR_MARGIN){
|
||||
rVal += assertEqualsFloat(beforeSum,afterSum,"Advection changed density! %f %f \n");
|
||||
}
|
||||
|
||||
return rVal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Testing full sim routines
|
||||
*/
|
||||
int fluid_sim_grid2_add_dens_tests(int argc, char **argv){
|
||||
int rVal = 0;
|
||||
|
||||
solver_multigrid_allocate();
|
||||
fluid_grid2_allocate_arrays();
|
||||
|
||||
// rVal += fluid_sim_grid2_add_dens_test1();
|
||||
|
||||
return rVal;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user