Moments Represented IB-LBM¶
Nassu stores only the macroscopic moments per node, not the full set of populations, which halves the memory footprint of a three-dimensional simulation Ferrari et al.[1]. This storage choice makes the force coupling subtler than in a population-based code. In a population code, spreading a force shifts the populations, and the macroscopics recomputed from them automatically reflect the new force; the bookkeeping is implicit. Under moment-only storage there are no populations to shift during the spread, so the macroscopics that feed the next collision will not see the force unless they are updated by hand. The task of this section is to work out exactly which moments must change and by how much, so that the moment-represented IBM reproduces what the population-based method would have computed.
Warning
The subtle trap of moment-only storage: with no populations to shift, the spread force is invisible to the next collision unless you fold it into the macroscopics by hand. The velocity and rate-of-strain must be updated with the spread force before collision, or the body silently exerts no force on the flow.
Why moment-represented IBM needs an explicit update. In population-based IBM (left), spreading the force shifts the populations and the macroscopics are re-derived from them, so the force is seen automatically. With moment-only storage (right) there are no populations to shift: the spread force must be injected by updating the velocity and strain rate before collision, or it exerts no force at all.¶
Some aspects must be taken into consideration when implementing the IBM along with the moment represented LBM. In the population based representation, after the force spreading, the macroscopic values used for calculation of equilibrium populations and regularization already take into consideration the IBM force that was spread previously.
In order to return the same result as the population based representation, the moment represented IB-LBM must update its macroscopic values with the spread forces before the collision of moments.
Important
An important aspect to be taken into account is that the populations do not change their value during the IBM force spread, hence population moments such as \(\sum f_{i}c_{i,\alpha}c_{i,\beta} = \Pi_{\alpha\beta}\) do not vary during IBM. This is not true for the equilibrium and non-equilibrium populations moments that depend on the values of \(u_{\alpha}\) and \(S_{\alpha\beta}\). Here \(\Pi_{\alpha\beta}\) is the full second moment of the populations; it relates to the non-equilibrium stress \(\Pi_{\alpha\beta}^{\mathrm{neq}}\) used elsewhere in the LBM chapters through \(\Pi_{\alpha\beta} = \Pi_{\alpha\beta}^{\mathrm{eq}} + \Pi_{\alpha\beta}^{\mathrm{neq}}\).
The macroscopics to be updated are the velocity and rate-of strain, since \(\rho\) depends exclusively on the populations that do not change during IBM. For a result \(\Delta F_{\alpha}\left(t\right) = F_{\alpha}\left(t\right) - F_{\alpha}\left(t-\Delta t\right)\) spread into a node, the macroscopic velocity is updated with:
where the superscript “IBM” stands for macroscopics updated after the IBM force spread.
Note
In an iterative procedure with reset of forces \(\Delta F_{\alpha}\) is represented \(\Delta F_{\alpha} = F_{\alpha, k+1} - F_{\alpha,k}\).
The rate of strain can be written as:
After the force spreading, the value of \(\sum f_{i}c_{i,\alpha}c_{i,\beta} = \Pi_{\alpha\beta}\) is the only of the above equation that will be kept constant. Hence this value is stored as:
where \(\Pi_{\alpha\beta}^{\mathrm{eq}}=\sum f_{i}^{\mathrm{eq}}c_{i,\alpha}c_{i,\beta}= \rho \left(u_{\alpha}u_{\beta}+c_{s}^{2}\delta_{\alpha\beta}\right)\).
The value \(\Pi_{\alpha\beta}^{\mathrm{eq,IBM}}\) is calculated using the updated velocity \(u_{\alpha}^{\mathrm{IBM}}\). That way, the rate-of-strain after force spreading is given by:
The LBM collision of moments is then performed with the updated IBM forces \(F_{\alpha}\left(t\right)\) and macroscopics \(\rho\), \(u_{\alpha}^{\mathrm{IBM}}\), and \(S_{\alpha\beta}^{\mathrm{IBM}}\). After the streaming, the IBM forces are removed, the macroscopics are calculated without them and stored. That assures that the multiblock communication between levels occur without IBM forces.
Important
The IBM force is folded into the macroscopics only for the collision, then stripped back out before the values are stored. Multiblock interpolation between levels must exchange force-free macroscopics, so the body force never leaks across a grid interface and corrupts the coarse-fine transfer.
The previously removed forces are added to macroscopics at the following time-step before IBM interpolation-spread, and macroscopics are updated as described above under consideration that \(F_{\alpha}(t) = 0\) and \(\Delta F_{\alpha} = F_{\alpha}(t-1)\).
After the interpolation-spread, the same kernel is executed but with the value of \(\Delta F\) recalculated through IBM, and \(F_{\alpha}(t)=F_{\alpha}(t-1) + \Delta F_{\alpha}\).
After resetting the forces, \(F_{\alpha}(t)=\Delta F_{\alpha}\) and \(F_{\alpha}(t-1)=0\).