This module contains boundary type definitions, different boundary treatment types, abtract interface and routine to load boundary table from config file
The boundary conditions are stored in boundary type definitions for each boundary which is defined in the main lua file.
boundary_condition = { }
The definitions there must equal the boundary definition within the mesh on disk, in terms of the amount of boundary conditions and the labels. A detailed description on the implementation details are given in tem_bc_module "boundary condition implementation"
This module will be used as a header to use boundary definitions in other modules.
Interface definition for the boundary condition subroutines
This abstract interface defines the interface for boundary routines. All boundary routines that need to be called via fnct function pointer need to implement this interface. In case of new boundary routines, mark them with a comment reffering to fnct in order to find the routine in case the interface needs to be changed.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(boundary_type) | :: | me |
field boundary type |
|||
real(kind=rk), | intent(inout) | :: | state(:) |
State array |
||
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 |
global treelm mesh |
||
integer, | intent(in) | :: | nSize |
size of state array ( in terms of elements ) |
||
integer, | intent(in) | :: | iLevel |
level which invokes boundary |
||
type(tem_time_type), | intent(in) | :: | sim_time |
global time information |
||
integer, | intent(in) | :: | neigh(:) |
global parameters |
||
type(mus_scheme_layout_type), | intent(in) | :: | layout |
scheme layout |
||
type(mus_field_prop_type), | intent(in) | :: | fieldProp |
Fluid property |
||
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 |
Interface definition for the boundary condition subroutines
This abstract interface defines the interface for bndForce calculation. calcBndForce in order to find the routine in case the interface needs to be changed.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(boundary_type), | intent(in) | :: | me |
field boundary type |
||
real(kind=rk), | intent(inout) | :: | bndForce(:,:) |
bndForce to fill |
||
real(kind=rk), | intent(inout) | :: | bndMoment(:,:) |
bndMom to fill |
||
integer, | intent(in) | :: | posInBndID(:) | |||
type(glob_boundary_type), | intent(in) | :: | globBC |
scheme global boundary type |
||
real(kind=rk), | intent(in) | :: | currState(:) |
current state array to access post-collision values |
||
type(tem_levelDesc_type), | intent(in) | :: | levelDesc |
iLevel descriptor |
||
integer, | intent(in) | :: | nSize |
size of state array ( in terms of elements ) |
||
integer, | intent(in) | :: | iLevel |
level which invokes boundary |
||
integer, | intent(in) | :: | neigh(:) |
global parameters |
||
type(mus_scheme_layout_type), | intent(in) | :: | layout |
scheme layout |
||
integer, | intent(in) | :: | nScalars |
number of Scalars in the scheme var system |
||
type(mus_convertFac_type), | intent(in) | :: | phyConvFac |
physics conversion factor |
Information about boundary elements
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
character(len=LabelLen), | public | :: | label |
name of this boundary |
|||
type(bc_elems_type), | public, | allocatable | :: | elemLvl(:) |
elements list of this boundary in different refinement level size is minLevel -> maxLevel |
||
logical, | public | :: | treat_corner |
Collect corner BC i.e elements which are interesected by multiple boundaries only for moments based BC |
|||
type(mus_bc_corner_type), | public | :: | cornerBC |
list corner boundary elements |
|||
integer, | public, | allocatable | :: | nElems(:) |
number of local (this process) boundary elements per level including ghostFromCoarser. GhostFromFiner are interpolated but ghostFromCoarser needs correct boundary value in fine level sub-iteration. |
||
integer, | public, | allocatable | :: | nElems_Fluid(:) |
number of local (this process) boundary elements per level wihtout Ghost elements |
||
integer, | public, | allocatable | :: | nElems_totalLevel(:) |
number of total (total processes) boundary elements per level |
||
integer, | public | :: | nElems_local | = | 0 |
number of local boundary elements |
|
integer, | public | :: | nElems_total | = | 0 |
number of total boundary elements |
|
logical, | public | :: | hasQVal | = | .false. |
whether this boundary requires qVal |
|
logical, | public | :: | qValInitialized | = | .false. |
has qVal initialized with default qVal = 0.5 |
|
logical, | public | :: | isWall | = | .false. |
if this is a wall or symmetry BC (implicit treated during streaming) |
|
integer, | public | :: | normal(3) |
Average normal direction of this boundary along layout%prevailDir Normal in elemLvl is normal direction per element and this is normal per boundary |
|||
integer, | public | :: | normalInd |
which is the index in the stencil corresponding to the normal vector? |
Boundary treatment data type. It include boundary treatment for only ONE field. For the same boundary elements, each field may have a different treatment. It includes function pointers and neighbor elements required by this boundary treatment
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | bc_id |
Boundary ID |
|||
character(len=LabelLen), | public | :: | BC_kind |
kind of this boundary |
|||
character(len=LabelLen), | public | :: | label |
name of this boundary |
|||
integer, | public | :: | nNeighs | = | 0 |
number of neighbors fluid element needed for extrapolation to get data at boundary element |
|
logical, | public | :: | curved | = | .false. |
Curved boundaries are treated with qValues and extrapolation of nonEq from 2nd neighbor |
|
real(kind=rk), | public | :: | bndMomRefPnt(3) |
reference point for boundary moment calculation |
|||
type(bc_neigh_type), | public, | allocatable | :: | neigh(:) |
Level wise neighbor information of boundary elements Each field may have a different handlement on the same boundary Thus requires a different neighborhood allocated in mus_alloc_fieldBC |
||
type(bc_field_elems_type), | public, | allocatable | :: | elemLvl(:) |
Level wise element information of boundary elements like stencil position in array of stencils, moments type for momentBC and LODI array for NRBC allocated in mus_alloc_fieldBC |
||
procedure(boundaryRoutine), | public, | pointer | :: | fnct | => | null() |
function pointer to boundary routine to call |
procedure(mus_proc_calcBndForce), | public, | pointer | :: | calcBndForce | => | null() |
function pointer to compute bndForce on wall |
type(bc_states_type), | public | :: | BC_states |
musubi bc state variables |
|||
type(grw_stringkeyvaluepairarray_type), | public | :: | varDict |
Dictionary of boundary variables with varDict%val()%key is the name of boundary variable and varDict%val()%value is the name of spacetime function variable |
|||
integer, | public | :: | order |
order of boundary which determines number of neighbor need for this boundary |
|||
real(kind=rk), | public | :: | qVal |
standard q-value for higher order boundaries without any definition in seeder |
|||
type(bc_nrbc_type), | public | :: | nrbc |
Non-reflective boundary type |
|||
real(kind=rk), | public | :: | slip_fac |
slip wall factor |
|||
type(bc_blackbox_membrane_type), | public | :: | blackbox_mem |
black box membrane boundary |
|||
logical, | public | :: | useComputeNeigh | = | .false. |
whether this boundary needs neighbors on compute stencil |
|
logical, | public | :: | evalBcVar_link | = | .false. |
Is true if this boundary requires boundary variables on boundary surface linkwise. Required to compute real coordinates points on boundary surface |
|
logical, | public | :: | requireNeighBufPre_nNext | = | .false. |
Is true only if boundary requires neighbuf Pre-collision values from next time step |
|
logical, | public | :: | requireNeighBufPre | = | .false. |
Is true only if boundary requires neighbuf Pre-collision values from current time step |
|
logical, | public | :: | requireNeighBufPost | = | .false. |
Is true only if boundary requires neighbuf Post-collision values |
|
logical, | public | :: | treat_corner | = | .false. |
Collect corner BC i.e elements which are interesected by multiple boundaries only for moments based BC |
|
type(array_type), | public, | allocatable | :: | links(:) |
Level-wise links that are to be updated size is minLevel:maxLevel allocated in mus_alloc_fieldBC |
||
type(bc_wall_bouzidi_type), | public, | allocatable | :: | bouzidi(:) |
Level wise wall bouzidi data size is minLevel:maxLevel |
||
type(bc_inlet_bouzidi_type), | public, | allocatable | :: | inletUbbQVal(:) |
Level wise inletUbbQVal data size is minLevel:maxLevel |
||
type(bc_inlet_bouzidi_type), | public, | allocatable | :: | inletBFL(:) |
Level wise inletBfl data size is minLevel:maxLevel |
||
type(bc_nonEqExpol_type), | public, | allocatable | :: | nonEqExpol(:) |
Level wise nonEquilibrium extrapolation data for link-wise implementation size is minLevel:maxLevel |
||
type(bc_outlet_type), | public, | allocatable | :: | outletExpol(:) |
Level wise outletExpol data size is minLevel:maxLevel |
||
type(mus_turb_wallFunc_type), | public | :: | turbwallFunc |
Turbulent wall model type contains function pointers to compute friction and stream-wise velocity. Also stores friction velocity and turbulent viscosity on boundary elements |
information needed for moments based boundary condition
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | nUnKnownPdfs |
Number of unknown state links to update |
|||
integer, | public, | allocatable | :: | knownMom_pos(:) |
known moments position in moments vector |
||
real(kind=rk), | public, | allocatable | :: | unKnownPdfs_MatInv(:,:) |
inverse matrix of unknown pdf matrix |
Level wise boundary elements information
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(dyn_intarray_type), | public | :: | elem |
Positions in levelDesc total list Its purpose is to get the treeID of BC elements size is globBC%nElems to use: levelDesc(iLevel)%total( globBC%elemLvl(iLevel)%elem%val(iElem) ) |
|||
type(grw_intarray_type), | public | :: | posInBcElemBuf |
Position of this boundary in the bc_elemBuffer bc_elemBuffer is growing array initial size: globBC%nElems It is initiated in mus_init_bc_elems of mus_bc_header_module Only non-wall BC needs elemBuffer |
|||
type(grw_int2darray_type), | public | :: | normal |
Normal vector for each boundary element pointing into the domain. normal is a growing array with size: normal%val(3, nElems) |
|||
type(grw_intarray_type), | public | :: | normalInd |
which is the index in the stencil corresponding to the normal vector? |
|||
type(grw_logical2darray_type), | public | :: | bitmask |
bit mask for each node holding directions which have to be updated. The bitmask points into the incoming direction into the flow domain, which actually we want to update * For PUSH, we write to the incoming position, as the kernel reads it from there without propagation. * For PULL, we need to write to the inverse direction, as the kernel performs a bounce back before reading it. However, this bounced back direction actually comes from the non-existent boundary element and would point into the incoming direction, so the value has to be treated and set as if it points really into the incoming direction. bitmask is a growing array, the values are in bitmask%val(:,:) 1st index size is QQN since center is not treated for bcElems |
|||
type(grw_real2darray_type), | public | :: | qVal |
The q-Values for the exact wall positions Its size: QQN, nElemsBC It is allocated in routine: allocateBCList assigned in routine: assignBCList |
contains information needed to treat corner nodes or nodes intersected by more than one boundary type
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public, | allocatable | :: | nElems(:) |
number of local boundary elements per level |
||
type(bc_elems_type), | public, | allocatable | :: | elemLvl(:) |
boundary neighbor in different refinement level |
||
integer, | public, | allocatable | :: | bcid(:,:) |
boundary id in each direction for each corner node size layout%stencil%QQ, nElems |
Wall bouzidi data for one level
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=rk), | public, | allocatable | :: | qVal(:) |
size is links(iLevel)%nVals |
||
real(kind=rk), | public, | allocatable | :: | cIn(:) | |||
real(kind=rk), | public, | allocatable | :: | cOut(:) | |||
real(kind=rk), | public, | allocatable | :: | cNgh(:) | |||
integer, | public, | allocatable | :: | inPos(:) |
size is links(iLevel)%nVals set in routine: mus_set_bouzidi |
||
integer, | public, | allocatable | :: | outPos(:) | |||
integer, | public, | allocatable | :: | nghPos(:) |
Provides bouzidi coefficients and q-values needed for link-wise implementation of certain inlet boundary conditions.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=rk), | public, | allocatable | :: | qVal(:) |
size is links(iLevel)%nVals |
||
real(kind=rk), | public, | allocatable | :: | cIn(:) | |||
real(kind=rk), | public, | allocatable | :: | cOut(:) | |||
real(kind=rk), | public, | allocatable | :: | cNgh(:) | |||
integer, | public, | allocatable | :: | inPos(:) |
size is links(iLevel)%nVals set in routine: mus_set_bouzidi |
||
integer, | public, | allocatable | :: | outPos(:) | |||
integer, | public, | allocatable | :: | nghPos(:) | |||
real(kind=rk), | public, | allocatable | :: | cVel(:) |
size is links(iLevel)%nVals |
||
integer, | public, | allocatable | :: | iDir(:) |
size is links(iLevel)%nVals set in routine: mus_set_bouzidi |
||
integer, | public, | allocatable | :: | posInBuffer(:) |
Provides coefficients needed for link-wise implementation of nonEquilibrium extrapolation scheme for boundary conditions.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=rk), | public, | allocatable | :: | c_w(:) |
size is links(iLevel)%nVals |
||
real(kind=rk), | public, | allocatable | :: | c_f(:) | |||
real(kind=rk), | public, | allocatable | :: | c_ff(:) | |||
real(kind=rk), | public, | allocatable | :: | c_neq_f(:) | |||
real(kind=rk), | public, | allocatable | :: | c_neq_ff(:) | |||
integer, | public, | allocatable | :: | iDir(:) |
size is links(iLevel)%nVals set in routine: mus_set_bouzidi |
||
integer, | public, | allocatable | :: | posInBuffer(:) | |||
integer, | public, | allocatable | :: | posInNeighBuf(:) | |||
integer, | public, | allocatable | :: | posInBCelems(:) |
Provides needed positions for link-wise implementation of outlet boundary condition outlet_expol
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public, | allocatable | :: | statePos(:) |
size is links(iLevel)%nVals |
||
integer, | public, | allocatable | :: | iElem(:) |
variable definition for non-reflective type of boundary conditions\n These boundary condition is taken from the paper:
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=rk), | public | :: | kappa |
specific heat ratio appears in eq 3: cs = sqrt( kappa * R * T ) |
|||
real(kind=rk), | public | :: | K_mod |
from eq 17: k = sigma * ( 1 - Ma^2 ) * cs / L |
|||
real(kind=rk), | public | :: | cs_mod |
used in eq 17 |
|||
real(kind=rk), | public | :: | sigma |
used in eq 17 |
|||
real(kind=rk), | public | :: | lodi_length |
length between inlet and outlet, represented by L in the paper |
|||
real(kind=rk), | public | :: | Ma_L |
Lattice Mach number characterised by lattice flow velocity |
Contains variables for black-box membrane boundary condition
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
character(len=labelLen), | public | :: | label |
type of membrance (AEM or CEM) |
|||
real(kind=rk), | public | :: | transNr |
transference number defining transfer property of ionic species on the membrance @note Todo check transNr constrain sumOfIonicSpecies(transNr) = 1 |
|||
real(kind=rk), | public | :: | solvTrans_coeff |
osmotic solvent transport coefficient |
contains all possible bc state variables needed for boundary
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(tem_bc_state_type), | public | :: | velocity |
Velocity at boundary |
|||
type(tem_bc_state_type), | public | :: | massFlowRate |
mass flow rate at boundary node for mfr (mass flow rate) boundary condition |
|||
type(tem_bc_state_type), | public | :: | pressure |
Pressure at boundary |
|||
type(tem_bc_state_type), | public | :: | moleFrac |
mole fraction for species boundary |
|||
type(tem_bc_state_type), | public | :: | moleFlux |
molar flux for species (c_i*u_i) |
|||
type(tem_bc_state_type), | public | :: | moleDens |
mole density for species (c_i) |
|||
type(tem_bc_state_type), | public | :: | moleDiff_flux |
molar diffusion flux for species |
|||
type(tem_bc_state_type), | public | :: |
probability density function for boundary |
||||
type(tem_bc_state_type), | public | :: | potential |
potential for Poisson boundary |
|||
type(tem_bc_state_type), | public | :: | surChargeDens |
surface charge density for Poisson Neumann boundary |
Simple array type which include array and its size
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public, | allocatable | :: | val(:) |
array |
||
integer, | public | :: | nVals |
size |
Level wise information about neighbor of boundary elements for a single field
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public, | allocatable | :: | posInState(:,:) |
Neighbor position in level-wise state array size is nNeighs, nElems allocated in routine: setFieldBCNeigh, mus_construction_module |
||
real(kind=rk), | public, | allocatable | :: | neighBufferPre_nNext(:,:) |
Pre-collision state values of neighbors on normal direction on next time step size is nNeighs, nElems*stencil%QQ It is allocated in routine update_BClists |
||
real(kind=rk), | public, | allocatable | :: | neighBufferPre(:,:) |
Pre-collision state values of neighbors on normal direction on previous time step size is nNeighs, nElems*stencil%QQ It is allocated in routine update_BClists |
||
real(kind=rk), | public, | allocatable | :: | neighBufferPost(:,:) |
Post-collision state values of neighbors on normal direction size is nNeighs, nElems*stencil%QQ It is allocated in routine update_BClists It is filled in fill_neighBuffer |
||
real(kind=rk), | public, | allocatable | :: | computeNeighBuf(:) |
Post-collision state values of neighbors on all directions at current time step. Its also a Pre-collision state values of an element next to boundary at next time step size is nElems * computeStencil%QQ It is allocated in routine update_BClists (mus_construction_module), filled in routine: fill_computeNeighBuf (mus_bc_general_module). it use AOS layout always! |
Contains field specific element information for each level
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public, | allocatable | :: | stencilPos(:) |
Position of stencil of each element in array of stencils in layout. Unique stencil label for boundary stencils are created with boundary label and stencil%cxDir therefore each stencil is limited to one boundary type Dimension: globBC%nElems(iLevel) allocated in mus_build_BCStencils (mus_construction_module) |
||
real(kind=rk), | public, | allocatable | :: | lodi(:,:,:) |
LODI array for the NRBC Dimension: 4, 3, globBC%nElems(iLevel) allocated in init_nrbc routine |
||
type(bc_moments_type), | public, | allocatable | :: | moments(:) |
defined moments position in moments matrix and inverse of unknown pdf matrix Dimension: bc%nElems(iLevel) |
||
integer, | public, | allocatable | :: | posInNghElems(:) |
Position in LevelDesc%neigh%NghElems size is globBC%nElems(iLevel) allocated in mus_build_BCStencils routine, mus_construction_module |
Read in the boundary conditions from the LUA parameter file.\n
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(boundary_type), | allocatable | :: | me(:) |
field boundary type |
||
type(tem_BC_prop_type), | intent(in) | :: | bc_prop |
boundary data from mesh |
||
type(flu_State) | :: | conf |
lua flu state |
|||
integer, | intent(in), | optional | :: | parent |
bc parent handle |
|
type(tem_varSys_type), | intent(inout) | :: | varSys |
Global variable system required to append annoymous boundary variables |
||
type(tem_stencilHeader_type) | :: | stencil |
stencil information |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(bc_elems_type), | intent(inout) | :: | me | |||
integer, | intent(in) | :: | nElems | |||
integer, | intent(in) | :: | QQN |
Number of direction excluding center since center is never treated for bc elems |
||
logical, | intent(in) | :: | hasQval |
It removes non-valid elements while still maintaining the origianl order. The given bc elements (elems) contains both valid and non-valid elements. Position of valid elements are given by posInBCElem. Valid elements are moved towards the start of the elems so that they become continuous in the elems.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | minLevel | |||
integer, | intent(in) | :: | maxLevel | |||
integer, | intent(in) | :: | nValid(minLevel:maxLevel) |
number of valid BC elements |
||
integer, | intent(in) | :: | posInBCElem(maxval(nElems),minLevel:maxLevel) |
their position in bc_elems_type |
||
integer, | intent(in) | :: | nElems(minLevel:maxLevel) |
BC elements information |
||
type(bc_elems_type), | intent(inout) | :: | elemLvl(minLevel:maxLevel) |
BC elements information |
It count valid (non-solid) elements in BC elements list. Input: minLevel, maxLevel LevelPointer LevelDesc nElems - number of BC elements elems - positions of BC elements in tree or levelPointer Output: nValid - number of valid BC elements posInBCElem - positions of valid elements in BC elements list
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | minLevel | |||
integer, | intent(in) | :: | maxLevel | |||
integer, | intent(in) | :: | levelPointer(:) |
Level Pointer ( position of a element in level desc ) |
||
type(tem_levelDesc_type), | intent(in) | :: | levelDesc(minLevel:maxLevel) |
Level Descriptor |
||
integer, | intent(in) | :: | nElems(minLevel:maxLevel) |
number of BC elements |
||
type(bc_elems_type), | intent(in) | :: | elemLvl(minLevel:maxLevel) |
BC elements list that contains their position in levelPointer |
||
integer, | intent(out) | :: | nValid(minLevel:maxLevel) |
number of valid (non-solid) elements |
||
integer, | intent(out) | :: | posInBCElem(maxval(nElems),minLevel:maxLevel) |
positions of valid elements in globBC elements list |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | nBCs | |||
integer, | intent(in) | :: | minLevel | |||
integer, | intent(in) | :: | maxLevel | |||
type(glob_boundary_type), | intent(in) | :: | me(nBCs) |
Set BC elements positions in LevelDesc%neigh%nghElems
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | minLevel | |||
integer, | intent(in) | :: | maxLevel | |||
integer, | intent(in) | :: | nStencils | |||
type(glob_boundary_type), | intent(in) | :: | globBC | |||
type(boundary_type), | intent(inout) | :: | BC |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | iField | |||
integer, | intent(in) | :: | ||||
integer, | intent(in) | :: | QQN | |||
integer, | intent(in) | :: | nScalars | |||
integer, | intent(in) | :: | nElems |
number of BC elements |
||
type(bc_elems_type), | intent(in) | :: | elemLvl | |||
integer, | intent(in) | :: | nSize |
number of BC elements |
||
integer, | intent(in) | :: | neigh(:) | |||
type(array_type), | intent(out) | :: | links |
Set necessary data for Wall Bouzidi BC bouzidi should be allocated beforehand
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | iLevel | |||
integer, | intent(in) | :: | ||||
integer, | intent(in) | :: | QQN | |||
integer, | intent(in) | :: | nScalars | |||
type(glob_boundary_type), | intent(in) | :: | globBC | |||
integer, | intent(in) | :: | cxDirInv(QQ) | |||
integer, | intent(in) | :: | varPos(:) | |||
type(bc_wall_bouzidi_type), | intent(inout) | :: | bouzidi |
cIn, cOut, cNgh should have size of nLinks |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(bc_wall_bouzidi_type), | allocatable | :: | me(:) | |||
integer, | intent(in) | :: | nVals(minLevel:maxLevel) | |||
integer, | intent(in) | :: | minLevel | |||
integer, | intent(in) | :: | maxLevel |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(boundary_type) | :: | me | ||||
integer, | intent(in) | :: | minLevel | |||
integer, | intent(in) | :: | maxLevel |
Set necessary data for BC velocity_bounceback_qval
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(bc_inlet_bouzidi_type), | intent(out), | allocatable | :: | me(:) |
setting type for bc |
|
type(treelmesh_type), | intent(in) | :: | tree |
using mesh information |
||
type(tem_stencilHeader_type), | intent(in) | :: | stencil |
for directions |
||
integer, | intent(in) | :: | nScalars |
number of scalars |
||
type(glob_boundary_type), | intent(in) | :: | globBC |
for number of elements in boundary and position in buffer |
||
type(tem_levelDesc_type), | intent(in) | :: | levelDesc(minLevel:maxLevel) |
level descriptor |
||
integer, | intent(in) | :: | varPos(:) |
for position of outgoing elements |
||
integer, | intent(in) | :: | nLinks(minLevel:maxLevel) |
for linkwise treatment |
||
integer, | intent(in) | :: | minLevel |
minimum and maximum level |
||
integer, | intent(in) | :: | maxLevel |
minimum and maximum level |
Bitmask is true for incoming direction
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(bc_inlet_bouzidi_type), | intent(out), | allocatable | :: | me(:) |
setting type for bc |
|
type(treelmesh_type), | intent(in) | :: | tree |
using mesh information |
||
type(tem_stencilHeader_type), | intent(in) | :: | stencil |
for directions |
||
integer, | intent(in) | :: | nScalars |
number of scalars |
||
type(glob_boundary_type), | intent(in) | :: | globBC |
for number of elements in boundary and position in buffer |
||
type(tem_levelDesc_type), | intent(in) | :: | levelDesc(minLevel:maxLevel) |
level descriptor |
||
integer, | intent(in) | :: | varPos(:) |
for position of elements |
||
integer, | intent(in) | :: | nLinks(minLevel:maxLevel) |
for linkwise treatment |
||
integer, | intent(in) | :: | minLevel |
minimum and maximum level |
||
integer, | intent(in) | :: | maxLevel |
minimum and maximum level |
Linkwise non-equilibrium extrapolation (can handle curved walls)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(bc_nonEqExpol_type), | intent(out), | allocatable | :: | me(:) |
setting type for bc |
|
logical, | intent(in) | :: | curved |
Curved or straight boundary |
||
type(treelmesh_type), | intent(in) | :: | tree |
using mesh information |
||
type(tem_stencilHeader_type), | intent(in) | :: | stencil |
for directions |
||
integer, | intent(in) | :: | nScalars |
number of scalars |
||
type(glob_boundary_type), | intent(in) | :: | globBC |
scheme global boundary type |
||
type(bc_neigh_type), | intent(in) | :: | bc_neigh(minLevel:maxLevel) |
boundary neighbor |
||
type(pdf_data_type), | intent(in) | :: | pdf(tree%global%minlevel:tree%global%maxlevel) |
contains global state vector |
||
type(tem_levelDesc_type), | intent(in) | :: | levelDesc(minLevel:maxLevel) |
level descriptor |
||
integer, | intent(in) | :: | varPos(:) |
for position of elements |
||
integer, | intent(in) | :: | nLinks(minLevel:maxLevel) |
for linkwise treatment |
||
integer, | intent(in) | :: | minLevel |
minimum and maximum level |
||
integer, | intent(in) | :: | maxLevel |
minimum and maximum level |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(bc_outlet_type), | intent(out), | allocatable | :: | me(:) |
setting type for bc |
|
type(tem_stencilHeader_type), | intent(in) | :: | stencil |
for directions |
||
type(glob_boundary_type), | intent(in) | :: | globBC |
number of scalars for number of elements in boundary and position in buffer |
||
integer, | intent(in) | :: | nLinks(minLevel:maxLevel) |
for position of elements Number of links on each level |
||
integer, | intent(in) | :: | minLevel |
minimum and maximum level |
||
integer, | intent(in) | :: | maxLevel |
minimum and maximum level |
This routines deallocates allocatables in field%bc boundary_type for dynamic load balancing
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(boundary_type), | intent(inout) | :: | me(nBCs) | |||
integer, | intent(in) | :: | nBCs | |||
integer, | intent(in) | :: | minLevel | |||
integer, | intent(in) | :: | maxLevel |
Set the coefficients of bouzidi linear interpolation boundary condition.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rk), | intent(in) | :: | qVal | |||
real(kind=rk), | intent(out) | :: | cIn | |||
real(kind=rk), | intent(out) | :: | cOut | |||
real(kind=rk), | intent(out) | :: | cNgh | |||
real(kind=rk), | intent(out) | :: | cVel |