LBMComputeEffectiveRelaxation

Compute local effective relaxation time matrix based on local pore size and Knudsen number.

This compute object calculates a spatially varying effective relaxation time matrix for rarefied gas Lattice Boltzmann simulations. It accounts for slip and transitional flow regime effects through the local pore size and Knudsen number fields. Currently limited to D2Q9 stencils.

Overview

For rarefied gas flows the standard single relaxation time is insufficient because the mean free path of gas molecules becomes comparable to the pore size. This object computes a per-node diagonal relaxation matrix with three distinct relaxation times for the 9 moment modes of D2Q9 MRT collision:

Shear relaxation ()

Controls viscous stress relaxation with a slip-corrected form:

\tau_s = \frac{1}{2} + \sqrt{\frac{6}{\pi}} \frac{d_p \cdot \text{Kn}}{1 + 2\,\text{Kn}}

where is the local pore size (in lattice units) and is the local Knudsen number.

Energy flux relaxation ()

Derived from second-order slip boundary theory:

\tau_q = \frac{1}{2} + \frac{3 + \pi \, A_2 \, (2\tau_s - 1)^2}{8\,(2\tau_s - 1)}

where is the second-order slip coefficient (default 0.8).

Diffusion relaxation ()

Based on the ratio of mean free path to the effective pore spacing:

\tau_d = \frac{1}{2} + \frac{3\sqrt{3}}{8} \frac{\lambda}{dx \, (1 + 2\,\text{Kn})}

where is the molecular mean free path and is the physical grid spacing.

Relaxation matrix layout

The output buffer has shape (Nx, Ny, 1, 9) and stores the inverse** of each relaxation time (i.e. ) for compatibility with the MRT collision operator. The 9 entries per node are:

IndexModeValue
0Conserved (density)1
1Conserved1/1.1
2Conserved1/1.2
3Diffusion
4Energy flux
5Diffusion
6Energy flux
7Shear stress
8Shear stress

Requirements

  • A binary_media buffer must be defined in LatticeBoltzmannProblem (solid cells are zeroed out).

  • Only D2Q9 stencils are currently supported.

  • Input buffers local_pore_size and local_Knudsen_number must be provided (typically loaded from HDF5 files).

Example Input File Syntax

[TensorComputes<<<{"href": "../../syntax/TensorComputes/index.html"}>>>]
  [Initialize<<<{"href": "../../syntax/TensorComputes/Initialize/index.html"}>>>]
    [relaxation_matrix_init]
      type = LBMComputeEffectiveRelaxation<<<{"description": "Compute local effective relaxation time matrix based on local pore size and Knudsen number.", "href": "LBMComputeEffectiveRelaxation.html"}>>>
      buffer<<<{"description": "The buffer this compute is writing to"}>>> = relaxation_matrix
      local_pore_size<<<{"description": "Local pore size"}>>> = local_pore
      local_Knudsen_number<<<{"description": "Local Knudsen number"}>>> = Kn
      mfp<<<{"description": "Mean free path of the system, (meters)"}>>> = 7.904614716131531e-10
      dx<<<{"description": "Domain resolution, (meters)"}>>> = 0.122e-9
      A2<<<{"description": "Second order slip boundary constant"}>>> = 0.82
    []
  []
[]
(examples/lbm/rarefied_gas/channel.i)

The relaxation matrix is then passed to the MRT collision operator:

[TensorComputes<<<{"href": "../../syntax/TensorComputes/index.html"}>>>]
  [Solve<<<{"href": "../../syntax/TensorComputes/Solve/index.html"}>>>]
    [collision]
      type = LBMMRTCollision<<<{"description": "Template object for LBM collision dynamics", "href": "LBMCollisionDynamics.html"}>>>
      buffer<<<{"description": "The buffer this compute is writing to"}>>> = fpc
      f<<<{"description": "Input buffer distribution function"}>>> = f
      feq<<<{"description": "Input buffer equilibrium distribution function"}>>> = feq
      is_dynamic_relaxation<<<{"description": "Whether or not to use dynamic relaxation."}>>> = true
      local_relaxation_matrix<<<{"description": "Locally computed diagonal relaxation matrix"}>>> = relaxation_matrix
      projection<<<{"description": "Whether or not to project non-equilibrium onto Hermite space."}>>> = true
    []
  []
[]
(examples/lbm/rarefied_gas/channel.i)

Input Parameters

  • bufferThe buffer this compute is writing to

    C++ Type:std::string

    Controllable:No

    Description:The buffer this compute is writing to

  • local_Knudsen_numberLocal Knudsen number

    C++ Type:std::string

    Controllable:No

    Description:Local Knudsen number

  • local_pore_sizeLocal pore size

    C++ Type:std::string

    Controllable:No

    Description:Local pore size

Required Parameters

  • A20.8Second order slip boundary constant

    Default:0.8

    C++ Type:std::string

    Controllable:No

    Description:Second order slip boundary constant

  • dx1.0e-9Domain resolution, (meters)

    Default:1.0e-9

    C++ Type:std::string

    Controllable:No

    Description:Domain resolution, (meters)

  • mfp1.0e-9Mean free path of the system, (meters)

    Default:1.0e-9

    C++ Type:std::string

    Controllable:No

    Description:Mean free path of the system, (meters)

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