work on pressurecell
	
		
			
	
		
	
	
		
	
		
			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
							
								
									efb37b1618
								
							
						
					
					
						commit
						913962c7f0
					
				| @ -10,7 +10,7 @@ | |||||||
| /**
 | /**
 | ||||||
|  * Force of gravity in unit tests |  * Force of gravity in unit tests | ||||||
|  */ |  */ | ||||||
| #define FLUID_PRESSURECELL_GRAVITY 1.0f | #define FLUID_PRESSURECELL_GRAVITY -100.0f | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Spacing of cells |  * Spacing of cells | ||||||
| @ -47,6 +47,11 @@ | |||||||
|  */ |  */ | ||||||
| #define FLUID_PRESSURECELL_DIV_PRESSURE_CONST 5.0f | #define FLUID_PRESSURECELL_DIV_PRESSURE_CONST 5.0f | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Set to 1 to clamp small density values to 0 | ||||||
|  |  */ | ||||||
|  | #define FLUID_PRESSURECELL_CLAMP_MIN_DENSITY 0 | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Cutoff after which density is clamped to zero while diffusing |  * Cutoff after which density is clamped to zero while diffusing | ||||||
|  */ |  */ | ||||||
| @ -75,12 +80,17 @@ | |||||||
| /**
 | /**
 | ||||||
|  * Percentage of presure to keep from last frame |  * Percentage of presure to keep from last frame | ||||||
|  */ |  */ | ||||||
| #define FLUID_PRESSURECELL_PRESSURE_BACKDOWN_FACTOR 0.5f | #define FLUID_PRESSURECELL_PRESSURE_BACKDOWN_FACTOR 1.0f | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * 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 1.0f | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Pressure of bounds | ||||||
|  |  */ | ||||||
|  | #define FLUID_PRESSURECELL_BOUND_PRESSURE FLUID_PRESSURECELL_MAX_PRESSURE | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
| @ -7,13 +7,19 @@ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Define as 1 to source values from surrounding chunks | ||||||
|  |  */ | ||||||
|  | #define USE_BOUNDS 1 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | ||||||
|     int i, j; |     int i, j; | ||||||
|     int neighborIndex; |     int neighborIndex; | ||||||
|     //x+ face
 |     //x+ face
 | ||||||
|     neighborIndex = CK(2,1,1); |     neighborIndex = CK(2,1,1); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             for(j = 1; j < DIM-1; j++){ |             for(j = 1; j < DIM-1; j++){ | ||||||
|                 arrays[CENTER_LOC][IX(DIM-1,     i,     j)] = arrays[neighborIndex][IX(     1,     i,     j)]; |                 arrays[CENTER_LOC][IX(DIM-1,     i,     j)] = arrays[neighborIndex][IX(     1,     i,     j)]; | ||||||
| @ -29,7 +35,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x- face
 |     //x- face
 | ||||||
|     neighborIndex = CK(0,1,1); |     neighborIndex = CK(0,1,1); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             for(j = 1; j < DIM-1; j++){ |             for(j = 1; j < DIM-1; j++){ | ||||||
|                 arrays[CENTER_LOC][IX(0,     i,     j)] = arrays[neighborIndex][IX(DIM-2,     i,     j)]; |                 arrays[CENTER_LOC][IX(0,     i,     j)] = arrays[neighborIndex][IX(DIM-2,     i,     j)]; | ||||||
| @ -45,7 +51,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //y+ face
 |     //y+ face
 | ||||||
|     neighborIndex = CK(1,2,1); |     neighborIndex = CK(1,2,1); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             for(j = 1; j < DIM-1; j++){ |             for(j = 1; j < DIM-1; j++){ | ||||||
|                 arrays[CENTER_LOC][IX(    i, DIM-1,     j)] = arrays[neighborIndex][IX(     i,     1,     j)]; |                 arrays[CENTER_LOC][IX(    i, DIM-1,     j)] = arrays[neighborIndex][IX(     i,     1,     j)]; | ||||||
| @ -61,7 +67,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //y- face
 |     //y- face
 | ||||||
|     neighborIndex = CK(1,0,1); |     neighborIndex = CK(1,0,1); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             for(j = 1; j < DIM-1; j++){ |             for(j = 1; j < DIM-1; j++){ | ||||||
|                 arrays[CENTER_LOC][IX(i,     0,     j)] = arrays[neighborIndex][IX(     i,     DIM-2,     j)]; |                 arrays[CENTER_LOC][IX(i,     0,     j)] = arrays[neighborIndex][IX(     i,     DIM-2,     j)]; | ||||||
| @ -77,7 +83,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //z+ face
 |     //z+ face
 | ||||||
|     neighborIndex = CK(1,1,2); |     neighborIndex = CK(1,1,2); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             for(j = 1; j < DIM-1; j++){ |             for(j = 1; j < DIM-1; j++){ | ||||||
|                 arrays[CENTER_LOC][IX(    i,     j, DIM-1)] = arrays[neighborIndex][IX(     i,     j,     1)]; |                 arrays[CENTER_LOC][IX(    i,     j, DIM-1)] = arrays[neighborIndex][IX(     i,     j,     1)]; | ||||||
| @ -93,7 +99,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //z- face
 |     //z- face
 | ||||||
|     neighborIndex = CK(1,1,0); |     neighborIndex = CK(1,1,0); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             for(j = 1; j < DIM-1; j++){ |             for(j = 1; j < DIM-1; j++){ | ||||||
|                 arrays[CENTER_LOC][IX(i,     j,     0)] = arrays[neighborIndex][IX(     i,     j,     DIM-2)]; |                 arrays[CENTER_LOC][IX(i,     j,     0)] = arrays[neighborIndex][IX(     i,     j,     DIM-2)]; | ||||||
| @ -114,7 +120,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x+ y+ edge
 |     //x+ y+ edge
 | ||||||
|     neighborIndex = CK(2,2,1); |     neighborIndex = CK(2,2,1); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             arrays[CENTER_LOC][IX(DIM-1, DIM-1,     i)] = arrays[neighborIndex][IX(     1,     1,     i)]; |             arrays[CENTER_LOC][IX(DIM-1, DIM-1,     i)] = arrays[neighborIndex][IX(     1,     1,     i)]; | ||||||
|         } |         } | ||||||
| @ -126,7 +132,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x+ y- edge
 |     //x+ y- edge
 | ||||||
|     neighborIndex = CK(2,0,1); |     neighborIndex = CK(2,0,1); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             arrays[CENTER_LOC][IX(DIM-1, 0,     i)] = arrays[neighborIndex][IX(     1,     DIM-2,     i)]; |             arrays[CENTER_LOC][IX(DIM-1, 0,     i)] = arrays[neighborIndex][IX(     1,     DIM-2,     i)]; | ||||||
|         } |         } | ||||||
| @ -138,7 +144,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x- y+ edge
 |     //x- y+ edge
 | ||||||
|     neighborIndex = CK(0,2,1); |     neighborIndex = CK(0,2,1); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             arrays[CENTER_LOC][IX(     0, DIM-1,     i)] = arrays[neighborIndex][IX(     DIM-2,     1,     i)]; |             arrays[CENTER_LOC][IX(     0, DIM-1,     i)] = arrays[neighborIndex][IX(     DIM-2,     1,     i)]; | ||||||
|         } |         } | ||||||
| @ -150,7 +156,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x- y- edge
 |     //x- y- edge
 | ||||||
|     neighborIndex = CK(0,0,1); |     neighborIndex = CK(0,0,1); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             arrays[CENTER_LOC][IX(    0, 0,     i)] = arrays[neighborIndex][IX(   DIM-2,     DIM-2,     i)]; |             arrays[CENTER_LOC][IX(    0, 0,     i)] = arrays[neighborIndex][IX(   DIM-2,     DIM-2,     i)]; | ||||||
|         } |         } | ||||||
| @ -170,7 +176,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x+ z+ edge
 |     //x+ z+ edge
 | ||||||
|     neighborIndex = CK(2,1,2); |     neighborIndex = CK(2,1,2); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             arrays[CENTER_LOC][IX(DIM-1,    i, DIM-1)] = arrays[neighborIndex][IX(     1,    i,     1)]; |             arrays[CENTER_LOC][IX(DIM-1,    i, DIM-1)] = arrays[neighborIndex][IX(     1,    i,     1)]; | ||||||
|         } |         } | ||||||
| @ -182,7 +188,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x+ z- edge
 |     //x+ z- edge
 | ||||||
|     neighborIndex = CK(2,1,0); |     neighborIndex = CK(2,1,0); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             arrays[CENTER_LOC][IX(DIM-1,    i, 0)] = arrays[neighborIndex][IX(     1,    i,     DIM-2)]; |             arrays[CENTER_LOC][IX(DIM-1,    i, 0)] = arrays[neighborIndex][IX(     1,    i,     DIM-2)]; | ||||||
|         } |         } | ||||||
| @ -194,7 +200,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x- z+ edge
 |     //x- z+ edge
 | ||||||
|     neighborIndex = CK(0,1,2); |     neighborIndex = CK(0,1,2); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             arrays[CENTER_LOC][IX(     0,    i, DIM-1)] = arrays[neighborIndex][IX(     DIM-2,    i,     1)]; |             arrays[CENTER_LOC][IX(     0,    i, DIM-1)] = arrays[neighborIndex][IX(     DIM-2,    i,     1)]; | ||||||
|         } |         } | ||||||
| @ -206,7 +212,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x- z- edge
 |     //x- z- edge
 | ||||||
|     neighborIndex = CK(0,1,0); |     neighborIndex = CK(0,1,0); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             arrays[CENTER_LOC][IX(    0,    i, 0)] = arrays[neighborIndex][IX(   DIM-2,    i,     DIM-2)]; |             arrays[CENTER_LOC][IX(    0,    i, 0)] = arrays[neighborIndex][IX(   DIM-2,    i,     DIM-2)]; | ||||||
|         } |         } | ||||||
| @ -225,7 +231,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //y+ z+ edge
 |     //y+ z+ edge
 | ||||||
|     neighborIndex = CK(1,2,2); |     neighborIndex = CK(1,2,2); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             arrays[CENTER_LOC][IX(    i, DIM-1,    DIM-1)] = arrays[neighborIndex][IX(    i,     1,     1)]; |             arrays[CENTER_LOC][IX(    i, DIM-1,    DIM-1)] = arrays[neighborIndex][IX(    i,     1,     1)]; | ||||||
|         } |         } | ||||||
| @ -237,7 +243,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //y+ z- edge
 |     //y+ z- edge
 | ||||||
|     neighborIndex = CK(1,2,0); |     neighborIndex = CK(1,2,0); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             arrays[CENTER_LOC][IX(    i,DIM-1, 0)] = arrays[neighborIndex][IX(    i,     1,     DIM-2)]; |             arrays[CENTER_LOC][IX(    i,DIM-1, 0)] = arrays[neighborIndex][IX(    i,     1,     DIM-2)]; | ||||||
|         } |         } | ||||||
| @ -249,7 +255,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //y- z+ edge
 |     //y- z+ edge
 | ||||||
|     neighborIndex = CK(1,0,2); |     neighborIndex = CK(1,0,2); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             arrays[CENTER_LOC][IX(    i,     0, DIM-1)] = arrays[neighborIndex][IX(    i,     DIM-2,    1)]; |             arrays[CENTER_LOC][IX(    i,     0, DIM-1)] = arrays[neighborIndex][IX(    i,     DIM-2,    1)]; | ||||||
|         } |         } | ||||||
| @ -261,7 +267,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //y- z- edge
 |     //y- z- edge
 | ||||||
|     neighborIndex = CK(1,0,0); |     neighborIndex = CK(1,0,0); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         for(i = 1; i < DIM-1; i++){ |         for(i = 1; i < DIM-1; i++){ | ||||||
|             arrays[CENTER_LOC][IX(    i,    0, 0)] = arrays[neighborIndex][IX(    i,   DIM-2,     DIM-2)]; |             arrays[CENTER_LOC][IX(    i,    0, 0)] = arrays[neighborIndex][IX(    i,   DIM-2,     DIM-2)]; | ||||||
|         } |         } | ||||||
| @ -278,7 +284,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x+ y+ z+ corner
 |     //x+ y+ z+ corner
 | ||||||
|     neighborIndex = CK(2,2,2); |     neighborIndex = CK(2,2,2); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         arrays[CENTER_LOC][IX(DIM-1, DIM-1, DIM-1)] = arrays[neighborIndex][IX(     1,     1,     1)]; |         arrays[CENTER_LOC][IX(DIM-1, DIM-1, DIM-1)] = arrays[neighborIndex][IX(     1,     1,     1)]; | ||||||
|     } else { |     } else { | ||||||
|         arrays[CENTER_LOC][IX(DIM-1, DIM-1, DIM-1)] = fillVal; |         arrays[CENTER_LOC][IX(DIM-1, DIM-1, DIM-1)] = fillVal; | ||||||
| @ -286,7 +292,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x+ y+ z- corner
 |     //x+ y+ z- corner
 | ||||||
|     neighborIndex = CK(2,2,0); |     neighborIndex = CK(2,2,0); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         arrays[CENTER_LOC][IX(DIM-1, DIM-1,     0)] = arrays[neighborIndex][IX(     1,     1, DIM-2)]; |         arrays[CENTER_LOC][IX(DIM-1, DIM-1,     0)] = arrays[neighborIndex][IX(     1,     1, DIM-2)]; | ||||||
|     } else { |     } else { | ||||||
|         arrays[CENTER_LOC][IX(DIM-1, DIM-1,     0)] = fillVal; |         arrays[CENTER_LOC][IX(DIM-1, DIM-1,     0)] = fillVal; | ||||||
| @ -296,7 +302,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x+ y- z+ corner
 |     //x+ y- z+ corner
 | ||||||
|     neighborIndex = CK(2,0,2); |     neighborIndex = CK(2,0,2); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         arrays[CENTER_LOC][IX(DIM-1, 0, DIM-1)] = arrays[neighborIndex][IX(     1, DIM-2,     1)]; |         arrays[CENTER_LOC][IX(DIM-1, 0, DIM-1)] = arrays[neighborIndex][IX(     1, DIM-2,     1)]; | ||||||
|     } else { |     } else { | ||||||
|         arrays[CENTER_LOC][IX(DIM-1, 0, DIM-1)] = fillVal; |         arrays[CENTER_LOC][IX(DIM-1, 0, DIM-1)] = fillVal; | ||||||
| @ -304,7 +310,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x+ y- z- corner
 |     //x+ y- z- corner
 | ||||||
|     neighborIndex = CK(2,0,0); |     neighborIndex = CK(2,0,0); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         arrays[CENTER_LOC][IX(DIM-1, 0,     0)] = arrays[neighborIndex][IX(     1, DIM-2, DIM-2)]; |         arrays[CENTER_LOC][IX(DIM-1, 0,     0)] = arrays[neighborIndex][IX(     1, DIM-2, DIM-2)]; | ||||||
|     } else { |     } else { | ||||||
|         arrays[CENTER_LOC][IX(DIM-1, 0,     0)] = fillVal; |         arrays[CENTER_LOC][IX(DIM-1, 0,     0)] = fillVal; | ||||||
| @ -314,7 +320,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x- y+ z+ corner
 |     //x- y+ z+ corner
 | ||||||
|     neighborIndex = CK(0,2,2); |     neighborIndex = CK(0,2,2); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         arrays[CENTER_LOC][IX(0, DIM-1, DIM-1)] = arrays[neighborIndex][IX( DIM-2,     1,     1)]; |         arrays[CENTER_LOC][IX(0, DIM-1, DIM-1)] = arrays[neighborIndex][IX( DIM-2,     1,     1)]; | ||||||
|     } else { |     } else { | ||||||
|         arrays[CENTER_LOC][IX(0, DIM-1, DIM-1)] = fillVal; |         arrays[CENTER_LOC][IX(0, DIM-1, DIM-1)] = fillVal; | ||||||
| @ -322,7 +328,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x- y+ z- corner
 |     //x- y+ z- corner
 | ||||||
|     neighborIndex = CK(0,2,0); |     neighborIndex = CK(0,2,0); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         arrays[CENTER_LOC][IX(0, DIM-1,     0)] = arrays[neighborIndex][IX( DIM-2,     1, DIM-2)]; |         arrays[CENTER_LOC][IX(0, DIM-1,     0)] = arrays[neighborIndex][IX( DIM-2,     1, DIM-2)]; | ||||||
|     } else { |     } else { | ||||||
|         arrays[CENTER_LOC][IX(0, DIM-1,     0)] = fillVal; |         arrays[CENTER_LOC][IX(0, DIM-1,     0)] = fillVal; | ||||||
| @ -332,7 +338,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x- y- z+ corner
 |     //x- y- z+ corner
 | ||||||
|     neighborIndex = CK(0,0,2); |     neighborIndex = CK(0,0,2); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         arrays[CENTER_LOC][IX(0, 0, DIM-1)] = arrays[neighborIndex][IX( DIM-2, DIM-2,     1)]; |         arrays[CENTER_LOC][IX(0, 0, DIM-1)] = arrays[neighborIndex][IX( DIM-2, DIM-2,     1)]; | ||||||
|     } else { |     } else { | ||||||
|         arrays[CENTER_LOC][IX(0, 0, DIM-1)] = fillVal; |         arrays[CENTER_LOC][IX(0, 0, DIM-1)] = fillVal; | ||||||
| @ -340,7 +346,7 @@ static inline void fluid_solve_bounds_checker(float ** arrays, float fillVal){ | |||||||
| 
 | 
 | ||||||
|     //x- y- z- corner
 |     //x- y- z- corner
 | ||||||
|     neighborIndex = CK(0,0,0); |     neighborIndex = CK(0,0,0); | ||||||
|     if(arrays[neighborIndex] != NULL){ |     if(USE_BOUNDS && arrays[neighborIndex] != NULL){ | ||||||
|         arrays[CENTER_LOC][IX(0, 0,     0)] = arrays[neighborIndex][IX( DIM-2, DIM-2, DIM-2)]; |         arrays[CENTER_LOC][IX(0, 0,     0)] = arrays[neighborIndex][IX( DIM-2, DIM-2, DIM-2)]; | ||||||
|     } else { |     } else { | ||||||
|         arrays[CENTER_LOC][IX(0, 0,     0)] = fillVal; |         arrays[CENTER_LOC][IX(0, 0,     0)] = fillVal; | ||||||
|  | |||||||
| @ -130,7 +130,7 @@ LIBRARY_API void pressurecell_diffuse_density(Environment * environment, Chunk * | |||||||
|                     ) |                     ) | ||||||
|                 ) * a |                 ) * a | ||||||
|                 ; |                 ; | ||||||
|                 if(densityTemp[IX(x,y,z)] < FLUID_PRESSURECELL_MIN_DENSITY_CLAMP_CUTOFF){ |                 if(FLUID_PRESSURECELL_CLAMP_MIN_DENSITY && densityTemp[IX(x,y,z)] < FLUID_PRESSURECELL_MIN_DENSITY_CLAMP_CUTOFF){ | ||||||
|                     densityTemp[IX(x,y,z)] = 0; |                     densityTemp[IX(x,y,z)] = 0; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -6,7 +6,10 @@ | |||||||
| #include "fluid/queue/chunk.h" | #include "fluid/queue/chunk.h" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | /**
 | ||||||
|  |  * Inverts the force applied to the border | ||||||
|  |  */ | ||||||
|  | #define INVERT_BORDER_FORCE 1 | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Calculates the expected density and pressure |  * Calculates the expected density and pressure | ||||||
| @ -114,6 +117,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|                 adjacentIndex = IX(DIM-2,x,y); |                 adjacentIndex = IX(DIM-2,x,y); | ||||||
|                 if(uArr[adjacentIndex] > 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |                 if(uArr[adjacentIndex] > 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){ | ||||||
|                     invertedForce = 1.0f - fabs(uArr[adjacentIndex]); |                     invertedForce = 1.0f - fabs(uArr[adjacentIndex]); | ||||||
|  |                     if(INVERT_BORDER_FORCE){ | ||||||
|  |                         uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                     } | ||||||
|                     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; | ||||||
| @ -148,6 +154,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|                 adjacentIndex = IX(1,x,y); |                 adjacentIndex = IX(1,x,y); | ||||||
|                 if(uArr[adjacentIndex] < 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |                 if(uArr[adjacentIndex] < 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){ | ||||||
|                     invertedForce = 1.0f - fabs(uArr[adjacentIndex]); |                     invertedForce = 1.0f - fabs(uArr[adjacentIndex]); | ||||||
|  |                     if(INVERT_BORDER_FORCE){ | ||||||
|  |                         uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                     } | ||||||
|                     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; | ||||||
| @ -182,6 +191,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|                 adjacentIndex = IX(x,DIM-2,y); |                 adjacentIndex = IX(x,DIM-2,y); | ||||||
|                 if(vArr[adjacentIndex] > 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |                 if(vArr[adjacentIndex] > 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){ | ||||||
|                     invertedForce = 1.0f - fabs(vArr[adjacentIndex]); |                     invertedForce = 1.0f - fabs(vArr[adjacentIndex]); | ||||||
|  |                     if(INVERT_BORDER_FORCE){ | ||||||
|  |                         vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                     } | ||||||
|                     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; | ||||||
| @ -216,6 +228,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|                 adjacentIndex = IX(x,1,y); |                 adjacentIndex = IX(x,1,y); | ||||||
|                 if(vArr[adjacentIndex] < 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |                 if(vArr[adjacentIndex] < 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){ | ||||||
|                     invertedForce = 1.0f - fabs(vArr[adjacentIndex]); |                     invertedForce = 1.0f - fabs(vArr[adjacentIndex]); | ||||||
|  |                     if(INVERT_BORDER_FORCE){ | ||||||
|  |                         vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                     } | ||||||
|                     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; | ||||||
| @ -250,6 +265,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|                 adjacentIndex = IX(x,y,DIM-2); |                 adjacentIndex = IX(x,y,DIM-2); | ||||||
|                 if(wArr[adjacentIndex] > 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |                 if(wArr[adjacentIndex] > 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){ | ||||||
|                     invertedForce = 1.0f - fabs(wArr[adjacentIndex]); |                     invertedForce = 1.0f - fabs(wArr[adjacentIndex]); | ||||||
|  |                     if(INVERT_BORDER_FORCE){ | ||||||
|  |                         wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |                     } | ||||||
|                     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; | ||||||
| @ -284,6 +302,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|                 adjacentIndex = IX(x,y,1); |                 adjacentIndex = IX(x,y,1); | ||||||
|                 if(wArr[adjacentIndex] < 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |                 if(wArr[adjacentIndex] < 0 && dArr[adjacentIndex] > MIN_FLUID_VALUE){ | ||||||
|                     invertedForce = 1.0f - fabs(wArr[adjacentIndex]); |                     invertedForce = 1.0f - fabs(wArr[adjacentIndex]); | ||||||
|  |                     if(INVERT_BORDER_FORCE){ | ||||||
|  |                         wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |                     } | ||||||
|                     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; | ||||||
| @ -337,6 +358,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|             adjacentIndex = IX(1,1,x); |             adjacentIndex = IX(1,1,x); | ||||||
|             if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |             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(INVERT_BORDER_FORCE){ | ||||||
|  |                     uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                     vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                 } | ||||||
|                 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; | ||||||
| @ -367,6 +392,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|             adjacentIndex = IX(1,DIM-2,x); |             adjacentIndex = IX(1,DIM-2,x); | ||||||
|             if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |             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(INVERT_BORDER_FORCE){ | ||||||
|  |                     uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                     vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                 } | ||||||
|                 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; | ||||||
| @ -397,6 +426,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|             adjacentIndex = IX(DIM-2,1,x); |             adjacentIndex = IX(DIM-2,1,x); | ||||||
|             if((uArr[adjacentIndex] > 0 && vArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |             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(INVERT_BORDER_FORCE){ | ||||||
|  |                     uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                     vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                 } | ||||||
|                 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; | ||||||
| @ -427,6 +460,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|             adjacentIndex = IX(DIM-2,DIM-2,x); |             adjacentIndex = IX(DIM-2,DIM-2,x); | ||||||
|             if((uArr[adjacentIndex] > 0 && vArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |             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(INVERT_BORDER_FORCE){ | ||||||
|  |                     uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                     vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                 } | ||||||
|                 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; | ||||||
| @ -463,6 +500,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|             adjacentIndex = IX(1,x,1); |             adjacentIndex = IX(1,x,1); | ||||||
|             if((uArr[adjacentIndex] < 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |             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(INVERT_BORDER_FORCE){ | ||||||
|  |                     uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                     wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |                 } | ||||||
|                 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; | ||||||
| @ -493,6 +534,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|             adjacentIndex = IX(1,x,DIM-2); |             adjacentIndex = IX(1,x,DIM-2); | ||||||
|             if((uArr[adjacentIndex] < 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |             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(INVERT_BORDER_FORCE){ | ||||||
|  |                     uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                     wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |                 } | ||||||
|                 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; | ||||||
| @ -523,6 +568,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|             adjacentIndex = IX(DIM-2,x,1); |             adjacentIndex = IX(DIM-2,x,1); | ||||||
|             if((uArr[adjacentIndex] > 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |             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(INVERT_BORDER_FORCE){ | ||||||
|  |                     uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                     wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |                 } | ||||||
|                 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; | ||||||
| @ -553,6 +602,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|             adjacentIndex = IX(DIM-2,x,DIM-2); |             adjacentIndex = IX(DIM-2,x,DIM-2); | ||||||
|             if((uArr[adjacentIndex] > 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |             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(INVERT_BORDER_FORCE){ | ||||||
|  |                     uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                     wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |                 } | ||||||
|                 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; | ||||||
| @ -587,6 +640,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|             adjacentIndex = IX(x,1,1); |             adjacentIndex = IX(x,1,1); | ||||||
|             if((vArr[adjacentIndex] < 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |             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(INVERT_BORDER_FORCE){ | ||||||
|  |                     vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                     wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |                 } | ||||||
|                 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; | ||||||
| @ -617,6 +674,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|             adjacentIndex = IX(x,1,DIM-2); |             adjacentIndex = IX(x,1,DIM-2); | ||||||
|             if((vArr[adjacentIndex] < 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |             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(INVERT_BORDER_FORCE){ | ||||||
|  |                     vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                     wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |                 } | ||||||
|                 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; | ||||||
| @ -647,6 +708,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|             adjacentIndex = IX(x,DIM-2,1); |             adjacentIndex = IX(x,DIM-2,1); | ||||||
|             if((vArr[adjacentIndex] > 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |             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(INVERT_BORDER_FORCE){ | ||||||
|  |                     vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                     wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |                 } | ||||||
|                 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; | ||||||
| @ -677,6 +742,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|             adjacentIndex = IX(x,DIM-2,DIM-2); |             adjacentIndex = IX(x,DIM-2,DIM-2); | ||||||
|             if((vArr[adjacentIndex] > 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |             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(INVERT_BORDER_FORCE){ | ||||||
|  |                     vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                     wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |                 } | ||||||
|                 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; | ||||||
| @ -740,6 +809,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|         adjacentIndex = IX(1,1,1); |         adjacentIndex = IX(1,1,1); | ||||||
|         if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] < 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |         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(INVERT_BORDER_FORCE){ | ||||||
|  |                 uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                 vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                 wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |             } | ||||||
|             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; | ||||||
| @ -768,6 +842,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|         adjacentIndex = IX(1,DIM-2,1); |         adjacentIndex = IX(1,DIM-2,1); | ||||||
|         if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] > 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |         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(INVERT_BORDER_FORCE){ | ||||||
|  |                 uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                 vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                 wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |             } | ||||||
|             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; | ||||||
| @ -795,6 +874,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|         adjacentIndex = IX(DIM-2,1,1); |         adjacentIndex = IX(DIM-2,1,1); | ||||||
|         if((uArr[adjacentIndex] > 0 && vArr[adjacentIndex] < 0 && wArr[adjacentIndex] < 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |         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(INVERT_BORDER_FORCE){ | ||||||
|  |                 uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                 vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                 wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |             } | ||||||
|             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; | ||||||
| @ -823,6 +907,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|         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] > MIN_FLUID_VALUE){ |         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(INVERT_BORDER_FORCE){ | ||||||
|  |                 uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                 vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                 wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |             } | ||||||
|             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; | ||||||
| @ -855,6 +944,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|         adjacentIndex = IX(1,1,DIM-2); |         adjacentIndex = IX(1,1,DIM-2); | ||||||
|         if((uArr[adjacentIndex] < 0 && vArr[adjacentIndex] < 0 && wArr[adjacentIndex] > 0) && dArr[adjacentIndex] > MIN_FLUID_VALUE){ |         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(INVERT_BORDER_FORCE){ | ||||||
|  |                 uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                 vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                 wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |             } | ||||||
|             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; | ||||||
| @ -883,6 +977,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|         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] > MIN_FLUID_VALUE){ |         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(INVERT_BORDER_FORCE){ | ||||||
|  |                 uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                 vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                 wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |             } | ||||||
|             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; | ||||||
| @ -910,6 +1009,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|         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] > MIN_FLUID_VALUE){ |         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(INVERT_BORDER_FORCE){ | ||||||
|  |                 uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                 vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                 wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |             } | ||||||
|             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; | ||||||
| @ -938,6 +1042,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * | |||||||
|         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] > MIN_FLUID_VALUE){ |         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(INVERT_BORDER_FORCE){ | ||||||
|  |                 uArr[adjacentIndex] = -uArr[adjacentIndex]; | ||||||
|  |                 vArr[adjacentIndex] = -vArr[adjacentIndex]; | ||||||
|  |                 wArr[adjacentIndex] = -wArr[adjacentIndex]; | ||||||
|  |             } | ||||||
|             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; | ||||||
|  | |||||||
| @ -17,6 +17,7 @@ LIBRARY_API void pressurecell_approximate_pressure(Environment * environment, Ch | |||||||
|     float * uArr = chunk->u[CENTER_LOC]; |     float * uArr = chunk->u[CENTER_LOC]; | ||||||
|     float * vArr = chunk->v[CENTER_LOC]; |     float * vArr = chunk->v[CENTER_LOC]; | ||||||
|     float * wArr = chunk->w[CENTER_LOC]; |     float * wArr = chunk->w[CENTER_LOC]; | ||||||
|  |     float * border = chunk->bounds[CENTER_LOC]; | ||||||
|     // float * uArr = chunk->uTempCache;
 |     // float * uArr = chunk->uTempCache;
 | ||||||
|     // float * vArr = chunk->vTempCache;
 |     // float * vArr = chunk->vTempCache;
 | ||||||
|     // float * wArr = chunk->wTempCache;
 |     // float * wArr = chunk->wTempCache;
 | ||||||
| @ -99,12 +100,18 @@ 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(DIM-1,x,y)] = border[IX(DIM-1,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE;
 | ||||||
|  |             // pressureTemp[IX(x,0,y)]     = border[IX(x,0,y)]     * FLUID_PRESSURECELL_BOUND_PRESSURE;
 | ||||||
|  |             // pressureTemp[IX(x,DIM-1,y)] = border[IX(x,DIM-1,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE;
 | ||||||
|  |             // pressureTemp[IX(x,y,0)]     = border[IX(x,y,0)]     * 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)]; | ||||||
| @ -149,6 +156,12 @@ LIBRARY_API void pressurecell_approximate_pressure(Environment * environment, Ch | |||||||
|                 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(DIM-1,x,y)] = border[IX(DIM-1,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE;
 | ||||||
|  |                 // pressureTemp[IX(x,0,y)]     = border[IX(x,0,y)]     * FLUID_PRESSURECELL_BOUND_PRESSURE;
 | ||||||
|  |                 // pressureTemp[IX(x,DIM-1,y)] = border[IX(x,DIM-1,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE;
 | ||||||
|  |                 // pressureTemp[IX(x,y,0)]     = border[IX(x,y,0)]     * FLUID_PRESSURECELL_BOUND_PRESSURE;
 | ||||||
|  |                 // pressureTemp[IX(x,y,DIM-1)] = border[IX(x,y,DIM-1)] * FLUID_PRESSURECELL_BOUND_PRESSURE;
 | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         chunk->projectionIterations++; |         chunk->projectionIterations++; | ||||||
| @ -160,6 +173,7 @@ LIBRARY_API void pressurecell_approximate_pressure(Environment * environment, Ch | |||||||
|                 if(pressureTemp[IX(x,y,z)] > FLUID_PRESSURECELL_MAX_PRESSURE){ |                 if(pressureTemp[IX(x,y,z)] > FLUID_PRESSURECELL_MAX_PRESSURE){ | ||||||
|                     printf("Invalid pressure!\n"); |                     printf("Invalid pressure!\n"); | ||||||
|                     printf("%f %f \n", phi0[IX(x-1,y,z)], phi0[IX(x+1,y,z)]); |                     printf("%f %f \n", phi0[IX(x-1,y,z)], phi0[IX(x+1,y,z)]); | ||||||
|  |                     printf("%f \n", pressureTemp[IX(x,y,z)]); | ||||||
|                     printf("\n"); |                     printf("\n"); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -165,8 +165,8 @@ int fluid_sim_grid2_convergence_test3(){ | |||||||
| int fluid_sim_grid2_convergence_tests(){ | int fluid_sim_grid2_convergence_tests(){ | ||||||
|     int rVal = 0; |     int rVal = 0; | ||||||
| 
 | 
 | ||||||
|     rVal += fluid_sim_grid2_convergence_test1(); |     // rVal += fluid_sim_grid2_convergence_test1();
 | ||||||
|     rVal += fluid_sim_grid2_convergence_test2(); |     // rVal += fluid_sim_grid2_convergence_test2();
 | ||||||
|     // rVal += fluid_sim_grid2_convergence_test3();
 |     // rVal += fluid_sim_grid2_convergence_test3();
 | ||||||
| 
 | 
 | ||||||
|     return rVal; |     return rVal; | ||||||
|  | |||||||
| @ -65,10 +65,12 @@ int fluid_sim_pressurecell_add_gravity_test1(){ | |||||||
|     //
 |     //
 | ||||||
|     expected = 0; |     expected = 0; | ||||||
|     actual = currentChunk->v[CENTER_LOC][IX(1,1,DIM-2)]; |     actual = currentChunk->v[CENTER_LOC][IX(1,1,DIM-2)]; | ||||||
|     if(fabs(expected - actual) < FLUID_PRESSURE_CELL_ERROR_MARGIN){ |     if(fabs(expected - actual) > FLUID_PRESSURE_CELL_ERROR_MARGIN){ | ||||||
|         rVal++; |         rVal++; | ||||||
|         printf("Gravity not applied!\n"); |         printf("Gravity not applied!\n"); | ||||||
|         printf("grav(1,1,DIM-2): %f \n", currentChunk->v[CENTER_LOC][IX(1,1,DIM-2)]); |         printf("grav(1,1,DIM-2): %f \n", actual); | ||||||
|  |         printf("expected: %f \n", expected); | ||||||
|  |         printf("diff:  %f  \n", fabs(expected - actual)); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return rVal; |     return rVal; | ||||||
|  | |||||||
| @ -133,7 +133,7 @@ int fluid_sim_pressurecell_sim_e2e_tests(int argc, char **argv){ | |||||||
|     int rVal = 0; |     int rVal = 0; | ||||||
| 
 | 
 | ||||||
|     rVal += fluid_sim_pressurecell_sim_e2e_test1(); |     rVal += fluid_sim_pressurecell_sim_e2e_test1(); | ||||||
|     rVal += fluid_sim_pressurecell_sim_e2e_test2(); |     // rVal += fluid_sim_pressurecell_sim_e2e_test2();
 | ||||||
| 
 | 
 | ||||||
|     return rVal; |     return rVal; | ||||||
| } | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user