The Lattice-Boltzmann model solves the one-particle density function
\(f\left( \varvec{x},\,\varvec{c},\,t\right)\), which is defined as the probability of finding one ideally pointwise and indivisible portion of fluid with velocity in
\(\left[ \varvec{c},\,\varvec{c}+d\varvec{c}\right]\) and position in
\(\left[ \varvec{x},\,\varvec{x}+d\varvec{x}\right]\) at the time
t. The method is mesoscopic insofar as the observable macroscopic fields of density
\(\rho \left( \varvec{x},\,t\right)\), velocity
\(\varvec{u}\left( \varvec{x},\,t\right)\) and shear stress
\(\sigma \left( \varvec{x},\,t\right)\) are not directly resolved—rather, they are evaluated from
f’s first three moments [
44]:
$$\begin{aligned} \rho= & {} \int f\;\text {d}\varvec{c}; \end{aligned}$$
(9)
$$\begin{aligned} \rho \,\varvec{u}= & {} \int f\,\varvec{c}\;\text {d}\varvec{c};\end{aligned}$$
(10)
$$\begin{aligned} \rho \,\varvec{u}\otimes \varvec{u}= & {} \sigma + \int f\,\varvec{c}\otimes \varvec{c}\;\text {d}\varvec{c}. \end{aligned}$$
(11)
f’s continuity equation in the phase space
\(\Phi \left( \varvec{x},\,\varvec{c}\right)\) takes the name of the Boltzmann equation:
$$\begin{aligned} \left( \partial _t + \varvec{c}\cdot \nabla \right) f = \mathscr {C}\left[ f\right] . \end{aligned}$$
(12)
The “collision operator”
\(\mathscr {C}\) is a source-sink term, modelling the effect of
f of inter-particle collisions taking place within the cube
\(\left[ \varvec{x},\,\varvec{x}+\text {d}\varvec{x}\right]\) between
t and
\(\text {d}+\text {d}t\). Under the diluted gas assumption (which is considered to hold in the work presented here), only binary collisions are accounted for in
\(\mathscr {C}\). Under the widely-adopted Bhatnagar–Gross–Krook (BGK) hypothesis [
45], collisions occur isotropically and induce a relaxation of
f towards an equilibrium distribution
\(f^{\mathrm {(eq)}}\) with relaxation time
\(\tau\):
$$\begin{aligned} \mathscr {C}\left[ f\right] = - \frac{f - f^{\mathrm {(eq)}}}{\tau }. \end{aligned}$$
(13)
The equilibrium distribution is the Maxwell equilibrium distribution [
44]:
$$\begin{aligned} f^{\mathrm {(eq)}}\left( \varvec{x},\,t\right) := \rho \left( \varvec{x},\,t\right) \left( \frac{1}{2\pi c_{\textrm{s}}^2}\right) ^{3/2}\exp \left\{ -\frac{\left[ \varvec{u}\left( \varvec{x},\,t\right) \right] ^2}{2c_{\textrm{s}}^2}\right\} , \end{aligned}$$
(14)
where velocity and density are evaluated through Eqs. (
9) and (
10), and
\(c_{\textrm{s}}\) is the speed of sound.
Simulations consist of trajectories on the discretized phase space, with constant timestep
\(\delta t\). The phase space
\(\Phi \left( \varvec{x},\,\varvec{c}\right)\) is discretized as follows. The (spatial) discretized computational domain is defined as a 3D cubic lattice, with
\(\delta x\) being the distance between two first-neighbouring sites. The discretized velocity space is generated by a set of vectors
\(\left\{ \varvec{c}_0,\,\ldots ,\,\varvec{c}_{q-1}\right\}\) not mutually independent.
\(\varvec{c}_0\) is the zero vector; the others point from one lattice site to its first neighbour and have module
\(\delta x/\delta t\); or to its second neighbour neighbour and have module
\(\sqrt{2}\,\delta x/\delta t\); or to its third (module
\(\sqrt{3}\,\delta x/\delta t\)). The different choices of discretization are conventionally labelled through a tag D
dQ
q:
d represents the spatial dimension (in this work, 3);
q the number of vectors spanning the velocity space. In place of
\(f\left( \varvec{x},\,\varvec{c},\,t\right)\) we now have the discretized set
\(f_i\left( \varvec{x},\,t\right)\), where the latter is defined as the probability of finding one portion of fluid at the lattice site
\(\varvec{x}\) with velocity
\(\varvec{c}_i\) at the time
t. The zeroth, first and second moments of
f (Eqs.
9,
10 and
11) are evaluated as summations, in place of integrals, over the velocity set:
$$\begin{aligned} \rho= & {} \sum _i f_i; \end{aligned}$$
(15)
$$\begin{aligned} \rho \,\varvec{u}= & {} \sum _i f_i\,\varvec{c}_i; \end{aligned}$$
(16)
$$\begin{aligned} \rho \,\varvec{u}\otimes \varvec{u}= & {} \sigma + \sum _i f_i\,\varvec{c}_i\otimes \varvec{c}_i. \end{aligned}$$
(17)
Using a discretized velocity space induces a discretization error—however, this error source can be removed if the Maxwell equilibrium function (Eq.
14) is written as a linear combination of Hermite polynomials. To ensure density and momentum conservation, only the Hermite polynomials up to the second order are needed [
44]. As such, the discretized equilibrium function reads as:
$$\begin{aligned} f^{\mathrm {(eq)}}_i = w_i\,\rho \left[ 1 + \frac{\varvec{u}\cdot \varvec{c}_i}{c_{\textrm{s}}^2} + \frac{\left( \varvec{u}\cdot \varvec{c}_i\right) ^2-c_{\textrm{s}}^2u^2}{2c_{\textrm{s}}^4}\right] . \end{aligned}$$
(18)
The values of the weights are set in a standard way depending of the specific D
dQ
p lattice. Similarly, the speed of sound is defined as:
$$\begin{aligned} c_{\textrm{s}}:= \frac{1}{\sqrt{3}}\frac{\delta x}{\delta t}. \end{aligned}$$
(19)
The application of Eqs. (
9) and (
10) [
44] allows evaluation of the macroscopic fields and recovery of the adiabatic dynamics with a Mach-number-dependent compressibility error of
\(\textrm{Ma}^2\). If the BGK assumption (Eq.
13) is adopted the Boltzmann Eq. (
12) is discretized into the Lattice-Boltzmann equation:
$$\begin{aligned} f_i\left( \varvec{x}+\varvec{c}_i\,\delta t,\,t+\delta t\right) = f_i\left( \varvec{x},\,t\right) - \frac{f_i\left( \varvec{x},\,t\right) - f^{\mathrm {(eq)}}_i\left( \varvec{x},\,t\right) }{\tau }. \end{aligned}$$
(20)
Implementation of Eq. (
20) is split into two steps: a local, non-linear
collision:
$$\begin{aligned} \Xi _i\left( \varvec{x},\,t\right) = f_i\left( \varvec{x},\,t\right) - \frac{f_i\left( \varvec{x},\,t\right) - f^{\mathrm {(eq)}}_i\left( \varvec{x},\,t\right) }{\tau }; \end{aligned}$$
(21)
and a linear, non-local
streaming:
$$\begin{aligned} f_i\left( \varvec{x}+\varvec{c}_i,\,t+\delta t\right) = \Xi _i\left( \varvec{x},\,t\right) . \end{aligned}$$
(22)
A multiscale (“Chapman-Enskog”) expansion shows that the Lattice-Boltzmann Eq. (
20) reproduces the incompressible Navier–Stokes equations under the limit
\(\textrm{Ma} \ll 1\) [
44]. Pressure and kinematic viscosity take the values:
$$\begin{aligned} p:=\rho c_{\textrm{s}}^2, \qquad \nu :=c_{\textrm{s}}^2\left( \tau -\frac{\delta t}{2}\right) . \end{aligned}$$
(23)
Non-Newtonian rheology and turbulence are accounted for following [
34,
35]. The relaxation time is treated as a field
\(\tau \left( \varvec{x},\,t\right)\) rather than a parameter; its value is stored alongside
\(f_i\left( \varvec{x},\,t\right)\) and initialised at the first timestep by inverting the second of Eqs. (
23) using a bespoke reference value
\(\nu _{\textrm{ref}}\) for the kinematic viscosity (see Sect.
3).
\(\tau\) is then updated locally at every timestep before the collision phase (Eq.
21), as follows:
1.
Power-law rheology is modelled as in [
46].The rate of shear tensor
\(S_{\alpha \beta }\equiv \frac{1}{2}\left( \partial _\alpha u_\beta + \partial _\beta u_\alpha \right)\) is evaluated locally from the second momentum of the first-order multiscale term of
f, defined as
\(f^{\mathrm {(1)}}_i\) [
44]:
$$\begin{aligned} \begin{aligned} \varvec{S}\left( \varvec{x},\,t\right)&= -\frac{1}{2\rho \,c_{\textrm{s}}^2\,\tau \left( \varvec{x},\,t\right) }\sum _i f^{\mathrm {(1)}}_i\left( \varvec{x},\,t\right) \,\varvec{c}_i\otimes \varvec{c}_i \\&\simeq -\frac{1}{2\rho \,c_{\textrm{s}}^2\,\tau \left( \varvec{x},\,t\right) }\sum _i\left[ f_i\left( \varvec{x},\,t\right) - f^{\mathrm {(eq)}}_i\left( \varvec{x},\,t\right) \right] \varvec{c}_i\otimes \varvec{c}_i. \end{aligned} \end{aligned}$$
(24)
Dynamic viscosity
\(\mu _{\textrm{PL}}\left( \varvec{x},\,t\right)\) and, consequently, kinematic viscosity
\(\nu _{\textrm{PL}}\equiv \mu _{\textrm{PL}}/\rho\) are obtained from the power-law Eq. (
1) through the substitution:
$$\begin{aligned} |\dot{\gamma }|\equiv \sqrt{2\,\varvec{S}:\varvec{S}}, \end{aligned}$$
(25)
and then
\(\tau\) is recalculated from the second of Eq. (
23), with
\(\nu _{\textrm{PL}}\) being used instead of
\(\nu\).
2.
Smagorinsky turbulence is modelled as in [
47]. The shear rate magnitude
\(|\dot{\gamma }|\) is calculated after power-law correction by reapplying Eqs. (
24) and (
25). The Smagorinsky closure with
\(C_{\textrm{Smago}}=0.14\) is then applied in order to compute the turbulent linematic viscosity:
$$\begin{aligned} \nu _{\textrm{turb}} = \nu _{\textrm{PL}} + C_{\textrm{Smago}}|\dot{\gamma }|. \end{aligned}$$
(26)
The final value of
\(\tau\) is then calculated by inverting once more the second of Eq. (
23), with
\(\nu _{\textrm{turb}}\) in place of
\(\nu\).
The momentum transfer from bubbles to liquid phase (viz., back-coupling) can be included by modifying the Lattice-Boltzmann Eq. (
20) through a general procedure, due to [
48]: a momentum source term due to a body force is added to the Lattice-Boltzmann Eq. (
20):
$$\begin{aligned} f_i\left( \varvec{x}+\varvec{c}_i,\,t+\delta t\right)= & {} f_i\left( \varvec{x},\,t\right) - \frac{f_i\left( \varvec{x},\,t\right) - f^{\mathrm {(eq)}}_i\left( \varvec{x},\,t\right) }{\tau } \nonumber \\{} & {} + \left( 1 - \frac{1}{2\tau }\right) \mathscr {S}_i\left( \varvec{x},\,t\right) \end{aligned}$$
(27)
and consequently, the collision Eq. (
21):
$$\begin{aligned} \Xi _i\left( \varvec{x},\,t\right)= & {} f_i\left( \varvec{x},\,t\right) - \frac{f_i\left( \varvec{x},\,t\right) - f^{\mathrm {(eq)}}_i\left( \varvec{x},\,t\right) }{\tau }\nonumber \\{} & {} + \left( 1 - \frac{1}{2\tau }\right) \mathscr {S}_i\left( \varvec{x},\,t\right) , \end{aligned}$$
(28)
where the source term
\(\mathscr {S}_i\) is a function of a particle-dependent forcing term
\(\varvec{\Phi }\):
$$\begin{aligned} \mathscr {S}_i:= w_i\left[ \frac{\varvec{c}_i - \varvec{u}}{c_{\textrm{s}}^2} + \frac{\left( \varvec{c}_i\cdot \varvec{u}\right) \varvec{c}_i}{c_{\textrm{s}}^4}\right] \cdot \varvec{\Phi }. \end{aligned}$$
(29)
For the specific case of implementing the back-coupling, [
35] proposed different models. The best performing in terms of convergence and numerical expense consisted of equating the forcing
\(\varvec{\Phi }\) (in Eq.
29) to
\(-\varvec{F}_K\) (in Eq.
4) to the most near cell from
\(\mathscr {P}_K\), and summing over the particles and the number of Lagrangian subcycles occurring within a Lattice-Boltzmann update:
$$\begin{aligned} \varvec{\Phi } = -\sum _s\sum _K\varvec{F}_K\;\delta ^3_{\varvec{x},\,\varvec{X}^{\textrm{next}}}. \end{aligned}$$
(30)
Finally, Eq. (
16) is modified as follows:
$$\begin{aligned} \rho \,\varvec{u} = \sum _i f_i\,\varvec{c}_i + \frac{1}{2}\sum _i\mathscr {S}_i\,\varvec{c}_i. \end{aligned}$$
(31)