From 2a753ddf53e9d6744b8cf593c7aa0d57d96a1a2c Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 11 Dec 2024 12:00:28 -0500 Subject: [PATCH] moving bounds setting around --- src/main/c/src/fluid/sim/grid2/density.c | 2 + src/main/c/src/fluid/sim/grid2/fluidsim.c | 36 --------- src/main/c/src/fluid/sim/grid2/velocity.c | 14 +++- src/test/c/fluid/sim/grid2/add_dens_tests.c | 82 +++++++++++++++++++++ 4 files changed, 96 insertions(+), 38 deletions(-) create mode 100644 src/test/c/fluid/sim/grid2/add_dens_tests.c diff --git a/src/main/c/src/fluid/sim/grid2/density.c b/src/main/c/src/fluid/sim/grid2/density.c index 17ef8f63..f6104870 100644 --- a/src/main/c/src/fluid/sim/grid2/density.c +++ b/src/main/c/src/fluid/sim/grid2/density.c @@ -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); } /** diff --git a/src/main/c/src/fluid/sim/grid2/fluidsim.c b/src/main/c/src/fluid/sim/grid2/fluidsim.c index d15f5d65..8e9aa663 100644 --- a/src/main/c/src/fluid/sim/grid2/fluidsim.c +++ b/src/main/c/src/fluid/sim/grid2/fluidsim.c @@ -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 diff --git a/src/main/c/src/fluid/sim/grid2/velocity.c b/src/main/c/src/fluid/sim/grid2/velocity.c index 2f977e91..2688b5dd 100644 --- a/src/main/c/src/fluid/sim/grid2/velocity.c +++ b/src/main/c/src/fluid/sim/grid2/velocity.c @@ -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 + +#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; +} \ No newline at end of file