Outlet Pressure Bounce Back boundary condition
An anti-bounce back is performed for the outgoing links, so that the incoming densities are set with the defined reference density while maintaining the correct non-equilibrium part. The velocity is extrapolated from two neighboring fluid elements (boundary element itself + one fluid neighbor). The position of the wall is hence between the boundary element and the (non-existing) solid element Based on the Bouzidi Boundary conditions, the current implementation is taken from the paper: S. Izquierdo and N. Fueyo, "Characteristic non-reflecing boundary conditions for open boundaries in lattice Boltzmann methods," Physical Review E, vol. 78, no. 46707, 2008.
MH: I deactivated the correction term as it involves information from the old time step. In parallel, this can not be provided.
DISCLAIMER: This BC requires pre-collision PDF from 1st and 2nd neighbor which are not available if those neighbors are boundary halo on different process. So, if you encounter a problem with this BC, please check the domain distribution to verify whether 2 neighbors of boundary elements are in one process. The domain distribution can be changed by shifting the boundary by one element or by changing the origin of bounding cube or by using different number of MPI processes.
\todo 20200410, KM: Check if this BC works if neighbufferPre is replaced by neighbufferPost
This subroutine's interface must match the abstract interface definition boundaryRoutine in bc/mus_bc_header_module.f90 in order to be callable via [[boundary_type:fnct] function pointer.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(boundary_type) | :: | me | global boundary type |
|||
real(kind=rk), | intent(inout) | :: | state(:) | Current state vector of iLevel |
||
real(kind=rk), | intent(in) | :: | bcBuffer(:) | state values of boundary elements of all fields of iLevel |
||
type(glob_boundary_type), | intent(in) | :: | globBC | scheme global boundary type |
||
type(tem_levelDesc_type), | intent(in) | :: | levelDesc | iLevel descriptor |
||
type(treelmesh_type), | intent(in) | :: | tree | Treelm Mesh |
||
integer, | intent(in) | :: | nSize | size of state array ( in terms of elements ) |
||
integer, | intent(in) | :: | iLevel | the level On which this boundary was invoked |
||
type(tem_time_type), | intent(in) | :: | sim_time | global time information |
||
integer, | intent(in) | :: | neigh(:) | connectivity array corresponding to state vector |
||
type(mus_scheme_layout_type), | intent(in) | :: | layout | stencil layout information |
||
type(mus_field_prop_type), | intent(in) | :: | fieldProp | fluid parameters and properties |
||
integer, | intent(in) | :: | varPos(:) | pointer to field variable in the state vector |
||
integer, | intent(in) | :: | nScalars | number of Scalars in the scheme var system |
||
type(tem_varSys_type), | intent(in) | :: | varSys | scheme variable system |
||
type(mus_derVarPos_type), | intent(in) | :: | derVarPos | position of derived quantities in varsys |
||
type(mus_physics_type), | intent(in) | :: | physics | scheme global boundary type |
||
integer, | intent(in) | :: | iField | current field |
||
type(mus_mixture_type), | intent(in) | :: | mixture | mixture info |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=rk), | private | :: | rhoDef(globBC%nElems(iLevel)) | ||||
real(kind=rk), | private | :: | rhoF | ||||
real(kind=rk), | private | :: | uxF(globBC%nElems(iLevel)*3) | ||||
real(kind=rk), | private | :: | uxN(globBC%nElems(iLevel)*3) | ||||
real(kind=rk), | private | :: | uxB(3) | ||||
real(kind=rk), | private | :: | usqB | ||||
real(kind=rk), | private | :: | usqF | ||||
real(kind=rk), | private | :: | fPlusFluid | ||||
real(kind=rk), | private | :: | fEqPlus | ||||
real(kind=rk), | private | :: | fEqPlusFluid | ||||
real(kind=rk), | private | :: | inv_rho_phy | ||||
real(kind=rk), | private | :: | fTmp(nScalars*globBC%nElems(iLevel)) | ||||
real(kind=rk), | private | :: | omega | ||||
integer, | private | :: | iDir | ||||
integer, | private | :: | iElem | ||||
integer, | private | :: | |||||
integer, | private | :: | invDir | ||||
integer, | private | :: | elemPos | ||||
integer, | private | :: | posInBuffer | ||||
integer, | private | :: | bcPress_pos |