neighbor sourcing bounds function
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
05580f2b36
commit
9bb8c2f360
@ -341,7 +341,7 @@ static inline void fluid_grid2_apply_bounds_mask(Environment * environment, floa
|
||||
invertedMask = _mm256_loadu_ps(&environment->state.grid2.fluid_grid2_border_mask_inverted[IX(x,y,z)]);
|
||||
realPart = _mm256_mul_ps(realVal,invertedMask);
|
||||
finalVec = _mm256_add_ps(realPart,maskedBounds);
|
||||
_mm256_storeu_ps(&realArr[IX(x,y,z)],finalVec);
|
||||
_mm256_storeu_ps(&boundsArr[IX(x,y,z)],finalVec);
|
||||
|
||||
|
||||
//middle part
|
||||
@ -353,7 +353,7 @@ static inline void fluid_grid2_apply_bounds_mask(Environment * environment, floa
|
||||
invertedMask = _mm256_loadu_ps(&environment->state.grid2.fluid_grid2_border_mask_inverted[IX(x,y,z)]);
|
||||
realPart = _mm256_mul_ps(realVal,invertedMask);
|
||||
finalVec = _mm256_add_ps(realPart,maskedBounds);
|
||||
_mm256_storeu_ps(&realArr[IX(x,y,z)],finalVec);
|
||||
_mm256_storeu_ps(&boundsArr[IX(x,y,z)],finalVec);
|
||||
|
||||
//upper part
|
||||
x = 10;
|
||||
@ -364,7 +364,7 @@ static inline void fluid_grid2_apply_bounds_mask(Environment * environment, floa
|
||||
invertedMask = _mm256_loadu_ps(&environment->state.grid2.fluid_grid2_border_mask_inverted[IX(x,y,z)]);
|
||||
realPart = _mm256_mul_ps(realVal,invertedMask);
|
||||
finalVec = _mm256_add_ps(realPart,maskedBounds);
|
||||
_mm256_storeu_ps(&realArr[IX(x,y,z)],finalVec);
|
||||
_mm256_storeu_ps(&boundsArr[IX(x,y,z)],finalVec);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -193,6 +193,125 @@ void fluid_grid2_set_bounds_continuity(
|
||||
target[IX(DIM-1,DIM-1,DIM-1)] = (float)((target[IX(DIM-1,DIM-1,DIM-2)]+target[IX(DIM-1,DIM-2,DIM-1)]+target[IX(DIM-1,DIM-1,DIM-2)])/3.0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the bounds to the neighbor's value
|
||||
*/
|
||||
void fluid_grid2_set_bounds_neighbor(
|
||||
Environment * environment,
|
||||
int sourceType,
|
||||
float * target
|
||||
){
|
||||
float * neighborArr;
|
||||
switch(sourceType){
|
||||
case BOUND_SET_DENSITY: {
|
||||
neighborArr = environment->state.grid2.fluid_grid2_neighborArr_d;
|
||||
} break;
|
||||
case BOUND_SET_VECTOR_U: {
|
||||
neighborArr = environment->state.grid2.fluid_grid2_neighborArr_u;
|
||||
} break;
|
||||
case BOUND_SET_VECTOR_V: {
|
||||
neighborArr = environment->state.grid2.fluid_grid2_neighborArr_v;
|
||||
} break;
|
||||
case BOUND_SET_VECTOR_W: {
|
||||
neighborArr = environment->state.grid2.fluid_grid2_neighborArr_w;
|
||||
} break;
|
||||
}
|
||||
//set the boundary planes
|
||||
for(int x=1; x < DIM-1; x++){
|
||||
for(int y = 1; y < DIM-1; y++){
|
||||
target[IX(0,x,y)] = neighborArr[IX(0,x,y)];
|
||||
target[IX(DIM-1,x,y)] = neighborArr[IX(DIM-1,x,y)];
|
||||
target[IX(x,0,y)] = neighborArr[IX(x,0,y)];
|
||||
target[IX(x,DIM-1,y)] = neighborArr[IX(x,DIM-1,y)];
|
||||
target[IX(x,y,0)] = neighborArr[IX(x,y,0)];
|
||||
target[IX(x,y,DIM-1)] = neighborArr[IX(x,y,DIM-1)];
|
||||
}
|
||||
}
|
||||
|
||||
//sets the edges of the chunk
|
||||
//this should logically follow from how we're treating the boundary planes
|
||||
for(int x = 1; x < DIM-1; x++){
|
||||
target[IX(x,0,0)] = neighborArr[IX(x,0,0)];
|
||||
target[IX(x,DIM-1,0)] = neighborArr[IX(x,DIM-1,0)];
|
||||
target[IX(x,0,DIM-1)] = neighborArr[IX(x,0,DIM-1)];
|
||||
target[IX(x,DIM-1,DIM-1)] = neighborArr[IX(x,DIM-1,DIM-1)];
|
||||
|
||||
target[IX(0,x,0)] = neighborArr[IX(0,x,0)];
|
||||
target[IX(DIM-1,x,0)] = neighborArr[IX(DIM-1,x,0)];
|
||||
target[IX(0,x,DIM-1)] = neighborArr[IX(0,x,DIM-1)];
|
||||
target[IX(DIM-1,x,DIM-1)] = neighborArr[IX(DIM-1,x,DIM-1)];
|
||||
|
||||
|
||||
target[IX(0,0,x)] = neighborArr[IX(0,0,x)];
|
||||
target[IX(DIM-1,0,x)] = neighborArr[IX(DIM-1,0,x)];
|
||||
target[IX(0,DIM-1,x)] = neighborArr[IX(0,DIM-1,x)];
|
||||
target[IX(DIM-1,DIM-1,x)] = neighborArr[IX(DIM-1,DIM-1,x)];
|
||||
|
||||
}
|
||||
//sets the corners of the chunk
|
||||
//this should logically follow from how we're treating the boundary planes
|
||||
target[IX(0,0,0)] = neighborArr[IX(0,0,0)];
|
||||
target[IX(DIM-1,0,0)] = neighborArr[IX(DIM-1,0,0)];
|
||||
target[IX(0,DIM-1,0)] = neighborArr[IX(0,DIM-1,0)];
|
||||
target[IX(0,0,DIM-1)] = neighborArr[IX(0,0,DIM-1)];
|
||||
target[IX(DIM-1,DIM-1,0)] = neighborArr[IX(DIM-1,DIM-1,0)];
|
||||
target[IX(0,DIM-1,DIM-1)] = neighborArr[IX(0,DIM-1,DIM-1)];
|
||||
target[IX(DIM-1,0,DIM-1)] = neighborArr[IX(DIM-1,0,DIM-1)];
|
||||
target[IX(DIM-1,DIM-1,DIM-1)] = neighborArr[IX(DIM-1,DIM-1,DIM-1)];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the bounds to 0
|
||||
*/
|
||||
void fluid_grid2_set_bounds_zero(
|
||||
Environment * environment,
|
||||
float * target
|
||||
){
|
||||
float * boundsArr = environment->state.grid2.fluid_grid2_neighborArr_d;
|
||||
//set the boundary planes
|
||||
for(int x=1; x < DIM-1; x++){
|
||||
for(int y = 1; y < DIM-1; y++){
|
||||
target[IX(0,x,y)] = 0;
|
||||
target[IX(DIM-1,x,y)] = 0;
|
||||
target[IX(x,0,y)] = 0;
|
||||
target[IX(x,DIM-1,y)] = 0;
|
||||
target[IX(x,y,0)] = 0;
|
||||
target[IX(x,y,DIM-1)] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//sets the edges of the chunk
|
||||
//this should logically follow from how we're treating the boundary planes
|
||||
for(int x = 1; x < DIM-1; x++){
|
||||
target[IX(x,0,0)] = 0;
|
||||
target[IX(x,DIM-1,0)] = 0;
|
||||
target[IX(x,0,DIM-1)] = 0;
|
||||
target[IX(x,DIM-1,DIM-1)] = 0;
|
||||
|
||||
target[IX(0,x,0)] = 0;
|
||||
target[IX(DIM-1,x,0)] = 0;
|
||||
target[IX(0,x,DIM-1)] = 0;
|
||||
target[IX(DIM-1,x,DIM-1)] = 0;
|
||||
|
||||
|
||||
target[IX(0,0,x)] = 0;
|
||||
target[IX(DIM-1,0,x)] = 0;
|
||||
target[IX(0,DIM-1,x)] = 0;
|
||||
target[IX(DIM-1,DIM-1,x)] = 0;
|
||||
|
||||
}
|
||||
//sets the corners of the chunk
|
||||
//this should logically follow from how we're treating the boundary planes
|
||||
target[IX(0,0,0)] = 0;
|
||||
target[IX(DIM-1,0,0)] = 0;
|
||||
target[IX(0,DIM-1,0)] = 0;
|
||||
target[IX(0,0,DIM-1)] = 0;
|
||||
target[IX(DIM-1,DIM-1,0)] = 0;
|
||||
target[IX(0,DIM-1,DIM-1)] = 0;
|
||||
target[IX(DIM-1,0,DIM-1)] = 0;
|
||||
target[IX(DIM-1,DIM-1,DIM-1)] = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the bounds of this cube to those of its neighbor
|
||||
*/
|
||||
@ -204,18 +323,20 @@ LIBRARY_API void fluid_grid2_set_bounds(
|
||||
switch(vector_dir){
|
||||
case BOUND_SET_VECTOR_DIFFUSE_PHI_U:
|
||||
case BOUND_SET_VECTOR_DIFFUSE_PHI_V:
|
||||
case BOUND_SET_VECTOR_DIFFUSE_PHI_W:
|
||||
case BOUND_SET_VECTOR_U:
|
||||
case BOUND_SET_VECTOR_V:
|
||||
case BOUND_SET_VECTOR_W: {
|
||||
case BOUND_SET_VECTOR_DIFFUSE_PHI_W: {
|
||||
fluid_grid2_set_bounds_reflection(environment,vector_dir,target);
|
||||
} break;
|
||||
case BOUND_SET_DENSITY_PHI:
|
||||
case BOUND_SET_DENSITY:
|
||||
case BOUND_SET_PROJECTION_PHI:
|
||||
case BOUND_SET_PROJECTION_PHI_0: {
|
||||
fluid_grid2_set_bounds_continuity(environment,target);
|
||||
} break;
|
||||
case BOUND_SET_VECTOR_U:
|
||||
case BOUND_SET_VECTOR_V:
|
||||
case BOUND_SET_VECTOR_W:
|
||||
case BOUND_SET_DENSITY: {
|
||||
fluid_grid2_set_bounds_neighbor(environment,vector_dir,target);
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user