Linkwise neumann potential non-equilibrium boundary condition for curved and straight walls (zero gradient). For straight wall, values are extrapolated along boundary normal instead of along the link. The accuracy of straight wall depends on the qVal defined in config file and default is set to 0.5
The pdf is decomposed into equilibrium (eq) and non-equilibrium (neq) part: - f_eq is calculated by weighting a fictitious potential, which is obtained by an extrapolation using the fluid neighbor(s) - f_neq is approximated by second-order extrapolation using the fluid neighbor(s) - for qVal < 0.75 even the second neighbor is used for the extrapolations - boundary potential (pot_b) has to be extrapolated using two fluid neighb: pot_b = (4*pot_f - pot_ff)/3 (typo in paper) - Linkwise: as much as possible is outsourced to the subroutine "mus_set_nonEqExpol"
NOTE: - possibility to extend the equation to extraplotate pot_b by a gradient if a non-zero one is desired (see: Huang H, Lee T S, and Shu C. “Thermal curved boundary treatment for the thermal lattice Boltzmann equation,” Int. J. Mod. Phys. C, vol. 17(05), pp. 631-643, 2006) - more accurate schemes to determine pot_b can be found in: Chen Q, Zhang X, and Zhang J. “Improved treatments for general boundary conditions in the lattice Boltzmann method for convection- diffusion and heat transfer processes,” Phys Rev E, vol. 88(3), 033304, 2013
Usage
boundary_condition = {
{ label = 'outer',
kind = 'potential_neumann_link',
curved = true
}
}
This is described in the paper: Luo, K.; Wu, J.; Yi HL. & Tan HP. (2016). A lattice Boltzmann method for electric field-space charge coupled problems. Proceedings of the 2016 Electrostatics Joint Conference (June 2016).
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.
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 | |||
---|---|---|---|---|---|---|---|
integer, | private | :: | iDir | ||||
real(kind=rk), | private | :: | feq_b | ||||
real(kind=rk), | private | :: | fneq_b | ||||
real(kind=rk), | private | :: | pot_b | ||||
real(kind=rk), | private | :: | feq_f | ||||
real(kind=rk), | private | :: | fneq_f | ||||
real(kind=rk), | private | :: | pot_f | ||||
real(kind=rk), | private | :: | feq_ff | ||||
real(kind=rk), | private | :: | fneq_ff | ||||
real(kind=rk), | private | :: | pot_ff | ||||
real(kind=rk), | private | :: | pdf_f(layout%fStencil%QQ) | ||||
real(kind=rk), | private | :: | pdf_ff(layout%fStencil%QQ) | ||||
real(kind=rk), | private | :: | surChargeDens_w(me%links(iLevel)%nVals) | ||||
integer, | private | :: | iLink | ||||
integer, | private | :: | |||||
integer, | private | :: | bcSCD_pos | ||||
real(kind=rk), | private | :: | inv_permittivity | ||||
real(kind=rk), | private | :: | normal(3) | ||||
real(kind=rk), | private | :: | surChargeDens_fac |