identify negative density bug

This commit is contained in:
austin 2024-12-18 16:19:52 -05:00
parent 10c7a6c0c0
commit 4fa843b967

View File

@ -46,6 +46,15 @@ LIBRARY_API void fluid_pressurecell_normalize_chunk(Environment * env, Chunk * c
} else { } else {
if(expected > 0.001f){ if(expected > 0.001f){
printf("We've managed to completely delete all density! (expected: %f) \n", expected); printf("We've managed to completely delete all density! (expected: %f) \n", expected);
sum = 0;
for(x = 1; x < DIM-1; x++){
for(y = 1; y < DIM-1; y++){
for(z = 1; z < DIM-1; z++){
sum = sum + chunk->dTempCache[IX(x,y,z)];
}
}
}
printf("dTempCache sum: %lf \n", sum);
} }
chunk->pressureCellData.normalizationRatio = 1.0f; chunk->pressureCellData.normalizationRatio = 1.0f;
} }
@ -77,20 +86,25 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
int ghostIndex, adjacentIndex; int ghostIndex, adjacentIndex;
float overdraw, estimatedLoss, invertedForce; float overdraw, estimatedLoss, invertedForce;
int neighbor; int neighbor;
//clear neighbor outgoing values //clear neighbor outgoing values
for(int i = 0; i < 9; i++){ for(int i = 0; i < 9; i++){
chunk->pressureCellData.outgoingDensity[i] = 0; chunk->pressureCellData.outgoingDensity[i] = 0;
chunk->pressureCellData.outgoingPressure[i] = 0; chunk->pressureCellData.outgoingPressure[i] = 0;
} }
//clear dtemp //clear dtemp
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)] = dArr[IX(x,y,z)]; dTemp[IX(x,y,z)] = fmax(MIN_FLUID_VALUE,dArr[IX(x,y,z)]);
} }
} }
} }
//check +x plane //check +x plane
neighbor = CK(2,1,1); neighbor = CK(2,1,1);
if(chunk->d[neighbor] == NULL){ if(chunk->d[neighbor] == NULL){
@ -98,8 +112,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(y = 1; y < DIM-1; y++){ for(y = 1; y < DIM-1; y++){
ghostIndex = IX(DIM-1,x,y); ghostIndex = IX(DIM-1,x,y);
adjacentIndex = IX(DIM-2,x,y); adjacentIndex = IX(DIM-2,x,y);
if(uArr[adjacentIndex] > 0 && dArr[adjacentIndex] > 0){ if(uArr[adjacentIndex] > 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = 1.0f - fabs(uArr[adjacentIndex]); invertedForce = 1.0f - fabs(uArr[adjacentIndex]);
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -111,6 +126,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// for(y = 2; y < DIM-2; y++){ // for(y = 2; y < DIM-2; y++){
@ -122,6 +138,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
// } // }
// } // }
} }
//check -x plane //check -x plane
neighbor = CK(0,1,1); neighbor = CK(0,1,1);
if(chunk->d[neighbor] == NULL){ if(chunk->d[neighbor] == NULL){
@ -129,8 +146,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(y = 1; y < DIM-1; y++){ for(y = 1; y < DIM-1; y++){
ghostIndex = IX(0,x,y); ghostIndex = IX(0,x,y);
adjacentIndex = IX(1,x,y); adjacentIndex = IX(1,x,y);
if(uArr[adjacentIndex] < 0 && dArr[adjacentIndex] > 0){ if(uArr[adjacentIndex] < 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = 1.0f - fabs(uArr[adjacentIndex]); invertedForce = 1.0f - fabs(uArr[adjacentIndex]);
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -142,6 +160,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// for(y = 2; y < DIM-2; y++){ // for(y = 2; y < DIM-2; y++){
@ -161,8 +180,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(y = 1; y < DIM-1; y++){ for(y = 1; y < DIM-1; y++){
ghostIndex = IX(x,DIM-1,y); ghostIndex = IX(x,DIM-1,y);
adjacentIndex = IX(x,DIM-2,y); adjacentIndex = IX(x,DIM-2,y);
if(vArr[adjacentIndex] > 0 && dArr[adjacentIndex] > 0){ if(vArr[adjacentIndex] > 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = 1.0f - fabs(vArr[adjacentIndex]); invertedForce = 1.0f - fabs(vArr[adjacentIndex]);
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -174,6 +194,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// for(y = 2; y < DIM-2; y++){ // for(y = 2; y < DIM-2; y++){
@ -185,6 +206,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
// } // }
// } // }
} }
//check -y plane //check -y plane
neighbor = CK(1,0,1); neighbor = CK(1,0,1);
if(chunk->d[neighbor] == NULL){ if(chunk->d[neighbor] == NULL){
@ -192,8 +214,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(y = 1; y < DIM-1; y++){ for(y = 1; y < DIM-1; y++){
ghostIndex = IX(x,0,y); ghostIndex = IX(x,0,y);
adjacentIndex = IX(x,1,y); adjacentIndex = IX(x,1,y);
if(vArr[adjacentIndex] < 0 && dArr[adjacentIndex] > 0){ if(vArr[adjacentIndex] < 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = 1.0f - fabs(vArr[adjacentIndex]); invertedForce = 1.0f - fabs(vArr[adjacentIndex]);
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -205,6 +228,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// for(y = 2; y < DIM-2; y++){ // for(y = 2; y < DIM-2; y++){
@ -224,8 +248,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(y = 1; y < DIM-1; y++){ for(y = 1; y < DIM-1; y++){
ghostIndex = IX(x,y,DIM-1); ghostIndex = IX(x,y,DIM-1);
adjacentIndex = IX(x,y,DIM-2); adjacentIndex = IX(x,y,DIM-2);
if(wArr[adjacentIndex] > 0 && dArr[adjacentIndex] > 0){ if(wArr[adjacentIndex] > 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = 1.0f - fabs(wArr[adjacentIndex]); invertedForce = 1.0f - fabs(wArr[adjacentIndex]);
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -237,6 +262,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// for(y = 2; y < DIM-2; y++){ // for(y = 2; y < DIM-2; y++){
@ -248,6 +274,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
// } // }
// } // }
} }
//check -z plane //check -z plane
neighbor = CK(1,1,0); neighbor = CK(1,1,0);
if(chunk->d[neighbor] == NULL){ if(chunk->d[neighbor] == NULL){
@ -255,8 +282,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(y = 1; y < DIM-1; y++){ for(y = 1; y < DIM-1; y++){
ghostIndex = IX(x,y,0); ghostIndex = IX(x,y,0);
adjacentIndex = IX(x,y,1); adjacentIndex = IX(x,y,1);
if(wArr[adjacentIndex] < 0 && dArr[adjacentIndex] > 0){ if(wArr[adjacentIndex] < 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = 1.0f - fabs(wArr[adjacentIndex]); invertedForce = 1.0f - fabs(wArr[adjacentIndex]);
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -268,6 +296,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// for(y = 2; y < DIM-2; y++){ // for(y = 2; y < DIM-2; y++){
@ -306,8 +335,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(x = 1; x < DIM-1; x++){ for(x = 1; x < DIM-1; x++){
ghostIndex = IX(0,0,x); ghostIndex = IX(0,0,x);
adjacentIndex = IX(1,1,x); adjacentIndex = IX(1,1,x);
if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] < 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -318,6 +348,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// ghostIndex = IX(0,0,x); // ghostIndex = IX(0,0,x);
@ -334,8 +365,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(x = 1; x < DIM-1; x++){ for(x = 1; x < DIM-1; x++){
ghostIndex = IX(0,DIM-1,x); ghostIndex = IX(0,DIM-1,x);
adjacentIndex = IX(1,DIM-2,x); adjacentIndex = IX(1,DIM-2,x);
if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] > 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -346,6 +378,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// ghostIndex = IX(0,DIM-1,x); // ghostIndex = IX(0,DIM-1,x);
@ -362,8 +395,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(x = 1; x < DIM-1; x++){ for(x = 1; x < DIM-1; x++){
ghostIndex = IX(DIM-1,0,x); ghostIndex = IX(DIM-1,0,x);
adjacentIndex = IX(DIM-2,1,x); adjacentIndex = IX(DIM-2,1,x);
if((uArr[adjacentIndex] > 0 && vArr[adjacentIndex] < 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] > 0 && vArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -374,6 +408,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// ghostIndex = IX(DIM-1,0,x); // ghostIndex = IX(DIM-1,0,x);
@ -390,8 +425,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(x = 1; x < DIM-1; x++){ for(x = 1; x < DIM-1; x++){
ghostIndex = IX(DIM-1,DIM-1,x); ghostIndex = IX(DIM-1,DIM-1,x);
adjacentIndex = IX(DIM-2,DIM-2,x); adjacentIndex = IX(DIM-2,DIM-2,x);
if((uArr[adjacentIndex] > 0 && vArr[adjacentIndex] > 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] > 0 && vArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -402,6 +438,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// ghostIndex = IX(DIM-1,DIM-1,x); // ghostIndex = IX(DIM-1,DIM-1,x);
@ -424,8 +461,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(x = 1; x < DIM-1; x++){ for(x = 1; x < DIM-1; x++){
ghostIndex = IX(0,x,0); ghostIndex = IX(0,x,0);
adjacentIndex = IX(1,x,1); adjacentIndex = IX(1,x,1);
if((uArr[adjacentIndex] < 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] < 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -436,6 +474,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// ghostIndex = IX(0,x,0); // ghostIndex = IX(0,x,0);
@ -452,8 +491,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(x = 1; x < DIM-1; x++){ for(x = 1; x < DIM-1; x++){
ghostIndex = IX(0,x,DIM-1); ghostIndex = IX(0,x,DIM-1);
adjacentIndex = IX(1,x,DIM-2); adjacentIndex = IX(1,x,DIM-2);
if((uArr[adjacentIndex] < 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] < 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -464,6 +504,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// ghostIndex = IX(0,x,DIM-1); // ghostIndex = IX(0,x,DIM-1);
@ -480,8 +521,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(x = 1; x < DIM-1; x++){ for(x = 1; x < DIM-1; x++){
ghostIndex = IX(DIM-1,x,0); ghostIndex = IX(DIM-1,x,0);
adjacentIndex = IX(DIM-2,x,1); adjacentIndex = IX(DIM-2,x,1);
if((uArr[adjacentIndex] > 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] > 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -492,6 +534,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// ghostIndex = IX(DIM-1,x,0); // ghostIndex = IX(DIM-1,x,0);
@ -508,8 +551,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(x = 1; x < DIM-1; x++){ for(x = 1; x < DIM-1; x++){
ghostIndex = IX(DIM-1,x,DIM-1); ghostIndex = IX(DIM-1,x,DIM-1);
adjacentIndex = IX(DIM-2,x,DIM-2); adjacentIndex = IX(DIM-2,x,DIM-2);
if((uArr[adjacentIndex] > 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] > 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -520,6 +564,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// ghostIndex = IX(DIM-1,x,DIM-1); // ghostIndex = IX(DIM-1,x,DIM-1);
@ -540,8 +585,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(x = 1; x < DIM-1; x++){ for(x = 1; x < DIM-1; x++){
ghostIndex = IX(x,0,0); ghostIndex = IX(x,0,0);
adjacentIndex = IX(x,1,1); adjacentIndex = IX(x,1,1);
if((vArr[adjacentIndex] < 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > 0){ if((vArr[adjacentIndex] < 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -552,6 +598,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// ghostIndex = IX(x,0,0); // ghostIndex = IX(x,0,0);
@ -568,8 +615,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(x = 1; x < DIM-1; x++){ for(x = 1; x < DIM-1; x++){
ghostIndex = IX(x,0,DIM-1); ghostIndex = IX(x,0,DIM-1);
adjacentIndex = IX(x,1,DIM-2); adjacentIndex = IX(x,1,DIM-2);
if((vArr[adjacentIndex] < 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > 0){ if((vArr[adjacentIndex] < 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -580,6 +628,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// ghostIndex = IX(x,0,DIM-1); // ghostIndex = IX(x,0,DIM-1);
@ -596,8 +645,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(x = 1; x < DIM-1; x++){ for(x = 1; x < DIM-1; x++){
ghostIndex = IX(x,DIM-1,0); ghostIndex = IX(x,DIM-1,0);
adjacentIndex = IX(x,DIM-2,1); adjacentIndex = IX(x,DIM-2,1);
if((vArr[adjacentIndex] > 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > 0){ if((vArr[adjacentIndex] > 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -608,6 +658,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// ghostIndex = IX(x,DIM-1,0); // ghostIndex = IX(x,DIM-1,0);
@ -624,8 +675,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
for(x = 1; x < DIM-1; x++){ for(x = 1; x < DIM-1; x++){
ghostIndex = IX(x,DIM-1,DIM-1); ghostIndex = IX(x,DIM-1,DIM-1);
adjacentIndex = IX(x,DIM-2,DIM-2); adjacentIndex = IX(x,DIM-2,DIM-2);
if((vArr[adjacentIndex] > 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > 0){ if((vArr[adjacentIndex] > 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -636,6 +688,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
} }
} }
} }
}
} else { } else {
// for(x = 2; x < DIM-2; x++){ // for(x = 2; x < DIM-2; x++){
// ghostIndex = IX(x,DIM-1,DIM-1); // ghostIndex = IX(x,DIM-1,DIM-1);
@ -685,8 +738,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(chunk->d[neighbor] == NULL){ if(chunk->d[neighbor] == NULL){
ghostIndex = IX(0,0,0); ghostIndex = IX(0,0,0);
adjacentIndex = IX(1,1,1); adjacentIndex = IX(1,1,1);
if((uArr[adjacentIndex] < 0 || vArr[adjacentIndex] < 0 || wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] < 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -696,6 +750,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
dTemp[adjacentIndex] = MAX_FLUID_VALUE; dTemp[adjacentIndex] = MAX_FLUID_VALUE;
} }
} }
}
} else { } else {
// ghostIndex = IX(0,0,0); // ghostIndex = IX(0,0,0);
// adjacentIndex = IX(1,1,1); // adjacentIndex = IX(1,1,1);
@ -711,8 +766,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(chunk->d[neighbor] == NULL){ if(chunk->d[neighbor] == NULL){
ghostIndex = IX(0,DIM-1,0); ghostIndex = IX(0,DIM-1,0);
adjacentIndex = IX(1,DIM-2,1); adjacentIndex = IX(1,DIM-2,1);
if((uArr[adjacentIndex] < 0 || vArr[adjacentIndex] > 0 || wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] > 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -722,6 +778,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
dTemp[adjacentIndex] = MAX_FLUID_VALUE; dTemp[adjacentIndex] = MAX_FLUID_VALUE;
} }
} }
}
} else { } else {
// ghostIndex = IX(0,DIM-1,0); // ghostIndex = IX(0,DIM-1,0);
// adjacentIndex = IX(1,DIM-2,1); // adjacentIndex = IX(1,DIM-2,1);
@ -736,8 +793,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(chunk->d[neighbor] == NULL){ if(chunk->d[neighbor] == NULL){
ghostIndex = IX(DIM-1,0,0); ghostIndex = IX(DIM-1,0,0);
adjacentIndex = IX(DIM-2,1,1); adjacentIndex = IX(DIM-2,1,1);
if((uArr[adjacentIndex] > 0 || vArr[adjacentIndex] < 0 || wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] > 0 && vArr[adjacentIndex] < 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -747,6 +805,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
dTemp[adjacentIndex] = MAX_FLUID_VALUE; dTemp[adjacentIndex] = MAX_FLUID_VALUE;
} }
} }
}
} else { } else {
// ghostIndex = IX(DIM-1,0,0); // ghostIndex = IX(DIM-1,0,0);
// adjacentIndex = IX(DIM-2,1,1); // adjacentIndex = IX(DIM-2,1,1);
@ -762,8 +821,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(chunk->d[neighbor] == NULL){ if(chunk->d[neighbor] == NULL){
ghostIndex = IX(DIM-1,DIM-1,0); ghostIndex = IX(DIM-1,DIM-1,0);
adjacentIndex = IX(DIM-2,DIM-2,1); adjacentIndex = IX(DIM-2,DIM-2,1);
if((uArr[adjacentIndex] > 0 || vArr[adjacentIndex] > 0 || wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] > 0 && vArr[adjacentIndex] > 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -773,6 +833,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
dTemp[adjacentIndex] = MAX_FLUID_VALUE; dTemp[adjacentIndex] = MAX_FLUID_VALUE;
} }
} }
}
} else { } else {
// ghostIndex = IX(DIM-1,DIM-1,0); // ghostIndex = IX(DIM-1,DIM-1,0);
// adjacentIndex = IX(DIM-2,DIM-2,1); // adjacentIndex = IX(DIM-2,DIM-2,1);
@ -792,8 +853,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(chunk->d[neighbor] == NULL){ if(chunk->d[neighbor] == NULL){
ghostIndex = IX(0,0,DIM-1); ghostIndex = IX(0,0,DIM-1);
adjacentIndex = IX(1,1,DIM-2); adjacentIndex = IX(1,1,DIM-2);
if((uArr[adjacentIndex] < 0 || vArr[adjacentIndex] < 0 || wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] < 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -803,6 +865,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
dTemp[adjacentIndex] = MAX_FLUID_VALUE; dTemp[adjacentIndex] = MAX_FLUID_VALUE;
} }
} }
}
} else { } else {
// ghostIndex = IX(0,0,DIM-1); // ghostIndex = IX(0,0,DIM-1);
// adjacentIndex = IX(1,1,DIM-2); // adjacentIndex = IX(1,1,DIM-2);
@ -818,8 +881,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(chunk->d[neighbor] == NULL){ if(chunk->d[neighbor] == NULL){
ghostIndex = IX(0,DIM-1,DIM-1); ghostIndex = IX(0,DIM-1,DIM-1);
adjacentIndex = IX(1,DIM-2,DIM-2); adjacentIndex = IX(1,DIM-2,DIM-2);
if((uArr[adjacentIndex] < 0 || vArr[adjacentIndex] > 0 || wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] > 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -829,6 +893,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
dTemp[adjacentIndex] = MAX_FLUID_VALUE; dTemp[adjacentIndex] = MAX_FLUID_VALUE;
} }
} }
}
} else { } else {
// ghostIndex = IX(0,DIM-1,DIM-1); // ghostIndex = IX(0,DIM-1,DIM-1);
// adjacentIndex = IX(1,DIM-2,DIM-2); // adjacentIndex = IX(1,DIM-2,DIM-2);
@ -843,8 +908,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(chunk->d[neighbor] == NULL){ if(chunk->d[neighbor] == NULL){
ghostIndex = IX(DIM-1,0,DIM-1); ghostIndex = IX(DIM-1,0,DIM-1);
adjacentIndex = IX(DIM-2,1,DIM-2); adjacentIndex = IX(DIM-2,1,DIM-2);
if((uArr[adjacentIndex] > 0 || vArr[adjacentIndex] < 0 || wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] > 0 && vArr[adjacentIndex] < 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -854,6 +920,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
dTemp[adjacentIndex] = MAX_FLUID_VALUE; dTemp[adjacentIndex] = MAX_FLUID_VALUE;
} }
} }
}
} else { } else {
// ghostIndex = IX(DIM-1,0,DIM-1); // ghostIndex = IX(DIM-1,0,DIM-1);
// adjacentIndex = IX(DIM-2,1,DIM-2); // adjacentIndex = IX(DIM-2,1,DIM-2);
@ -869,8 +936,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
if(chunk->d[neighbor] == NULL){ if(chunk->d[neighbor] == NULL){
ghostIndex = IX(DIM-1,DIM-1,DIM-1); ghostIndex = IX(DIM-1,DIM-1,DIM-1);
adjacentIndex = IX(DIM-2,DIM-2,DIM-2); adjacentIndex = IX(DIM-2,DIM-2,DIM-2);
if((uArr[adjacentIndex] > 0 || vArr[adjacentIndex] > 0 || wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > 0){ if((uArr[adjacentIndex] > 0 && vArr[adjacentIndex] > 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){
invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex])); invertedForce = (1.0f - fabs(uArr[adjacentIndex])) * (1.0f - fabs(vArr[adjacentIndex])) * (1.0f - fabs(wArr[adjacentIndex]));
if(invertedForce > MIN_FLUID_VALUE){
estimatedLoss = dArr[adjacentIndex] / invertedForce; estimatedLoss = dArr[adjacentIndex] / invertedForce;
dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss;
overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE; overdraw = dTemp[adjacentIndex] - MAX_FLUID_VALUE;
@ -880,6 +948,7 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk *
dTemp[adjacentIndex] = MAX_FLUID_VALUE; dTemp[adjacentIndex] = MAX_FLUID_VALUE;
} }
} }
}
} else { } else {
// ghostIndex = IX(DIM-1,DIM-1,DIM-1); // ghostIndex = IX(DIM-1,DIM-1,DIM-1);
// adjacentIndex = IX(DIM-2,DIM-2,DIM-2); // adjacentIndex = IX(DIM-2,DIM-2,DIM-2);