outlet_dnt Subroutine

public subroutine outlet_dnt(me, state, bcBuffer, globBC, levelDesc, tree, nSize, iLevel, sim_time, neigh, layout, fieldProp, varPos, nScalars, varSys, derVarPos, physics, iField, mixture)

Outlet Pressure do-nothing boundary is the open boundary condition for incompressible model. This BC sets reference density at boundary so the background pressure should be zero. Here, the normal velocity is extrapolated from 1st fluid node and tangential velocity is extrapolated from 2nd fluid node in normal direction. Algorithm used in this boundary condition: fEq(1,u) and fEq(rho,u) are computed using macroscopic values from current element. In fNeq, post-collision of current time step is used for normal direction.

This is taken from the paper: M. Junk and Z. Yang, Asymptotic Analysis of Lattice Boltzmann Outflow Treatments Commun. Comput. Phys., pp. 1–11, 2011.

This subroutine's interface must match the abstract interface definition boundaryRoutine in bc/mus_bc_header_module.f90 in order to be callable via fnct function pointer.


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



real(kind=rk), private :: fTmp(nScalars*globBC%nElems(iLevel))
real(kind=rk), private :: fEq(layout%fStencil%QQ*globBC%nElems(iLevel))
real(kind=rk), private :: fEq0(layout%fStencil%QQ*globBC%nElems(iLevel))
real(kind=rk), private :: fNEq
real(kind=rk), private :: rho(globBC%nElems(iLevel))
real(kind=rk), private :: uxB(3)
real(kind=rk), private :: uxB_n(3)
real(kind=rk), private :: uxB_n2(3)
real(kind=rk), private :: uxB_t(3)
real(kind=rk), private :: normal(3)
integer, private :: normalDir
real(kind=rk), private :: velocity(3,globBC%nElems(iLevel))
real(kind=rk), private :: uxF_2(globBC%nElems(iLevel)*3)
real(kind=rk), private :: omega
real(kind=rk), private :: visc
real(kind=rk), private :: facFNeq
integer, private :: iDir
integer, private :: invDir
integer, private :: iElem
integer, private :: QQ
integer, private :: elemPos
integer, private :: posInBuffer