- boundaryEdges/Faces where boundary condition is applied.
C++ Type:MooseEnum
Controllable:No
Description:Edges/Faces where boundary condition is applied.
- bufferThe buffer this compute is writing to
C++ Type:std::string
Controllable:No
Description:The buffer this compute is writing to
- f_oldOld state distribution function
C++ Type:std::string
Controllable:No
Description:Old state distribution function
- feqEquilibrium distribution function
C++ Type:std::string
Controllable:No
Description:Equilibrium distribution function
- rhoFluid density
C++ Type:std::string
Controllable:No
Description:Fluid density
- velocityFluid velocity
C++ Type:std::string
Controllable:No
Description:Fluid velocity
LBMDirichletBC
LBMDirichletBC object
Implements a Dirichlet boundary condition for Lattice Boltzmann simulations. It fixes the value of a macroscopic variable (like density or temperature) at the boundary.
Overview
This boundary condition enforces a specified value at the boundaries. This boundary conditions computes all directions by applying Non-Equilibrium Boundary Condition (NEBC). This means that the non-equilibirum part of the distribution function is computed from the existing values in the current cell and the equilibrium part is computed from the prescribed values at the boundary.
It supports domain faces (left, right, top, bottom, front, back) and wall and regional for solid-embedded geometries. For 3D binary media masks, adjacent-to-solid cells are handled by a specialized path. The regional boundary enables users to mark different walls of the domain with different values and apply Neumann condition only in those regions.
Please note that, this boundary condition is not recommended for prescribed velocity boundary conditions. For that, please use LBMFixedFirstOrderBC
Example Input File Syntax
[TensorComputes]
[Boundary]
[walls]
type = LBMDirichletBC
buffer = g
f_old = gpc
feq=geq
velocity = velocity
rho = T
value = 1.0
region_id = 2
boundary = regional
[]
[]
[]!listing-end
Input Parameters
- region_id0Region ID for regional boundary condition
C++ Type:int
Controllable:No
Description:0Region ID for regional boundary condition
- value0.0Value at the boundary
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:0.0Value at the boundary
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:No
Description:Set the enabled status of the MooseObject.
Advanced Parameters
Input Files
(test/tests/lbm/dirichlet_wall.i)
[Domain]
dim = 2
nx = 11
ny = 11
mesh_mode=DUMMY
parallel_mode = REAL_SPACE
periodic_directions = 'X Y'
[]
[Stencil]
[d2q9]
type = LBMD2Q9
[]
[]
[TensorBuffers]
[f]
type = LBMTensorBuffer
buffer_type = df
[]
[feq]
type = LBMTensorBuffer
buffer_type = df
[]
[fpc]
type = LBMTensorBuffer
buffer_type = df
[]
[T]
type=LBMTensorBuffer
buffer_type = ms
[]
[velocity]
type = LBMTensorBuffer
buffer_type = mv
[]
[binary_media]
type = LBMTensorBuffer
file = binary_media.h5
is_integer = true
buffer_type = ms
[]
[]
[TensorComputes]
[Initialize]
[init_T]
type = LBMConstantTensor
buffer = T
constants = 1.0
[]
[equilibrium]
type = LBMEquilibrium
buffer = feq
bulk = T
velocity = velocity
[]
[non_equilibrium]
type = LBMEquilibrium
buffer = f
bulk = T
velocity = velocity
[]
[post_collision_equilibrium]
type = LBMEquilibrium
buffer = fpc
bulk = T
velocity = velocity
[]
[]
[Solve]
[T]
type = LBMComputeDensity
buffer = T
f = f
[]
[]
[Boundary]
[wall]
type = LBMDirichletBC
buffer = f
f_old = fpc
feq = feq
velocity = velocity
rho = T
value = 1.1
boundary = wall
[]
[]
[]
[Problem]
type = LatticeBoltzmannProblem
substeps = 1
binary_media = binary_media
[]
[Postprocessors]
[velocity_min]
type = TensorExtremeValuePostprocessor
buffer = velocity
value_type = MIN
[]
[velocity_max]
type = TensorExtremeValuePostprocessor
buffer = velocity
value_type = MAX
[]
[density_min]
type = TensorExtremeValuePostprocessor
buffer = T
value_type = MIN
[]
[densty_max]
type = TensorExtremeValuePostprocessor
buffer = T
value_type = MAX
[]
[]
[Executioner]
type = Transient
num_steps = 5
[]
[Outputs]
file_base = dirichlet_wall
csv = true
[]
(examples/lbm/natural_convection_3D/convection.i)
[Domain]
dim = 3
nx = 270
ny = 270
nz = 405
xmax = 270
ymax = 270
zmax = 405
device_names='cpu'
parallel_mode = REAL_SPACE
periodic_directions = 'X Y Z'
floating_precision=SINGLE
[]
[Stencil]
[d3q19]
type = LBMD3Q19
[]
[]
[TensorBuffers]
# Simulation binary media
[binary_media]
type = LBMTensorBuffer
file = binary_media.h5
buffer_type = ms
is_integer = true
[]
# Density distribution functions
[f]
type = LBMTensorBuffer
buffer_type = df
[]
[feq]
type = LBMTensorBuffer
buffer_type = df
[]
[fpc]
type = LBMTensorBuffer
buffer_type = df
[]
# Temperature distribution functions
[g]
type = LBMTensorBuffer
buffer_type = df
[]
[geq]
type = LBMTensorBuffer
buffer_type = df
[]
[gpc]
type = LBMTensorBuffer
buffer_type = df
[]
# Fluid macroscopic variables: density and velocity
[density]
type = LBMTensorBuffer
buffer_type = ms
[]
[velocity]
type = LBMTensorBuffer
buffer_type = mv
[]
[speed]
type=LBMTensorBuffer
buffer_type = ms
[]
# Temperature macroscpic variables: temperature and 'velocity'
[T]
type = LBMTensorBuffer
buffer_type = ms
[]
# Forces
[F]
type = LBMTensorBuffer
buffer_type = mv
[]
[]
[TensorComputes]
[Initialize]
[density]
type = LBMConstantTensor
buffer = density
constants = 'rho0'
[]
[velocity]
type = LBMConstantTensor
buffer = velocity
constants = '0.0 0.0 0.0'
[]
[temperature]
type = LBMConstantTensor
buffer = T
constants = T_C
[]
[equilibrium_fluid]
type = LBMEquilibrium
buffer = feq
bulk = density
velocity = velocity
[]
[equilibrium_fluid_total]
type = LBMEquilibrium
buffer = f
bulk = density
velocity = velocity
[]
[equilibrium_fluid_pc]
type = LBMEquilibrium
buffer = fpc
bulk = density
velocity = velocity
[]
[equilibrium_temperature]
type = LBMEquilibrium
buffer = geq
bulk = T
velocity = velocity
[]
[equilibrium_temperature_total]
type = LBMEquilibrium
buffer = g
bulk = T
velocity = velocity
[]
[equilibrium_temperature_pc]
type = LBMEquilibrium
buffer = gpc
bulk = T
velocity = velocity
[]
[]
#### Compute ####
[Solve]
# For temperature
[Temperature]
type = LBMComputeDensity
buffer = T
f = g
[]
# For fluid
[Fluid_density]
type = LBMComputeDensity
buffer = density
f = f
[]
[Fluid_velocity]
type = LBMComputeVelocity
buffer = velocity
f = f
rho = density
forces = F
enable_forces = true
[]
# For temperature
[Equilibrium_temperature]
type = LBMEquilibrium
buffer = geq
bulk = T
velocity = velocity
[]
[Collision_temperature]
type = LBMBGKCollision
buffer = gpc
f = g
feq = geq
tau0 = tau_T
[]
# For fluid
[Compute_forces]
type = LBMComputeForces
buffer = F
rho0 = 'rho0'
temperature = T
T0 = 1.00
enable_buoyancy = true
gravity = g
gravity_direction = 2
[]
[Equilibrium_fluid]
type = LBMEquilibrium
buffer = feq
bulk = density
velocity = velocity
[]
[Collision_fluid]
type = LBMBGKCollision
buffer = fpc
f = f
feq = feq
tau0 = tau_f
[]
[Apply_forces]
type = LBMApplyForces
buffer = fpc
velocity = velocity
rho = density
forces = F
tau0 = tau_f
[]
[Residual]
type = LBMComputeResidual
speed = T
# TODO this buffer is redundant, but avoids 'missing parameter' error
buffer = T
[]
[]
#### Boundary ####
[Boundary]
##### for fluid
[wall]
type = LBMBounceBack
buffer = f
f_old = fpc
boundary = wall
[]
##### for temperature
[heat_source]
type = LBMNeumannBC
buffer = g
f_old = gpc
feq=geq
velocity = velocity
rho = T
gradient = 0.001
region_id = 3
boundary = regional
[]
[walls]
type = LBMDirichletBC
buffer = g
f_old = gpc
feq=geq
velocity = velocity
rho = T
value = 1.0
region_id = 2
boundary = regional
[]
[]
[]
[TensorSolver]
type = LBMStream
buffer = 'f g'
f_old = 'fpc gpc'
root_compute = Residual
[]
[Problem]
type = LatticeBoltzmannProblem
binary_media = binary_media
scalar_constant_names = 'rho0 T_C T_H tau_f tau_T g'
scalar_constant_values = '1.0 1.0 1.05 0.55 0.55 0.01'
substeps = 100
print_debug_output = true
[]
[Executioner]
type = Transient
num_steps = 1000
[]
[TensorOutputs]
[xdmf2]
type = XDMFTensorOutput
buffer = 'T density velocity'
output_mode = 'Cell Cell Cell'
enable_hdf5 = true
[]
[]
(test/tests/lbm/dirichlet_box.i)
[Domain]
dim = 3
nx = 5
ny = 5
nz = 5
mesh_mode = DUMMY
parallel_mode = REAL_SPACE
periodic_directions = 'X Y Z'
[]
[Stencil]
[d3q19]
type = LBMD3Q19
[]
[]
[TensorBuffers]
[f]
type = LBMTensorBuffer
buffer_type = df
[]
[feq]
type = LBMTensorBuffer
buffer_type = df
[]
[fpc]
type = LBMTensorBuffer
buffer_type = df
[]
[density]
type=LBMTensorBuffer
buffer_type = ms
[]
[velocity]
type = LBMTensorBuffer
buffer_type = mv
[]
[]
[TensorComputes]
[Initialize]
[init_density]
type = LBMConstantTensor
buffer = density
constants = 1.0
[]
[equilibrium]
type = LBMEquilibrium
buffer = feq
bulk = density
velocity = velocity
[]
[non_equilibrium]
type = LBMEquilibrium
buffer = f
bulk = density
velocity = velocity
[]
[post_collision_equilibrium]
type = LBMEquilibrium
buffer = fpc
bulk = density
velocity = velocity
[]
[]
[Solve]
[density]
type = LBMComputeDensity
buffer = density
f = f
[]
[]
[Boundary]
[left]
type = LBMDirichletBC
buffer = f
f_old = fpc
feq = feq
velocity = velocity
rho = density
value = 1.1
boundary = left
[]
[right]
type = LBMDirichletBC
buffer = f
f_old = fpc
feq = feq
velocity = velocity
rho = density
value = 1.1
boundary = right
[]
[top]
type = LBMDirichletBC
buffer = f
f_old = fpc
feq = feq
velocity = velocity
rho = density
value = 1.1
boundary = top
[]
[bottom]
type = LBMDirichletBC
buffer = f
f_old = fpc
feq = feq
velocity = velocity
rho = density
value = 1.1
boundary = bottom
[]
[front]
type = LBMDirichletBC
buffer = f
f_old = fpc
feq = feq
velocity = velocity
rho = density
value = 1.1
boundary = front
[]
[back]
type = LBMDirichletBC
buffer = f
f_old = fpc
feq = feq
velocity = velocity
rho = density
value = 1.1
boundary = back
[]
[]
[]
[Problem]
type = LatticeBoltzmannProblem
substeps = 1
[]
[Postprocessors]
[velocity_min]
type = TensorExtremeValuePostprocessor
buffer = velocity
value_type = MIN
[]
[velocity_max]
type = TensorExtremeValuePostprocessor
buffer = velocity
value_type = MAX
[]
[density_min]
type = TensorExtremeValuePostprocessor
buffer = density
value_type = MIN
[]
[densty_max]
type = TensorExtremeValuePostprocessor
buffer = density
value_type = MAX
[]
[]
[Executioner]
type = Transient
num_steps = 5
[]
[Outputs]
file_base = dirichlet_box
csv = true
[]
(test/tests/lbm/dirichlet_regional.i)
[Domain]
dim = 2
nx = 11
ny = 11
mesh_mode=DUMMY
parallel_mode = REAL_SPACE
periodic_directions = 'X Y'
[]
[Stencil]
[d2q9]
type = LBMD2Q9
[]
[]
[TensorBuffers]
[f]
type = LBMTensorBuffer
buffer_type = df
[]
[feq]
type = LBMTensorBuffer
buffer_type = df
[]
[fpc]
type = LBMTensorBuffer
buffer_type = df
[]
[T]
type=LBMTensorBuffer
buffer_type = ms
[]
[velocity]
type = LBMTensorBuffer
buffer_type = mv
[]
[binary_media]
type = LBMTensorBuffer
file = binary_regional.h5
is_integer = true
buffer_type = ms
[]
[]
[TensorComputes]
[Initialize]
[init_T]
type = LBMConstantTensor
buffer = T
constants = 1.0
[]
[equilibrium]
type = LBMEquilibrium
buffer = feq
bulk = T
velocity = velocity
[]
[non_equilibrium]
type = LBMEquilibrium
buffer = f
bulk = T
velocity = velocity
[]
[post_collision_equilibrium]
type = LBMEquilibrium
buffer = fpc
bulk = T
velocity = velocity
[]
[]
[Solve]
[T]
type = LBMComputeDensity
buffer = T
f = f
[]
[]
[Boundary]
[regional]
type = LBMDirichletBC
buffer = f
f_old = fpc
feq = feq
velocity = velocity
rho = T
value = 1.1
region_id = 2
boundary = regional
[]
[]
[]
[Problem]
type = LatticeBoltzmannProblem
substeps = 1
binary_media = binary_media
[]
[Postprocessors]
[velocity_min]
type = TensorExtremeValuePostprocessor
buffer = velocity
value_type = MIN
[]
[velocity_max]
type = TensorExtremeValuePostprocessor
buffer = velocity
value_type = MAX
[]
[density_min]
type = TensorExtremeValuePostprocessor
buffer = T
value_type = MIN
[]
[densty_max]
type = TensorExtremeValuePostprocessor
buffer = T
value_type = MAX
[]
[]
[Executioner]
type = Transient
num_steps = 5
[]
[Outputs]
file_base = dirichlet_regional
csv = true
[]
(examples/lbm/Pebbles/pebbles.i)
[Domain]
dim = 3
nx = 240
ny = 50
nz = 50
xmax = 240
ymax = 50
zmax = 50
device_names='cpu'
# floating_precision = 'single'
parallel_mode = REAL_SPACE
periodic_directions = 'X Y'
[]
[Stencil]
[d3q19]
type = LBMD3Q19
[]
[]
[TensorBuffers]
# Density distribution functions
[f]
type = LBMTensorBuffer
buffer_type = df
[]
[feq]
type = LBMTensorBuffer
buffer_type = df
[]
[fpc]
type = LBMTensorBuffer
buffer_type = df
[]
# Temperature distribution functions
[g]
type = LBMTensorBuffer
buffer_type = df
[]
[geq]
type = LBMTensorBuffer
buffer_type = df
[]
[gpc]
type = LBMTensorBuffer
buffer_type = df
[]
# Fluid macroscopic variables: density and velocity
[density]
type = LBMTensorBuffer
buffer_type = ms
[]
[velocity]
type = LBMTensorBuffer
buffer_type = mv
[]
[speed]
type=LBMTensorBuffer
buffer_type = ms
[]
# Temperature macroscpic variables: temperature and 'velocity'
[T]
type = LBMTensorBuffer
buffer_type = ms
[]
# Forces
[F]
type = LBMTensorBuffer
buffer_type = mv
[]
# Simulation domain
[binary_media]
type = LBMTensorBuffer
buffer_type = ms
file = 'binary_media.h5'
is_integer = true
[]
[]
[TensorComputes]
#### Initialzie ####
[Initialize]
[density]
type = LBMConstantTensor
buffer = density
constants = 'rho0'
[]
[velocity]
type = LBMConstantTensor
buffer = velocity
constants = '0.0 0.0'
[]
[temperature]
type = LBMConstantTensor
buffer = T
constants = T_C
[]
[equilibrium_fluid]
type = LBMEquilibrium
buffer = feq
bulk = density
velocity = velocity
[]
[equilibrium_fluid_total]
type = LBMEquilibrium
buffer = f
bulk = density
velocity = velocity
[]
[equilibrium_fluid_pc]
type = LBMEquilibrium
buffer = fpc
bulk = density
velocity = velocity
[]
[equilibrium_temperature]
type = LBMEquilibrium
buffer = geq
bulk = T
velocity = velocity
[]
[equilibrium_temperature_total]
type = LBMEquilibrium
buffer = g
bulk = T
velocity = velocity
[]
[equilibrium_temperature_pc]
type = LBMEquilibrium
buffer = gpc
bulk = T
velocity = velocity
[]
# [t_wall_hot_init]
# type = LBMDirichletWallBC
# buffer = g
# f_old = gpc
# value = T_H
# velocity = velocity
# boundary = wall
# []
[]
#### Compute ####
[Solve]
# For temperature
[Temperature]
type = LBMComputeDensity
buffer = T
f = g
[]
# For fluid
[Fluid_density]
type = LBMComputeDensity
buffer = density
f = f
[]
[Fluid_velocity]
type = LBMComputeVelocity
buffer = velocity
f = f
rho = density
forces = F
enable_forces = true
[]
# For temperature
[Equilibrium_temperature]
type = LBMEquilibrium
buffer = geq
bulk = T
velocity = velocity
[]
[Collision_temperature]
type = LBMMRTCollision
buffer = gpc
f = g
feq = geq
tau0 = tau_T
[]
# For fluid
[Compute_forces]
type = LBMComputeForces
buffer = F
rho0 = 'rho0'
temperature = T
T0 = T_H
enable_buoyancy = true
gravity = g
gravity_direction=0
[]
[Equilibrium_fluid]
type = LBMEquilibrium
buffer = feq
bulk = density
velocity = velocity
[]
[Collision_fluid]
type = LBMMRTCollision
buffer = fpc
f = f
feq = feq
tau0 = tau_f
[]
[Apply_forces]
type = LBMApplyForces
buffer = fpc
velocity = velocity
rho = density
forces = F
tau0 = tau_f
[]
[speed]
type=LBMComputeVelocityMagnitude
buffer=speed
velocity=velocity
[]
[residual]
type = LBMComputeResidual
buffer = speed
speed = speed
[]
[]
#### Boundary ####
[Boundary]
##### for fluid
[inlet]
type = LBMFixedFirstOrderBC
buffer = f
f = f
value = u0
boundary = left
[]
[outlet]
type = LBMMicroscopicZeroGradientBC
buffer = f
boundary = right
[]
[top]
type = LBMBounceBack
buffer = f
f_old = fpc
boundary = top
# exclude_corners_x = true
[]
[bottom]
type = LBMBounceBack
buffer = f
f_old = fpc
boundary = bottom
# exclude_corners_x = true
[]
[front]
type = LBMBounceBack
buffer = f
f_old = fpc
boundary = front
# exclude_corners_x = true
[]
[back]
type = LBMBounceBack
buffer = f
f_old = fpc
boundary = back
# exclude_corners_x = true
[]
[wall]
type = LBMBounceBack
buffer = f
f_old = fpc
boundary = wall
[]
##### for temperature
[t_inlet]
type = LBMFixedZerothOrderBC
buffer = g
f = g
value = T_C
boundary = left
[]
[t_outlet]
type = LBMMicroscopicZeroGradientBC
buffer = g
boundary = right
[]
[t_top]
type = LBMBounceBack
buffer = g
f_old = gpc
boundary = top
[]
[t_bottom]
type = LBMBounceBack
buffer = g
f_old = gpc
boundary = bottom
[]
[t_front]
type = LBMBounceBack
buffer = g
f_old = gpc
boundary = front
[]
[t_back]
type = LBMBounceBack
buffer = g
f_old = gpc
boundary = back
[]
[t_wall_hot]
type = LBMDirichletBC
buffer = g
f_old = gpc
feq = geq
velocity = velocity
rho = T
value = 1.2
boundary = wall
[]
[]
[]
[TensorSolver]
type = LBMStream
buffer = 'f g'
f_old = 'fpc gpc'
root_compute = residual
[]
[Problem]
type = LatticeBoltzmannProblem
substeps = 20
scalar_constant_names = 'rho0 T_C T_H tau_f tau_T g u0'
scalar_constant_values = '1.0 1.0 1.2 0.9 0.9 0.001 0.001'
is_binary_media = true
binary_media = binary_media
[]
[Postprocessors]
[reynolds]
type = ComputeReynoldsNumber
buffer = speed
tau = tau_f
diameter = 15
[]
[]
[Executioner]
type = Transient
num_steps = 2000
[]
# [TensorOutputs]
# [xdmf2]
# type = XDMFTensorOutput
# buffer = 'binary_media'
# output_mode = 'Cell'
# enable_hdf5 = true
# []
# []
[TensorOutputs]
[xdmf2]
type = XDMFTensorOutput
buffer = 'T velocity density binary_media'
output_mode = 'Cell Cell Cell Cell'
enable_hdf5 = true
[]
[]