debug data printing
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2024-12-19 17:01:39 -05:00
parent 67238f0648
commit 7ccf0de17b
6 changed files with 226 additions and 23 deletions

View File

@ -30,12 +30,12 @@
/** /**
* Diffusion constant * Diffusion constant
*/ */
#define FLUID_PRESSURECELL_DIFFUSION_CONSTANT 0.001f #define FLUID_PRESSURECELL_DIFFUSION_CONSTANT 0.0001f
/** /**
* Viscosity constant * Viscosity constant
*/ */
#define FLUID_PRESSURECELL_VISCOSITY_CONSTANT 0.001f #define FLUID_PRESSURECELL_VISCOSITY_CONSTANT 0.0001f
/** /**
* Amount of the residual to add to the pressure field each frame * Amount of the residual to add to the pressure field each frame
@ -85,7 +85,7 @@
/** /**
* Pressure added on recapturing fluid pushed into borders * Pressure added on recapturing fluid pushed into borders
*/ */
#define FLUID_PRESSURECELL_RECAPTURE_PRESSURE 1.0f #define FLUID_PRESSURECELL_RECAPTURE_PRESSURE 0.0f
/** /**
* Pressure of bounds * Pressure of bounds

View File

@ -9,7 +9,12 @@
/** /**
* Inverts the force applied to the border * Inverts the force applied to the border
*/ */
#define INVERT_BORDER_FORCE 1 #define INVERT_BORDER_FORCE 0
/**
* Zeroes the force applied to the border
*/
#define ZERO_BORDER_FORCE 1
/** /**
* Calculates the expected density and pressure * Calculates the expected density and pressure
@ -97,10 +102,14 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
//clear dtemp //clear dtemp
float innerTotal = 0;
for(x = 0; x < DIM; x++){ for(x = 0; x < DIM; x++){
for(y = 0; y < DIM; y++){ for(y = 0; y < DIM; y++){
for(z = 0; z < DIM; z++){ for(z = 0; z < DIM; z++){
dTemp[IX(x,y,z)] = fmax(MIN_FLUID_VALUE,dArr[IX(x,y,z)]); dTemp[IX(x,y,z)] = fmax(MIN_FLUID_VALUE,dArr[IX(x,y,z)]);
if(x > 0 && y > 0 && z > 0 && x < DIM-1 && y < DIM-1 && z < DIM-1){
innerTotal = innerTotal + dTemp[IX(x,y,z)];
}
} }
} }
} }
@ -120,6 +129,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(INVERT_BORDER_FORCE){ if(INVERT_BORDER_FORCE){
uArr[adjacentIndex] = -uArr[adjacentIndex]; uArr[adjacentIndex] = -uArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -157,6 +169,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(INVERT_BORDER_FORCE){ if(INVERT_BORDER_FORCE){
uArr[adjacentIndex] = -uArr[adjacentIndex]; uArr[adjacentIndex] = -uArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -194,6 +209,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(INVERT_BORDER_FORCE){ if(INVERT_BORDER_FORCE){
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
vArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -231,6 +249,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(INVERT_BORDER_FORCE){ if(INVERT_BORDER_FORCE){
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
vArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -268,6 +289,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(INVERT_BORDER_FORCE){ if(INVERT_BORDER_FORCE){
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -305,6 +329,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(INVERT_BORDER_FORCE){ if(INVERT_BORDER_FORCE){
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -362,6 +389,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
uArr[adjacentIndex] = -uArr[adjacentIndex]; uArr[adjacentIndex] = -uArr[adjacentIndex];
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
vArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
@ -396,6 +427,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
uArr[adjacentIndex] = -uArr[adjacentIndex]; uArr[adjacentIndex] = -uArr[adjacentIndex];
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
vArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
@ -430,6 +465,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
uArr[adjacentIndex] = -uArr[adjacentIndex]; uArr[adjacentIndex] = -uArr[adjacentIndex];
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
vArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
@ -464,6 +503,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
uArr[adjacentIndex] = -uArr[adjacentIndex]; uArr[adjacentIndex] = -uArr[adjacentIndex];
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
vArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
@ -504,6 +547,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
uArr[adjacentIndex] = -uArr[adjacentIndex]; uArr[adjacentIndex] = -uArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
@ -538,6 +585,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
uArr[adjacentIndex] = -uArr[adjacentIndex]; uArr[adjacentIndex] = -uArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
@ -572,6 +623,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
uArr[adjacentIndex] = -uArr[adjacentIndex]; uArr[adjacentIndex] = -uArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
@ -606,6 +661,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
uArr[adjacentIndex] = -uArr[adjacentIndex]; uArr[adjacentIndex] = -uArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
@ -644,6 +703,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
vArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
@ -678,6 +741,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
vArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
@ -712,6 +779,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
vArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
@ -746,6 +817,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
vArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
@ -814,6 +889,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
vArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -847,6 +927,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
vArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -879,6 +964,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
vArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -912,6 +1002,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
vArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -949,6 +1044,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
vArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -982,6 +1082,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
vArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -1014,6 +1119,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
vArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -1047,6 +1157,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
vArr[adjacentIndex] = -vArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex];
wArr[adjacentIndex] = -wArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex];
} }
if(ZERO_BORDER_FORCE){
uArr[adjacentIndex] = 0;
vArr[adjacentIndex] = 0;
wArr[adjacentIndex] = 0;
}
if(invertedForce > MIN_FLUID_VALUE){ if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
@ -1068,8 +1183,15 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
//add extra density from edges to inner part of chunk
float innerRebalanceRatio = (innerTotal + chunk->pressureCellData.recaptureDensity) / innerTotal;
for(x = 1; x < DIM-1; x++){
for(y = 1; y < DIM-1; y++){
for(z = 1; z < DIM-1; z++){
dTemp[IX(x,y,z)] = dTemp[IX(x,y,z)] * innerRebalanceRatio;
}
}
}

View File

@ -100,11 +100,11 @@ LIBRARY_API void pressurecell_approximate_pressure(Environment * environment, Ch
//there are two values that should potentially be set to here //there are two values that should potentially be set to here
//either, same pressure as voxel in normal direction if this edge is actually an edge //either, same pressure as voxel in normal direction if this edge is actually an edge
//otherwise, set to the pressure of the neighboring chunk //otherwise, set to the pressure of the neighboring chunk
pressureTemp[IX(0,x,y)] = pressureCache[IX(0,x,y)]; pressureTemp[IX(0,x,y)] = pressureCache[IX(0,x,y)];
pressureTemp[IX(DIM-1,x,y)] = pressureCache[IX(DIM-1,x,y)]; pressureTemp[IX(DIM-1,x,y)] = pressureCache[IX(DIM-1,x,y)];
pressureTemp[IX(x,0,y)] = pressureCache[IX(x,0,y)]; pressureTemp[IX(x,0,y)] = pressureCache[IX(x,0,y)];
pressureTemp[IX(x,DIM-1,y)] = pressureCache[IX(x,DIM-1,y)]; pressureTemp[IX(x,DIM-1,y)] = pressureCache[IX(x,DIM-1,y)];
pressureTemp[IX(x,y,0)] = pressureCache[IX(x,y,0)]; pressureTemp[IX(x,y,0)] = pressureCache[IX(x,y,0)];
pressureTemp[IX(x,y,DIM-1)] = pressureCache[IX(x,y,DIM-1)]; pressureTemp[IX(x,y,DIM-1)] = pressureCache[IX(x,y,DIM-1)];
// pressureTemp[IX(0,x,y)] = border[IX(0,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE; // pressureTemp[IX(0,x,y)] = border[IX(0,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE;
// pressureTemp[IX(DIM-1,x,y)] = border[IX(DIM-1,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE; // pressureTemp[IX(DIM-1,x,y)] = border[IX(DIM-1,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE;
@ -114,11 +114,11 @@ LIBRARY_API void pressurecell_approximate_pressure(Environment * environment, Ch
// pressureTemp[IX(x,y,DIM-1)] = border[IX(x,y,DIM-1)] * FLUID_PRESSURECELL_BOUND_PRESSURE; // pressureTemp[IX(x,y,DIM-1)] = border[IX(x,y,DIM-1)] * FLUID_PRESSURECELL_BOUND_PRESSURE;
//divergence borders //divergence borders
phi0[IX(0,x,y)] = divCache[IX(0,x,y)]; phi0[IX(0,x,y)] = divCache[IX(0,x,y)];
phi0[IX(DIM-1,x,y)] = divCache[IX(DIM-1,x,y)]; phi0[IX(DIM-1,x,y)] = divCache[IX(DIM-1,x,y)];
phi0[IX(x,0,y)] = divCache[IX(x,0,y)]; phi0[IX(x,0,y)] = divCache[IX(x,0,y)];
phi0[IX(x,DIM-1,y)] = divCache[IX(x,DIM-1,y)]; phi0[IX(x,DIM-1,y)] = divCache[IX(x,DIM-1,y)];
phi0[IX(x,y,0)] = divCache[IX(x,y,0)]; phi0[IX(x,y,0)] = divCache[IX(x,y,0)];
phi0[IX(x,y,DIM-1)] = divCache[IX(x,y,DIM-1)]; phi0[IX(x,y,DIM-1)] = divCache[IX(x,y,DIM-1)];
} }
} }
@ -150,11 +150,11 @@ LIBRARY_API void pressurecell_approximate_pressure(Environment * environment, Ch
// pressureTemp[IX(x,DIM-1,y)] = 0; // pressureTemp[IX(x,DIM-1,y)] = 0;
// pressureTemp[IX(x,y,0)] = 0; // pressureTemp[IX(x,y,0)] = 0;
// pressureTemp[IX(x,y,DIM-1)] = 0; // pressureTemp[IX(x,y,DIM-1)] = 0;
pressureTemp[IX(0,x,y)] = pressureTemp[IX(1,x,y)]; pressureTemp[IX(0,x,y)] = pressureTemp[IX(1,x,y)];
pressureTemp[IX(DIM-1,x,y)] = pressureTemp[IX(DIM-2,x,y)]; pressureTemp[IX(DIM-1,x,y)] = pressureTemp[IX(DIM-2,x,y)];
pressureTemp[IX(x,0,y)] = pressureTemp[IX(x,1,y)]; pressureTemp[IX(x,0,y)] = pressureTemp[IX(x,1,y)];
pressureTemp[IX(x,DIM-1,y)] = pressureTemp[IX(x,DIM-2,y)]; pressureTemp[IX(x,DIM-1,y)] = pressureTemp[IX(x,DIM-2,y)];
pressureTemp[IX(x,y,0)] = pressureTemp[IX(x,y,1)]; pressureTemp[IX(x,y,0)] = pressureTemp[IX(x,y,1)];
pressureTemp[IX(x,y,DIM-1)] = pressureTemp[IX(x,y,DIM-2)]; pressureTemp[IX(x,y,DIM-1)] = pressureTemp[IX(x,y,DIM-2)];
// pressureTemp[IX(0,x,y)] = border[IX(0,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE; // pressureTemp[IX(0,x,y)] = border[IX(0,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE;
// pressureTemp[IX(DIM-1,x,y)] = border[IX(DIM-1,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE; // pressureTemp[IX(DIM-1,x,y)] = border[IX(DIM-1,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE;

View File

@ -176,11 +176,6 @@ LIBRARY_API void fluid_pressurecell_simulate(
fluid_pressurecell_clearArr(currentChunk->u0[CENTER_LOC]); fluid_pressurecell_clearArr(currentChunk->u0[CENTER_LOC]);
fluid_pressurecell_clearArr(currentChunk->v0[CENTER_LOC]); fluid_pressurecell_clearArr(currentChunk->v0[CENTER_LOC]);
fluid_pressurecell_clearArr(currentChunk->w0[CENTER_LOC]); fluid_pressurecell_clearArr(currentChunk->w0[CENTER_LOC]);
fluid_pressurecell_clearArr(currentChunk->pressureTempCache);
fluid_pressurecell_clearArr(currentChunk->dTempCache);
fluid_pressurecell_clearArr(currentChunk->uTempCache);
fluid_pressurecell_clearArr(currentChunk->vTempCache);
fluid_pressurecell_clearArr(currentChunk->wTempCache);
} }
} }

View File

@ -45,11 +45,12 @@ public class ImGuiFluidMonitor {
ImGui.text("Broadcast Size (This Frame): " + fluidManager.getBroadcastSize()); ImGui.text("Broadcast Size (This Frame): " + fluidManager.getBroadcastSize());
ImGui.text("Normalization Ratio: " + ServerFluidChunk.getNormalizationRatio()); ImGui.text("Normalization Ratio: " + ServerFluidChunk.getNormalizationRatio());
ImGui.text("Mass: " + ServerFluidChunk.getMassCount()); ImGui.text("Mass: " + ServerFluidChunk.getMassCount());
if(fluidManager.getChunk(0, 0, 0) != null){ if(fluidManager.getChunk(0, 0, 0) != null){
ServerFluidChunk chunk = fluidManager.getChunk(0, 0, 0); ImGuiFluidMonitor.printChunkDebugData();
ImGui.text("Pressure: " + chunk.getTotalPressure());
ImGui.text("Velocity magnitude: " + chunk.getTotalVelocityMag());
} }
} }
if(ImGui.collapsingHeader("Client Data")){ if(ImGui.collapsingHeader("Client Data")){
@ -68,4 +69,78 @@ public class ImGuiFluidMonitor {
Globals.renderingEngine.getImGuiPipeline().addImGuiWindow(fluidWindow); Globals.renderingEngine.getImGuiPipeline().addImGuiWindow(fluidWindow);
} }
/**
* Prints debug data about the chunk at 0,0,0
*/
private static void printChunkDebugData(){
ServerFluidManager fluidManager = Globals.playerManager.getPlayerRealm(Globals.clientPlayer).getServerWorldData().getServerFluidManager();
ServerFluidChunk chunk = fluidManager.getChunk(0, 0, 0);
ImGui.text("Pressure: " + chunk.getTotalPressure());
ImGui.text("Velocity magnitude: " + chunk.getTotalVelocityMag());
if(ImGui.button("Capture lowest layers")){
//print density
System.out.println("Density");
for(int y = 0; y < 3; y++){
System.out.println("Layer " + y);
for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){
for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){
System.out.print(chunk.getWeight(x, y, z) + ", ");
}
System.out.println();
}
}
System.out.println("\n\n\n");
System.out.println("X Velocity");
for(int y = 0; y < 3; y++){
System.out.println("Layer " + y);
for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){
for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){
System.out.print(chunk.getVelocityX(x, y, z) + ", ");
}
System.out.println();
}
}
System.out.println("\n\n\n");
System.out.println("Y Velocity");
for(int y = 0; y < 3; y++){
System.out.println("Layer " + y);
for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){
for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){
System.out.print(chunk.getVelocityY(x, y, z) + ", ");
}
System.out.println();
}
}
System.out.println("\n\n\n");
System.out.println("Z Velocity");
for(int y = 0; y < 3; y++){
System.out.println("Layer " + y);
for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){
for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){
System.out.print(chunk.getVelocityZ(x, y, z) + ", ");
}
System.out.println();
}
}
System.out.println("\n\n\n");
System.out.println("Pressure");
for(int y = 0; y < 3; y++){
System.out.println("Layer " + y);
for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){
for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){
System.out.print(chunk.getPressure(x, y, z) + ", ");
}
System.out.println();
}
}
System.out.println("\n\n\n");
}
}
} }

View File

@ -515,6 +515,17 @@ public class ServerFluidChunk {
pressureCache.put(this.IX(x,y,z),pressure); pressureCache.put(this.IX(x,y,z),pressure);
} }
/**
* Gets the pressure at a point
* @param x The x coordinate
* @param y The y coordinate
* @param z The z coordinate
* @return The pressure
*/
public float getPressure(int x, int y, int z){
return pressureCache.get(this.IX(x,y,z));
}
/** /**
* Gets the inddex into the buffer * Gets the inddex into the buffer
* @param x The x position * @param x The x position