outlet_nrbc Subroutine

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

Characteristic-based non-reflective open boundary conditions

These boundary conditions are taken from the paper: S. Izquierdo and N. Fueyo, "Characteristic nonreflecting boundary conditions for open boundaries in lattice Boltzmann methods," Physical Review E, vol. 78, no. 46707, 2008.

Note: unstable behavior for high omega relaxation parameters. It is recommended to use a sponge layer with a \ref mus_aux_module::mus_setspatialomega "spatial omega" where the omega is decreased towards the boundaries to increase stability

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.

Arguments

TypeIntentOptionalAttributesName
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


Contents


Variables

TypeVisibilityAttributesNameInitial
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 :: 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 :: fTmpPre(nScalars)
real(kind=rk), private :: fTmpPre_2(nScalars)
real(kind=rk), private :: omega
integer, private :: iDir
integer, private :: iElem
integer, private :: QQ
integer, private :: invDir
integer, private :: elemPos
integer, private :: posInBuffer
integer, private :: bcPress_pos
real(kind=rk), private :: sigma
real(kind=rk), private :: kappa
real(kind=rk), private :: csMod
real(kind=rk), private :: Ma_L
real(kind=rk), private :: lodi_length
real(kind=rk), private :: k_i
real(kind=rk), private :: swap
real(kind=rk), private :: L1
real(kind=rk), private :: L2
real(kind=rk), private :: L3
real(kind=rk), private :: L4
real(kind=rk), private :: L5
real(kind=rk), private :: dudx
real(kind=rk), private :: dvdx
real(kind=rk), private :: dwdx
real(kind=rk), private :: drhodx
real(kind=rk), private :: rhoN1Prev
real(kind=rk), private :: uN1Prev(3)
real(kind=rk), private :: rhoN2Prev
real(kind=rk), private :: uN2Prev(3)
real(kind=rk), private :: rhoLodi
real(kind=rk), private :: uLodi(3)
integer, private :: normal(3)