Kinetic Theory & Computational Fluid Dynamics — Chapter Notes

From Newton to Lattice Boltzmann

How ten-to-the-twenty-third individual particles collapse into a handful of fluid equations — and how that same collapse, run in reverse, becomes an algorithm.

In this chapter
  1. Newton's law, written two ways — the destination up front
  2. Newton — in principle, everything is known
  3. Liouville — particles to probability
  4. BBGKY — reducing the information
  5. Molecular chaos — the decisive approximation
  6. The Boltzmann equation
  7. Moments — how f becomes a fluid
  8. Equilibrium
  9. BGK — relaxation instead of collisions
  10. Chapman–Enskog — recovering Navier–Stokes
  11. Lattice Boltzmann — from theory to algorithm
  12. Boundaries
  13. Two roads, one destination
  14. The architecture in ten seconds
The whole story in one picture
Newton Liouville BBGKY molecular chaos Boltzmann
A  → moments + Chapman–Enskog → Navier–Stokes  (why fluid mechanics works)
B  → BGK + discretization → Lattice Boltzmann  (how to simulate it)

There are really three descriptions of the same fluid, and the entire chapter is about moving between them:

LevelWhat it describesVariables
MicroscopicIndividual particlesxᵢ, vᵢ
Mesoscopic / kineticDistribution of particlesf(x, v, t)
MacroscopicFluid fieldsρ, u, P

The word mesoscopicthe middle layer, neither individual particles nor a smooth continuum — a statistical distribution that stands in for both matters more than it looks. Lattice Boltzmann lives in that middle layer. It never tracks molecules directly, and it never solves Navier–Stokes directly either.

Before the journey — the destination, stated up front

Newton's law, written two ways

The microscopic starting point:

Microscopic form
$$\ddot{x}=\frac{F(N)}{m}$$

Acceleration equals force over mass — ordinary Newton's second law, except F(N) signals that the force on any one particle depends on every other particle in the system.

And the macroscopic form — where this whole chapter is headed:

Macroscopic form — Navier–Stokes momentum equation
$$\partial_t(\rho \mathbf u)+\nabla\cdot(\rho \mathbf u \mathbf u)=-\nabla P+\nabla\cdot\boldsymbol{\sigma}$$
ρdensityfluid mass per unit volume
uvelocity fieldthe fluid's local velocity, defined everywhere in space
ρumomentum densitythe actual conserved quantity this whole equation tracks
∂ₜ(ρu)local time derivativehow momentum density changes with time at one fixed point in space
∇·(ρuu)momentum flux divergencemomentum being physically carried around by the flow itself — the nonlinear "advection" term that makes fluid dynamics genuinely hard
−∇Ppressure gradient forcefluid is pushed from high pressure toward low pressure
∇·σviscous stress divergencefriction between fluid layers moving at different speeds — this is what makes a fluid "sticky"

The entire chapter is the bridge connecting these two equations. One describes a single particle; the other describes a continuum field. That bridge has several rungs — Liouville, BBGKY, molecular chaos, Boltzmann, BGK, Chapman–Enskog — each one below.

Source — board 1 Chalkboard with the Newton to Navier-Stokes derivation chain: Liouville equation, BBGKY hierarchy, Chapman-Enskog expansion, and moment definitions
The full physics derivation as worked on the board — Liouville → BBGKY → Boltzmann → Chapman–Enskog → Navier–Stokes.
Part I — Microscopic mechanics

Newton: in principle, everything is known

For any particle i, ordinary Newtonian mechanics gives:

Equations of motion
$$m\dot{\mathbf v}_i=\mathbf F_i,\qquad \dot{\mathbf x}_i=\mathbf v_i.$$
mparticle mass
v̇ᵢacceleration of particle i
Fᵢnet force on particle i from every other particle

With N particles, the complete microscopic state is the full list of every position and velocity:

$$\Gamma=(\mathbf x_1,\mathbf v_1,\ldots,\mathbf x_N,\mathbf v_N),\qquad N\sim10^{23}.$$

Newton's equations aren't inadequate — there are simply far too many of them to track. And, importantly, nobody actually wants to know where molecule number 8.2×10¹⁹ went. What's wanted is density and velocity — bulk, statistical quantities. So statistical mechanics changes the question from "where is every particle?" to "how are particles statistically distributed?" That reframing is the seed of everything that follows.

Part II — From particles to probability

Liouville: replace trajectories with a distribution

Introduce the N-particle phase-space densitya single function that assigns a probability to every possible simultaneous arrangement of all N particles' positions and velocities, f(N)(x₁,v₁,…,xₙ,vₙ,t). For the forces Fᵢ, its evolution is given by the Liouville equationan exact conservation law stating that probability in phase space is neither created nor destroyed — it only flows:

Liouville equation
$$\frac{\partial f^{(N)}}{\partial t}+\sum_i \mathbf v_i\cdot\nabla_{\mathbf x_i}f^{(N)}+\sum_i \frac{\mathbf F_i}{m}\cdot\nabla_{\mathbf v_i}f^{(N)}=0$$

Nothing mysterious has happened here. Newton followed individual trajectories through phase space; Liouville follows the probability density of possible trajectories through that same space. It is, at heart, just a conservation equation — probability flows through phase spaceexactly the way mass or charge flows through ordinary space: it can move around but the total is fixed — nothing invented, nothing approximated.

The problem Phase space has 6N dimensions for N three-dimensional particles. Liouville is exact — and computationally monstrous. Nobody solves this equation directly for a real gas.
Part III — Reduce the information

BBGKY: perhaps we don't need everybody

Define reduced distributionsfunctions that describe only one or a few particles at a time, having averaged away everyone else. The one-particle distribution f(1)(x₁,v₁,t) asks what a single representative particle statistically does. The two-particle distribution f(2)(x₁,v₁,x₂,v₂,t) contains correlations between pairs. And so on for f(3), f(4), …

Integrating the unwanted particles out of the Liouville equation produces something annoying: the equation for f(1) requires knowing f(2); the equation for f(2) requires f(3); and so on, up to f(N). That's the BBGKY hierarchyBogoliubov–Born–Green–Kirkwood–Yvon — five people who independently derived the same infinite chain of coupled equations around 1946.

Diagram 1 Diagram showing the BBGKY hierarchy chain: f(1) depends on f(2), which depends on f(3), and so on up to f(N)
Each reduced distribution's evolution equation depends on the next one up — an infinite, unclosed chain until it's cut off by an approximation.

Why does this happen? Because particles collide — you cannot predict particle 1 statistically without knowing something about the particle it's about to hit. BBGKY has reduced the dimensionality of each individual description, but the problem is still not closeda system of equations is "closed" once it contains no reference to any unknown higher-order quantity — right now it always does.

Part IV — The decisive approximation

Molecular chaos

For a dilute gas, Boltzmann's assumption is that particles arriving at a collision are statistically uncorrelated immediately before they meet:

Stosszahlansatz (molecular chaos)
$$f^{(2)}_{\text{pre-collision}}\approx f^{(1)}f^{(1)}$$
Diagram 2 Diagram showing two independent particles entering a collision, becoming correlated after colliding
Molecular chaos assumes each new collision again sees statistically independent incoming particles, even though the previous collision left its participants correlated.

This is worth sitting with, because the intuitive story is subtly wrong. It is not that correlations disappear because collisions are frequent — in fact, collisions create correlations. The molecular chaosthe assumption that colliding particles' incoming velocities are independent, even though their outgoing velocities are not — justified for dilute gases in the kinetic limit hypothesis simply neglects the correlations that already exist going into the next collision. When the next collision is described, the incoming pair is once again approximated as uncorrelated. That single move is what closes the infinite hierarchy into one equation.

Part V — The Boltzmann equation

One distribution instead of 10²³ trajectories

Define the one-particle distribution f(x,v,t) — this is f(1) from Part III, with the superscript dropped now that it's the only distribution left in play; f(2), f(3), and the rest of the hierarchy have already done their job and exited the derivation via molecular chaos. The Boltzmann equationthe single closed equation, in six-dimensional position-velocity space, that replaces the entire N-particle problem reads:

Boltzmann equation
$$\frac{\partial f}{\partial t}+\mathbf v\cdot\nabla_{\mathbf x}f+\frac{\mathbf F}{m}\cdot\nabla_{\mathbf v}f=\Omega(f)$$
Ω(f)the collision operatorthe term encoding how collisions redistribute particles among velocities

Without external body forces, this simplifies to:

$$\partial_t f+\mathbf v\cdot\nabla f=\Omega(f)$$

This decomposes into two pieces that matter enormously for everything downstream:

streamingparticles moving in straight lines between collisions  =  collisionslocal redistribution among velocities

Particles, at bottom, just move → collide → move → collide → … Lattice Boltzmann turns exactly that structure into an algorithm.

Part VI — How does f become a fluid?

Moments

f is not yet density or velocity — it's a distribution over velocities at every point in space. Macroscopic quantities are recovered by taking momentsweighted integrals of f over all possible velocities — each power of v extracts a different physical quantity over velocity space.

Zeroth moment — density
$$\rho=\int f\,d\mathbf v$$
First moment — momentum
$$\rho\mathbf u=\int \mathbf v f\,d\mathbf v \quad\Rightarrow\quad \mathbf u=\frac{1}{\rho}\int \mathbf v f\,d\mathbf v$$
Second moment — stress information
$$\int \mathbf v\mathbf v\,f\,d\mathbf v \quad\text{— contains pressure and viscous stress}$$

This is one of the deepest ideas in the whole subject: you don't need to know every detail of f to describe ordinary fluid motion. You mostly need its first few moments.

Part VII — Why collisions matter

Equilibrium

Left alone, without macroscopic gradients driving it away, repeated collisions push the velocity distribution toward local thermodynamic equilibriumthe state where no further net change occurs from collisions alone — classically, a Maxwellian bell curve in velocity:

$$f^{eq}\sim\exp\left[-\frac{|\mathbf v-\mathbf u|^2}{2c_s^2}\right]$$
cₛthe speed of sound in the fluid — sets the width of the equilibrium velocity spread

The conceptual point, before any normalization detail: collisions drive f toward feq. Unfortunately, real Boltzmann collision integrals are analytically unpleasant. Enter BGK.

Part VIII — BGK

Replace complicated collisions by relaxation

The BGK approximationBhatnagar–Gross–Krook, 1954 — replaces the true collision integral with a single exponential relaxation toward equilibrium writes:

BGK collision operator
$$\Omega(f)=-\frac{1}{\tau}(f-f^{eq})\qquad\Rightarrow\qquad \partial_t f+\mathbf v\cdot\nabla f=-\frac{1}{\tau}(f-f^{eq})$$
τthe relaxation timehow quickly f is pulled back toward equilibrium after a disturbance

If f is far from equilibrium, the correction is large; if f already equals feq, the collision term vanishes.

A stability condition falls straight out of this Push τ/Δt below ½ and the discrete relaxation stops decaying — the oscillation from the plot below starts growing instead of shrinking, and the simulation diverges. τ/Δt ≥ ½ is therefore a hard floor, not just a rule of thumb — and it's exactly why the viscosity formula in Part X (ν = cs²(τ−½)) can never go negative in a stable simulation.
Plot 1 Semi-log plot of the deviation |f minus f equilibrium| decaying exponentially over time for two different relaxation times tau
Three genuinely different behaviors depending on τ/Δt: under-relaxation (τ/Δt>1, gold) decays smoothly like the continuous BGK equation; full relaxation (τ/Δt=1, blue) jumps straight to equilibrium in one step; over-relaxation (½<τ/Δt<1, coral) oscillates around equilibrium with shrinking amplitude. Push τ/Δt below ½ and the oscillation amplitude grows instead of shrinking — the scheme goes unstable.
A correction worth keeping straight The full thermal BGK model can be built to conserve mass, momentum, and energy. But the standard isothermal Lattice Boltzmann method most people learn first is built primarily around conserving mass and momentum — temperature is not generally an independent hydrodynamic field there. Worth remembering before reaching thermal LBM later.
Part IX — Kinetic theory becomes fluid mechanics

Chapman–Enskog

Why does ordinary fluid mechanics work at all, if what's really happening underneath is particles and collisions? Because when the molecular scale is much smaller than the macroscopic scale — the Knudsen numberthe ratio of the mean free path between collisions to the size of the system being studied is small —

$$Kn=\frac{\lambda_{\rm mfp}}{L}\ll1$$

— the distribution stays close to local equilibrium, and can be expanded as a small perturbation around it:

Chapman–Enskog expansion
$$f=f^{(0)}+\epsilon f^{(1)}+\epsilon^2 f^{(2)}+\cdots,\qquad \epsilon\sim Kn,\qquad f^{(0)}=f^{eq}$$

The equilibrium part f(0) gives ideal-fluid behavior. The small departure f(1) contains transport — in particular, viscosity.

Plot 2 Family of curves showing a nonequilibrium moment rising then decaying, plotted for four different relaxation times tau
The nonequilibrium correction f⁽¹⁾ for different τ — larger τ produces a slower, broader transient before the flow settles back toward equilibrium. This is the transport-carrying part of the expansion.

Taking moments of the expansion at the right orders yields the continuum equations directly:

Continuity (mass conservation)
$$\partial_t\rho+\nabla\cdot(\rho\mathbf u)=0$$
Momentum (Navier–Stokes)
$$\partial_t(\rho\mathbf u)+\nabla\cdot(\rho\mathbf u\mathbf u)=-\nabla p+\nabla\cdot\boldsymbol{\sigma}+\rho\mathbf g$$
Boltzmann —[ Kn ≪ 1, Chapman–Enskog + moments ]→ Navier–Stokes

That arrow is the central theoretical bridge of the whole chapter.

Deducing the continuity equation, explicitly

It's worth actually watching this fall out, rather than taking it on faith. Take the zeroth momentmultiply the kinetic equation by 1 and integrate over all velocities — extracts the mass-conservation content of the BGK equation — integrate every term over v:

Step 1 — integrate the BGK equation over velocity
$$\int\Big(\partial_t f + \mathbf v\cdot\nabla f\Big)\,d\mathbf v \;=\; \int \Omega(f)\,d\mathbf v$$

On the left, swap the order of integration and differentiation, and use the moment definitions already established:

Step 2 — substitute ρ = ∫f dv and ρu = ∫vf dv
$$\partial_t\underbrace{\int f\,d\mathbf v}_{\rho} \;+\; \nabla\cdot\underbrace{\int \mathbf v f\,d\mathbf v}_{\rho\mathbf u} \;=\; \int\Omega(f)\,d\mathbf v$$

The right-hand side is the interesting part. Whatever a physically sensible collision operator does, it cannot create or destroy particles — collisions only redistribute existing particles among velocities. That's a collision invarianta quantity left unchanged by any collision — mass, momentum, and kinetic energy are the three classical ones, and it means:

Step 3 — mass is a collision invariant
$$\int\Omega(f)\,d\mathbf v = \int -\frac{1}{\tau}(f - f^{eq})\,d\mathbf v = 0$$

This vanishes because feq is constructed, by definition, to have exactly the same density as f — so their zeroth moments cancel identically. No approximation is used here at all.

What's left is the continuity equation, exactly:

Result — continuity equation
$$\partial_t\rho + \nabla\cdot(\rho\mathbf u) = 0$$
Why this one is special Notice the Chapman–Enskog expansion (ε, f⁽⁰⁾, f⁽¹⁾, …) never actually entered this derivation. Continuity comes for free, at every order, straight from mass conservation of the collision operator. The momentum equation is the one that genuinely needs the expansion — taking the first moment instead of the zeroth leaves a stress-tensor term that only resolves into recognizable viscous form once f⁽¹⁾, the nonequilibrium correction, is substituted in. Continuity is a bookkeeping identity; Navier–Stokes' viscous term is the actual physics content of the expansion.
Part X — Now, finally, Lattice Boltzmann

Where Lattice Boltzmann actually came from

Before the discretization story, it's worth knowing that LBM didn't arise purely by discretizing the continuous BGK equation — historically, it grew out of a completely different-looking model, and the connection to a much older idea in statistical mechanics is worth making explicit.

Recall the canonical ensemble result from ordinary stat mech: for a system with Hamiltonian H at temperature T, the probability of a configuration goes as the Boltzmann weightthe exponential factor e^(−H/kT) that assigns higher probability to lower-energy configurations — the foundation of equilibrium statistical mechanics:

Canonical ensemble (e.g. the Ising model)
$$H=-\sum_{i,j}S_iS_j-h\sum_i S_i \qquad\qquad P\sim e^{-H/kT}$$
Sᵢa discrete spin variable at lattice site i (Ising model) — the conceptual precursor to the Boolean occupation number nᵢ introduced just below; note h here is the external field, unrelated to the lattice-gas variable that follows

The point of bringing this up: a lattice of discrete, Boolean-like microscopic variables (spins up/down; particle present/absent) is a completely standard object in statistical mechanics, and its macroscopic behavior emerges the same way in every such model — by ensemble averagingaveraging a noisy microscopic variable over many realizations, or over a probability distribution, to get a smooth macroscopic field over the microscopic noise.

Lattice gas automata — the direct ancestor

The actual predecessor to LBM is the lattice gas automatona cellular-automaton model where particles hop between lattice sites and undergo discrete, momentum-conserving collisions — everything is either 0 or 1, present or absent, and it has its own two-step history. The first version, the HPP modelHardy, Pomeau, and de Pazzis, 1973 — the original lattice gas automaton, ran on a square lattice with four velocities per node — simple, but its square symmetry turned out to be too crude: it doesn't produce isotropic (direction-independent) macroscopic behavior, so it can't actually simulate a real fluid correctly. It took until 1986 for Frisch, Hasslacher, and Pomeau to fix this with the FHP modela lattice gas automaton on a triangular lattice with six velocities per node — the extra directions give it the isotropy HPP lacked, and it's the model that first genuinely worked as a fluid solver, replacing the square lattice with a triangular one — six directions per node instead of four, giving each site hexagonal-looking connectivity — which is why the board's third grid sketch, drawn with diagonal cross-hatching rather than a plain square grid, likely depicts this FHP geometry specifically rather than D2Q9.

Define a Boolean occupation number ni(x,t) ∈ {0,1}: does a particle moving with velocity vi occupy site x at time t? Its update rule is:

Lattice gas automaton update rule
$$n_i(\mathbf x+\mathbf v_i,t+1)=n_i(\mathbf x,t)+\Xi_i(\{n_j\}(\mathbf x,t))$$
Ξᵢthe automaton's local collision rule — a deterministic or probabilistic rearrangement of occupied directions at a site, built to conserve particle number and momentum exactly

This works — it genuinely produces fluid-like behavior in simulation — but it's noisy. Because ni is strictly 0 or 1, any single run is full of statistical fluctuation, and extracting smooth macroscopic fields requires averaging over many independent runs or large spatial patches.

The late-1980s move McNamara and Zanetti's insight (1988), followed quickly by Higuera and Jiménez (1989): instead of running the noisy Boolean automaton many times and averaging afterward, track the ensemble-averaged occupation directly as a single real-valued field from the start: $$f_i(\mathbf x,t)=\langle n_i(\mathbf x,t)\rangle$$ That's it — that single substitution is the birth of Lattice Boltzmann. The noise is gone by construction, because f is real-valued from the outset rather than recovered by averaging afterward. What's worth knowing: this ensemble-averaging route is how LBM was actually discovered, and it long predates the clean continuous-kinetic-theory story told in Parts I–IX of this chapter. Nobody showed that LBM is rigorously equivalent to a discretized Boltzmann-BGK equation until He and Luo did it in 1997 — nearly a decade later. This chapter presents the "modern," continuous-theory-first version because it's the clearer teaching order, but historically the field ran the other way: the algorithm came first, and its justification from kinetic theory came second.
Diagram 3 Diagram showing a Boolean lattice gas grid with particles present or absent as dots, an arrow labeled ensemble average, and the resulting smooth continuous field of the lattice Boltzmann distribution
Left: a single lattice gas realization — noisy, Boolean, 0-or-1 at every site (nᵢ). Right: the ensemble-averaged field fᵢ(x,t) — smooth, real-valued, and directly simulatable without ever running the noisy automaton at all.

With f established as a real-valued field, its own update rule follows the same shape as the automaton it replaced, but now with a general collision function Ωi acting on real numbers instead of bits:

General discrete lattice Boltzmann equation
$$f_i(\mathbf x+\mathbf v_i,t+1)=f_i(\mathbf x,t)+\Omega_i(\{f_j\},\tau)$$

Specializing Ωi to the BGK form gives back the equation this chapter has already been building toward:

BGK-specialized
$$\Omega_i=-\frac{1}{\tau}(f_i-f_i^{0})$$

Chapman–Enskog, done properly, on the discrete lattice equation

Taylor-expand the streaming step itself around (x,t):

Taylor expansion of the streaming step
$$f_i(\mathbf x+\mathbf v_i,t+1)=f_i+(\partial_t+\mathbf v_i\cdot\nabla)f_i+\tfrac12(\partial_t+\mathbf v_i\cdot\nabla)^2f_i+O(\partial^3)$$

That expansion alone is just a setup. Carried through to completion, it's the actual proof that LBM's zeroth-order hydrodynamic limit is the continuity equation — not just a plausibility argument. Start from the same moment definitions used for molecular chaos, now restated on the lattice as solvability conditionsconstraints the equilibrium fᵢ⁰ must satisfy so that its moments match the true moments of fᵢ exactly, order by order:

Moment constraints
$$\rho=\sum_i f_i=\sum_i f_i^{0},\qquad\qquad \rho\mathbf u=\sum_i f_i\mathbf v_i=\sum_i f_i^{0}\mathbf v_i$$

Substitute the BGK collision term into the Taylor-expanded streaming equation, and iteratereplace fᵢ by its leading-order equilibrium value fᵢ⁰ inside the correction terms, since the deviation fᵢ − fᵢ⁰ is itself already O(∂) — a standard perturbative move that avoids solving for the unknown correction before it's needed:

After substitution and iteration
$$(\partial_t+\mathbf v_i\cdot\nabla)f_i^{0}-\left(\tau-\tfrac12\right)(\partial_t+\mathbf v_i\cdot\nabla)^2f_i^{0}=\Omega_i^{(2)}+O(\partial^3)$$

Now sum this equation over every discrete direction i. Two things vanish in that sum: the second-order term, because it reduces to gradients of quantities the equilibrium distribution is already constructed to conserve, and Ωi(2) itself, because collisions — by construction — cannot change total mass.

Two unrelated uses of "(2)" — worth not conflating Ωi(2) here means the second-order term in the Chapman–Enskog expansion of the collision operator — an expansion order. It has nothing to do with f(2) from Part III (the two-particle correlation function in the BBGKY hierarchy). Same superscript, two completely different meanings, purely a notational coincidence between the two halves of this chapter.

What survives is just the sum of the first term, which by the moment constraints above is exactly ∂ₜρ + ∇·(ρu):

Result — continuity, recovered from the lattice equation itself
$$\boxed{\partial_t\rho+\nabla\cdot(\rho\mathbf u)=0}$$

This is the same continuity equation Part IX reached from the continuous Boltzmann equation's zeroth moment — but reached here entirely on the discrete lattice, straight from the collide-and-stream update rule LBM actually runs. That the two routes — continuous kinetic theory taken to its hydrodynamic limit, and the discrete algorithm taken to its own — land on the identical equation is precisely the consistency check that makes LBM trustworthy as a real Navier–Stokes solver rather than a numerical trick that merely resembles one.

A compact version of a longer story This derivation compresses what Krüger et al.'s textbook (Ch. 4) does more carefully with a genuine two-timescale expansion — the time derivative itself gets split into ∂t = ε∂t(1) + ε²∂t(2) + ⋯, not just fᵢ, and the O(ε) and O(ε²) equations are solved and recombined separately before continuity and momentum fall out together. The single-line shorthand above gets to the same boxed result with far less machinery — legitimate as a compressed derivation, but worth knowing it's a shortcut through territory the full analysis treats order by order.

BGK is not yet Lattice Boltzmann

The continuous BGK equation still has continuous position and continuous velocity, f(x,v,t). LBM adds one more discretization: instead of every possible molecular velocity, choose a small finite set c₀, c₁, …, c_Q₋₁, and define fi(x,t) as the population moving in discrete direction cᵢ.

Lattice notation
$$\text{D2Q9: } D=2 \text{ spatial dimensions}, \quad Q=9 \text{ discrete velocities}$$
Diagram 4 D2Q9 lattice velocity diagram showing 8 color-coded arrows radiating from a center rest population, with weights labeled for each direction
D2Q9: 8 moving directions plus one rest population, color-coded by weight — axis directions (blue) and diagonal directions (coral) are weighted differently so the discrete set reproduces isotropic, direction-independent physics.
Diagram 5 D3Q27 lattice cube diagram showing velocity vectors to face, edge, and corner neighbors
D3Q27: the 3D generalization — 26 neighbor directions (face, edge, corner) plus one rest population.

Each direction i carries a fixed weight wi, and the whole set is built so that its statistical moments match those of a true Maxwellian up to the order hydrodynamics needs. For D2Q9 specifically: w0=4/9 for the rest population, w1–4=1/9 for the four axis directions, w5–8=1/36 for the four diagonals — and the lattice speed of sound is fixed at cs²=⅓ (in lattice units, Δx=Δt=1). With those weights and velocities in hand, the actual discrete equilibrium distributionthe lattice version of the Maxwellian from Part VII — a low-order polynomial in u rather than an exponential, built to reproduce the exact same low-order moments — the thing every collision step relaxes toward — is:

Discrete equilibrium distribution
$$f_i^{eq}(\mathbf x,t)=w_i\rho\left(1+\frac{\mathbf u\cdot\mathbf c_i}{c_s^2}+\frac{(\mathbf u\cdot\mathbf c_i)^2}{2c_s^4}-\frac{\mathbf u\cdot\mathbf u}{2c_s^2}\right)$$

This is a truncated polynomial expansion of the continuous Maxwellian in powers of u — not an approximation invented for convenience, but the specific truncation that keeps the moments matching correctly. Because it's only correct to O(u²), LBM built this way is formally valid only for weakly compressible flow — Mach number Ma=u/cs well below 1 — which is why LBM is a poor fit for transonic or supersonic problems without further modification.

Before committing to a fixed lattice, it helps to remember what's being approximated: a real particle's path is continuous and erratic, and the lattice only samples it at discrete points.

Diagram 6 A grid with a jagged random walk path threading through several cells, illustrating a continuous trajectory sampled on a discrete lattice
The true molecular trajectory is the wandering path; the lattice of size δx is what actually gets tracked. LBM works because the statistics survive this coarsening.

The algorithm

1. Collision
$$f_i^{*}=f_i-\frac{\Delta t}{\tau}(f_i-f_i^{eq})$$

Populations relax locally toward equilibrium, node by node.

2. Streaming
$$f_i(\mathbf x+\mathbf c_i\Delta t,\,t+\Delta t)=f_i^{*}(\mathbf x,t)$$

Post-collision populations travel outward to neighboring lattice nodes.

Diagram 7 Two-panel diagram showing the collide step relaxing toward equilibrium and the stream step moving populations to a neighboring lattice node
The entire LBM update, in two steps, repeated every timestep at every node.
COLLIDE → STREAM → COLLIDE → STREAM → ⋯

Almost comically simple to code — and yet the collective behavior recovers continuum fluid mechanics. That's the charming trick at the heart of your subfield.

Getting fluid variables back out

At every node there are several fᵢ's, but the fluid is what's wanted. Take moments again — now as finite sums rather than continuous integrals:

Density and momentum, discretized
$$\rho=\sum_i f_i \qquad\qquad \rho\mathbf u=\sum_i f_i\mathbf c_i$$

This closes the circle: f(x,v,t) becomes fᵢ(x,t), and ∫f dv becomes Σᵢfᵢ. Velocity-space integrals became finite sums — that's precisely what the word lattice is buying you.

Why τ matters physically

The relaxation time isn't merely a numerical knob — it determines how quickly nonequilibrium disturbances erase themselves, and therefore sets the fluid's viscosity directly:

Lattice viscosity (lattice units, Δt = 1)
$$\nu=c_s^2\left(\tau-\tfrac12\right)$$

A second, less-visible number comes along for free: the bulk viscositythe fluid's resistance to pure compression, as opposed to shear — normally zero for a monatomic gas, but nonzero here as an artifact of the isothermal equation of state LBM uses works out to νB = ⅔ν. It doesn't appear explicitly in the collision rule, but it's baked into every standard isothermal LBM simulation whether or not it's ever mentioned.

τ → relaxation rate → nonequilibrium stress → ν → macroscopic viscosity

That's the same microscopic-to-macroscopic connection Chapman–Enskog establishes, now made numerically concrete and tunable.

A subtlety: thermal vs. nonthermal energy

It's tempting to assume the second velocity moment of f automatically gives the correct thermal energy of the fluid — it doesn't, in general, and this is a genuine caveat associated with Hiroshi Otomo'sa researcher whose work addresses energy accounting and boundary treatment in LBM work on the subject. Two quantities that look superficially similar are not the same thing:

Not the same quantity
$$\sum_i f_i v_i^2 \;\neq\; \langle\delta x^2\rangle$$

The left side is a nonthermal energya velocity-moment quantity that arises mechanically from the discrete velocity set and collision rule, but does not correspond to physical thermal motion — an artifact of the discrete lattice's own structure — not the fluid's actual kinetic energy, and not the same object as the mean-squared displacement ⟨δx²⟩ that genuinely characterizes particle motion.

The correct thermal energy density instead comes from the properly normalized second moment:

Correct thermal energy density
$$\int f v^2\,d\mathbf v = \rho\,\tfrac12 kT$$

This is the standard equipartition result — matching this moment exactly, rather than just approximately, is what a properly constructed thermal LBM scheme has to get right, and it's precisely where naive extensions of isothermal LBM can go subtly wrong.

Diagram 8 Plot of mean squared displacement versus time showing a crossover from ballistic (t squared) scaling at short times to diffusive (linear in t) scaling at long times
The genuine displacement statistic, ⟨δx²⟩ vs. t: ballistic (∝t²) at short times, crossing over to diffusive (∝t) at long times — the actual random-walk behavior of the random-walk-on-lattice picture from earlier, now shown as a plot rather than a single trajectory. This is the real physical quantity the nonthermal-energy note above is warning not to confuse with a raw velocity moment.
Boundaries

Where the collide-stream machine starts demanding paperwork

At a solid wall, some population tries to stream into solid material — that's not physical, and something has to be done about it. The basic answer is bounce-backreflecting an incoming population straight back along the opposite lattice direction it arrived from, which approximately imposes no-slipfluid velocity equals zero exactly at the wall — the standard physical condition for a viscous fluid touching a solid boundary behavior.

The harder version of this problem — and the one Board 2 spends two separate plots on — is that the lattice is a rigid Cartesian grid, but the physical wall being modeled is usually smooth and curved. Read the two plots as a before/after pair.

Diagram 9 — Plot A Diagram showing the true smooth curved wall inside a fluid domain, with fluid nodes and solid nodes marked as scattered dots on either side of the curve
Plot A — the physical problem, as posed. A smooth curved wall (solid line) sits inside the fluid domain. Every lattice node near it is unambiguously either a fluid node or a solid node depending on which side of the true curve it falls on — this is the geometry you actually want to simulate, before the lattice has done anything to it.
Diagram 9 — Plot B Diagram showing the staircase approximation of the curved wall on a Cartesian lattice grid, with bounce-back arrows shown at two boundary links
Plot B — what the solver is actually stuck with. Because the lattice only has horizontal and vertical links, the smooth wall (dotted, carried over from Plot A) gets rounded onto the nearest grid lines — the gold staircase. At every step of that staircase, a population trying to stream through the wall is instead reflected straight back the way it came (the bounce-backreflecting an incoming population along the opposite lattice direction it arrived from, approximating no-slip arrows). The physics is only ever as good as this staircase's resemblance to the true curve in Plot A.

Put the two together and the actual research problem becomes visible: naive bounce-back on the raw staircase gets the wall location right only to within one lattice spacing, which is a real, first-order error. This is exactly the gap Otomo's work — and curved/interpolated boundary schemes generally — closes: instead of snapping fully to the nearest grid line, they interpolate between the fluid and solid nodes straddling the true curve, recovering something much closer to Plot A's behavior while still only ever computing on Plot B's grid.

The interpolation itself is parameterized by a fractional distance, typically written qthe fraction of a lattice link that lies between the last fluid node and the true wall — q=0 means the wall sits exactly on the fluid node, q=1 means it sits exactly on the solid node, which controls how the reflected population gets corrected relative to plain bounce-back. The accuracy of the whole scheme is then naturally judged by how close the lattice actually tracks the true wall position relative to the grid spacing itself:

A displacement-accuracy measure
$$a=\frac{\langle\delta x\rangle}{\Delta x}$$

The average positional error of the boundary representation, expressed as a fraction of one lattice spacing — the smaller this ratio, the closer Plot B's staircase tracks Plot A's true curve. This is the practical number a curved-boundary scheme is trying to drive toward zero.

More sophisticated schemes extend this same idea to moving walls, pressure boundaries, and inlets or outlets — but the underlying tension is always the one drawn across these two plots: an on-lattice method modeling an off-lattice world.

Source — board 2 Chalkboard showing D2Q9 and D3Q27 lattice diagrams, relaxation and transient plots, and boundary condition notes referencing Hiroshi Otomo
The lattice grids, relaxation curves, and boundary-condition notes as worked on the board — the numerical half of the chapter.
Synthesis

One distinction worth making explicit

Two different roads run through this chapter, and it's easy to fuse them into one without noticing.

Boltzmann → Chapman–Enskog → Navier–Stokes
— why does kinetic theory produce fluid mechanics?
Boltzmann/BGK → discrete velocities → collide + stream → LBM
— how do we exploit kinetic theory to simulate a fluid efficiently?

The lattice-gas history at the start of Part X is a variant of this second road, not a third one — it just arrives at the same discrete equation from the opposite direction, averaging a noisy automaton upward instead of discretizing the continuous Boltzmann equation downward. Both paths converge on the identical fi(x+vi,t+1) = fi(x,t) + Ωi equation, which is exactly why the chapter treats them as one road rather than two.

Chapman–Enskog then reappears a second time as the consistency check confirming that the chosen LBM scheme actually recovers the intended Navier–Stokes equations in its hydrodynamic limit.

The architecture, in ten seconds

Diagram 10 Full flowchart from Newton's laws through Liouville, BBGKY, Boltzmann, BGK, discrete velocities, and streaming down to Lattice Boltzmann, with a side branch to Navier-Stokes via Chapman-Enskog
The complete route, top to bottom, with the Navier–Stokes branch peeling off to the side.

Once this skeleton is fixed, the algebra stops looking like fourteen unrelated tricks. It's one continuous information-compression scheme — particles → distributions → a handful of moments — and LBM's entire cleverness is choosing to compute at the distribution level rather than attacking Navier–Stokes head-on.

↑ back to top