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)]);
|
invertedMask = _mm256_loadu_ps(&environment->state.grid2.fluid_grid2_border_mask_inverted[IX(x,y,z)]);
|
||||||
realPart = _mm256_mul_ps(realVal,invertedMask);
|
realPart = _mm256_mul_ps(realVal,invertedMask);
|
||||||
finalVec = _mm256_add_ps(realPart,maskedBounds);
|
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
|
//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)]);
|
invertedMask = _mm256_loadu_ps(&environment->state.grid2.fluid_grid2_border_mask_inverted[IX(x,y,z)]);
|
||||||
realPart = _mm256_mul_ps(realVal,invertedMask);
|
realPart = _mm256_mul_ps(realVal,invertedMask);
|
||||||
finalVec = _mm256_add_ps(realPart,maskedBounds);
|
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
|
//upper part
|
||||||
x = 10;
|
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)]);
|
invertedMask = _mm256_loadu_ps(&environment->state.grid2.fluid_grid2_border_mask_inverted[IX(x,y,z)]);
|
||||||
realPart = _mm256_mul_ps(realVal,invertedMask);
|
realPart = _mm256_mul_ps(realVal,invertedMask);
|
||||||
finalVec = _mm256_add_ps(realPart,maskedBounds);
|
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);
|
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
|
* 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){
|
switch(vector_dir){
|
||||||
case BOUND_SET_VECTOR_DIFFUSE_PHI_U:
|
case BOUND_SET_VECTOR_DIFFUSE_PHI_U:
|
||||||
case BOUND_SET_VECTOR_DIFFUSE_PHI_V:
|
case BOUND_SET_VECTOR_DIFFUSE_PHI_V:
|
||||||
case BOUND_SET_VECTOR_DIFFUSE_PHI_W:
|
case BOUND_SET_VECTOR_DIFFUSE_PHI_W: {
|
||||||
case BOUND_SET_VECTOR_U:
|
|
||||||
case BOUND_SET_VECTOR_V:
|
|
||||||
case BOUND_SET_VECTOR_W: {
|
|
||||||
fluid_grid2_set_bounds_reflection(environment,vector_dir,target);
|
fluid_grid2_set_bounds_reflection(environment,vector_dir,target);
|
||||||
} break;
|
} break;
|
||||||
case BOUND_SET_DENSITY_PHI:
|
case BOUND_SET_DENSITY_PHI:
|
||||||
case BOUND_SET_DENSITY:
|
|
||||||
case BOUND_SET_PROJECTION_PHI:
|
case BOUND_SET_PROJECTION_PHI:
|
||||||
case BOUND_SET_PROJECTION_PHI_0: {
|
case BOUND_SET_PROJECTION_PHI_0: {
|
||||||
fluid_grid2_set_bounds_continuity(environment,target);
|
fluid_grid2_set_bounds_continuity(environment,target);
|
||||||
} break;
|
} 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