LBMNonEquilibriumExtrapolation

Non-equilibrium extrapolation boundary condition (Guo et al., 2002). Reconstructs the boundary distribution as f = feq(prescribed) + fneq(interior), where the missing moment is extrapolated from interior nodes. Density, velocity, and equilibrium are computed on-the-fly from the streamed population.

Implements the Non-Equilibrium Extrapolation Method (NEEM) boundary condition for Lattice Boltzmann simulations (Guo et al., 2002).

Overview

This boundary condition reconstructs the distribution function at the boundary as

f_i(\mathbf{x}_b) = f_i{eq}(\rho_b, \mathbf{u}_b) + f_i{neq}(\mathbf{x}_{n1})

where is the equilibrium distribution computed from the prescribed/extrapolated macroscopic quantities at the boundary, and is the non-equilibrium part extrapolated from interior nodes.

Two prescription modes are available via "prescribe_type":

  • velocity (default): The velocity is prescribed at the boundary and the density is extrapolated from the interior.

  • density: The density is prescribed and the velocity is extrapolated from the interior.

The extrapolation order is controlled by "order":

  • first (default): Uses one interior neighbor. where is the extrapolated quantity.

  • second: Uses two interior neighbors. for linear extrapolation of the non-prescribed quantity and the non-equilibrium part.

All macroscopic quantities (density, velocity) and the equilibrium distribution are computed on-the-fly from the current (post-streaming) population, ensuring they are always consistent with the latest state of the distribution function.

It supports domain faces (left, right, top, bottom, front, back).

Example Input File Syntax

[TensorComputes<<<{"href": "../../syntax/TensorComputes/index.html"}>>>]
  [Boundary<<<{"href": "../../syntax/TensorComputes/Boundary/index.html"}>>>]
    [left]
      type = LBMNonEquilibriumExtrapolation<<<{"description": "Non-equilibrium extrapolation boundary condition (Guo et al., 2002). Reconstructs the boundary distribution as f = f^eq(prescribed) + f^neq(interior), where the missing moment is extrapolated from interior nodes. Density, velocity, and equilibrium are computed on-the-fly from the streamed population.", "href": "LBMNonEquilibriumExtrapolation.html"}>>>
      buffer<<<{"description": "The buffer this compute is writing to"}>>> = f
      prescribe_type<<<{"description": "Quantity prescribed at the boundary. 'velocity': prescribe ux/uy/uz and extrapolate density. 'density': prescribe rho and extrapolate velocity."}>>> = velocity
      ux<<<{"description": "Prescribed x-velocity (prescribe_type = velocity)"}>>> = 0.005
      uy<<<{"description": "Prescribed y-velocity (prescribe_type = velocity)"}>>> = 0.0
      order<<<{"description": "Extrapolation order for the non-prescribed quantity. 'first': use one interior neighbor. 'second': use two interior neighbors (requires domain >= 3 nodes per side)."}>>> = first
      boundary<<<{"description": "Edges/Faces where boundary condition is applied."}>>> = left
    []
  []
[]
(test/tests/lbm/nee_2d_channel.i)
[TensorComputes<<<{"href": "../../syntax/TensorComputes/index.html"}>>>]
  [Boundary<<<{"href": "../../syntax/TensorComputes/Boundary/index.html"}>>>]
    [right]
      type = LBMNonEquilibriumExtrapolation<<<{"description": "Non-equilibrium extrapolation boundary condition (Guo et al., 2002). Reconstructs the boundary distribution as f = f^eq(prescribed) + f^neq(interior), where the missing moment is extrapolated from interior nodes. Density, velocity, and equilibrium are computed on-the-fly from the streamed population.", "href": "LBMNonEquilibriumExtrapolation.html"}>>>
      buffer<<<{"description": "The buffer this compute is writing to"}>>> = f
      prescribe_type<<<{"description": "Quantity prescribed at the boundary. 'velocity': prescribe ux/uy/uz and extrapolate density. 'density': prescribe rho and extrapolate velocity."}>>> = density
      prescribed_rho<<<{"description": "Prescribed density (prescribe_type = density)"}>>> = 1.0
      order<<<{"description": "Extrapolation order for the non-prescribed quantity. 'first': use one interior neighbor. 'second': use two interior neighbors (requires domain >= 3 nodes per side)."}>>> = first
      boundary<<<{"description": "Edges/Faces where boundary condition is applied."}>>> = right
    []
  []
[]
(test/tests/lbm/nee_2d_channel.i)
[TensorComputes<<<{"href": "../../syntax/TensorComputes/index.html"}>>>]
  [Boundary<<<{"href": "../../syntax/TensorComputes/Boundary/index.html"}>>>]
    [top]
      type = LBMNonEquilibriumExtrapolation<<<{"description": "Non-equilibrium extrapolation boundary condition (Guo et al., 2002). Reconstructs the boundary distribution as f = f^eq(prescribed) + f^neq(interior), where the missing moment is extrapolated from interior nodes. Density, velocity, and equilibrium are computed on-the-fly from the streamed population.", "href": "LBMNonEquilibriumExtrapolation.html"}>>>
      buffer<<<{"description": "The buffer this compute is writing to"}>>> = f
      prescribe_type<<<{"description": "Quantity prescribed at the boundary. 'velocity': prescribe ux/uy/uz and extrapolate density. 'density': prescribe rho and extrapolate velocity."}>>> = velocity
      ux<<<{"description": "Prescribed x-velocity (prescribe_type = velocity)"}>>> = 0.005
      uy<<<{"description": "Prescribed y-velocity (prescribe_type = velocity)"}>>> = 0.0
      order<<<{"description": "Extrapolation order for the non-prescribed quantity. 'first': use one interior neighbor. 'second': use two interior neighbors (requires domain >= 3 nodes per side)."}>>> = second
      boundary<<<{"description": "Edges/Faces where boundary condition is applied."}>>> = top
    []
  []
[]
(test/tests/lbm/nee_2d_all_walls.i)

Input Parameters

  • boundaryEdges/Faces where boundary condition is applied.

    C++ Type:MooseEnum

    Options:top, bottom, left, right, front, back, wall, regional

    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

Required Parameters

  • orderfirstExtrapolation order for the non-prescribed quantity. 'first': use one interior neighbor. 'second': use two interior neighbors (requires domain >= 3 nodes per side).

    Default:first

    C++ Type:MooseEnum

    Options:first, second

    Controllable:No

    Description:Extrapolation order for the non-prescribed quantity. 'first': use one interior neighbor. 'second': use two interior neighbors (requires domain >= 3 nodes per side).

  • prescribe_typevelocityQuantity prescribed at the boundary. 'velocity': prescribe ux/uy/uz and extrapolate density. 'density': prescribe rho and extrapolate velocity.

    Default:velocity

    C++ Type:MooseEnum

    Options:velocity, density

    Controllable:No

    Description:Quantity prescribed at the boundary. 'velocity': prescribe ux/uy/uz and extrapolate density. 'density': prescribe rho and extrapolate velocity.

  • prescribed_rho1.0Prescribed density (prescribe_type = density)

    Default:1.0

    C++ Type:std::string

    Controllable:No

    Description:Prescribed density (prescribe_type = density)

  • ux0.0Prescribed x-velocity (prescribe_type = velocity)

    Default:0.0

    C++ Type:std::string

    Controllable:No

    Description:Prescribed x-velocity (prescribe_type = velocity)

  • uy0.0Prescribed y-velocity (prescribe_type = velocity)

    Default:0.0

    C++ Type:std::string

    Controllable:No

    Description:Prescribed y-velocity (prescribe_type = velocity)

  • uz0.0Prescribed z-velocity (prescribe_type = velocity)

    Default:0.0

    C++ Type:std::string

    Controllable:No

    Description:Prescribed z-velocity (prescribe_type = velocity)

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