关注微信同名公众号,获取更多信息
引言
Boltzmann 方程是统计力学和气体动力学的核心方程之一,它描述了气体粒子的分布函数在时间和空间上的演化。相较于传统的流体力学方程(如 Navier-Stokes 方程),Boltzmann 方程能够在更广泛的尺度上适用,包括稀薄气体、非平衡态流动以及微尺度现象。
本文我们将从基础概念出发,深入探讨 Boltzmann 方程的物理背景和数学表达,包括如何从微观粒子运动推导 Boltzmann 方程,以及如何通过 Chapman-Enskog 方法分析其如何与宏观流体方程建立联系。为了使理论更加直观,我们还会给出 C++ 代码示例,展示其数值求解方法。
Boltzmann方程的物理背景
1、统计力学与分布函数
在统计物理学中,我们研究的是大量粒子的平均行为,而不是单个粒子的轨迹。为了描述流体的统计状态,我们引入分布函数
f
(
x
,
u
,
t
)
f(\mathbf{x},\mathbf{u},t)
f(x,u,t),定义为:
f
(
x
,
u
,
t
)
d
3
x
d
3
u
f(\mathbf{x},\mathbf{u},t)d^3xd^3u
f(x,u,t)d3xd3u
代表在时刻
t
t
t 时,空间位置
x
\mathbf{x}
x 附近的体积元
d
3
x
d^3x
d3x,且速度接近
u
\mathbf{u}
u 的速度元
d
3
u
d^3u
d3u 内的粒子数。这个分布函数是 Boltzmann 方程的核心变量,它能够统计性地描述粒子的分布情况。
通过对分布函数在速度空间 d 3 u d^3u d3u 上积分,我们可以得到一些宏观物理量:
-
质量密度
ρ ( x , t ) = ∫ f ( x , u , t ) d 3 u \rho(\mathbf{x},t)=\int f(\mathbf{x},\mathbf{u},t)d^3u ρ(x,t)=∫f(x,u,t)d3u -
宏观速度
ρ u ( x , t ) = ∫ u f ( x , u , t ) d 3 u \rho\mathbf{u}(\mathbf{x},t)=\int \mathbf{u}f(\mathbf{x},\mathbf{u},t)d^3u ρu(x,t)=∫uf(x,u,t)d3u -
动量流密度
P = ∫ u u f ( x , u , t ) d 3 u \mathbf{P}=\int \mathbf{u}\mathbf{u}f(\mathbf{x},\mathbf{u},t)d^3u P=∫uuf(x,u,t)d3u -
内能密度
ρ e = ∫ 1 2 ∣ u ∣ 2 f ( x , u , t ) d 3 u \rho e=\int \frac{1}{2} |\mathbf{u}|^2 f(\mathbf{x},\mathbf{u},t)d^3u ρe=∫21∣u∣2f(x,u,t)d3u
这些量是流体力学中的基本变量,Boltzmann 方程的求解能够给出这些变量的演化规律。
2、Boltzmann 方程的建立
假设气体由大量相互作用的粒子组成,每个粒子按照牛顿第二定律运动,其速度和位置随着时间的演化由如下微分方程决定:
d
x
d
t
=
u
,
d
u
d
t
=
F
,
\frac{d \mathbf{x}}{dt}=\mathbf{u}, \frac{d \mathbf{u}}{dt}=\mathbf{F},
dtdx=u,dtdu=F,
其中
F
\mathbf{F}
F 代表外力(如重力、电场力等)。
为了推导 Boltzmann 方程,我们可以从粒子微观运动的角度进行。考虑粒子在相空间 ( x , u ) (\mathbf{x},\mathbf{u}) (x,u) 的分布函数 f ( x , u , t ) f(\mathbf{x},\mathbf{u},t) f(x,u,t)。粒子的状态随时间演化遵循以下基本规律:
- 粒子自由运动:粒子沿着速度
u
\mathbf{u}
u 进行漂移,导致分布函数发生对流变化:
∂ f ∂ t + u ⋅ ∇ x f \frac{\partial f}{\partial t}+\mathbf{u} \cdot \nabla_{\mathbf{x}} f ∂t∂f+u⋅∇xf - 外力作用:若系统存在外力
F
\mathbf{F}
F,粒子的速度会随时间变化,导致分布函数在速度空间中发生漂移:
F = m d u d t ⇒ d u d t = F m \mathbf{F}=m \frac{d \mathbf{u}}{dt} \Rightarrow \frac{d \mathbf{u}}{dt}=\frac{\mathbf{F}}{m} F=mdtdu⇒dtdu=mF
因此,外力对分布函数的影响为:
F ⋅ ∇ u f \mathbf{F} \cdot \nabla_{\mathbf{u}} f F⋅∇uf - 碰撞效应:粒子之间的碰撞会使分布函数趋向于平衡态,这一项通常用碰撞算子 Ω ( f ) \Omega (f) Ω(f) 表示:
( ∂ f ∂ t ) collision = Ω ( f ) \left(\frac{\partial f}{\partial t} \right)_\text{collision}=\Omega (f) (∂t∂f)collision=Ω(f)
综上所述,Boltzmann 方程可以写成如下形式:
∂
f
∂
t
+
u
⋅
∇
x
f
+
F
⋅
∇
u
f
=
Ω
(
f
)
\frac{\partial f}{\partial t}+\mathbf{u} \cdot \nabla_{\mathbf{x}} f + \mathbf{F} \cdot \nabla_{\mathbf{u}} f=\Omega (f)
∂t∂f+u⋅∇xf+F⋅∇uf=Ω(f)
其中,左侧项描述粒子的自由运动,包括时间变化、空间输运和外力作用;右侧项代表粒子间的碰撞作用,导致分布函数随时间变化。 这个碰撞项非常复杂,它决定了流体的粘性、热传导等输运性质
Maxwell-Boltzmann平衡分布
在粒子系统达到平衡态时,分布函数趋近于 Maxwell-Boltzmann 分布:
f
e
q
=
ρ
(
1
2
π
R
T
)
3
/
2
e
x
p
(
−
∣
ξ
−
u
∣
2
2
R
T
)
f^{eq}=\rho {\left( \frac{1}{2 \pi RT} \right)}^{3/2} exp{\left( - \frac{{|\mathbf{\xi}-\mathbf{u}|}^2}{2RT} \right)}
feq=ρ(2πRT1)3/2exp(−2RT∣ξ−u∣2)
在局部平衡条件下,Boltzmann 方程的碰撞项可以用 BGK 模型近似处理,使得求解过程大大简化。
Boltzmann碰撞项
1、碰撞项的数学表达
Boltzmann 方程的核心是碰撞项,它描述了粒子在发生碰撞时的统计行为。完整的碰撞积分方程为:
(
∂
f
∂
t
)
collision
=
∫
∫
[
f
′
f
∗
′
−
f
f
∗
]
B
(
g
,
Ω
)
d
Ω
d
3
u
∗
\left(\frac{\partial f}{\partial t} \right)_\text{collision} = \int \int \left[ f^{'} f_{*}^{'} -f f_{*} \right] B(g, \Omega) d \Omega d^3 u_{*}
(∂t∂f)collision=∫∫[f′f∗′−ff∗]B(g,Ω)dΩd3u∗
- f f f, f ∗ f_{*} f∗ 是碰撞前的粒子分布函数;
- f ′ f^{'} f′, f ∗ ′ f_{*}^{'} f∗′ 是碰撞后的粒子分布函数;
- B ( g , Ω ) B(g, \Omega) B(g,Ω) 是碰撞核,决定粒子的碰撞概率;
- g = ∣ u − u ∗ ∣ g=|\mathbf{u}-\mathbf{u_{*}}| g=∣u−u∗∣ 是相对速度;
- d Ω d \Omega dΩ 代表散射方向的积分。
这个积分表示的是粒子进入和离开特定速度状态的概率,由于完整的 Boltzmann 碰撞积分计算复杂,一般会采用近似方法进行简化。
2、BGK 近似
Bhatnagar-Gross-Krook (BGK) 近似是一种经典的碰撞模型,它假设粒子系统的碰撞趋向于局部平衡态,采用如下模型:
(
∂
f
∂
t
)
collision
=
−
1
τ
[
f
−
f
e
q
]
\left(\frac{\partial f}{\partial t} \right)_\text{collision}=- \frac{1}{\tau} \left[ f-f^{eq} \right]
(∂t∂f)collision=−τ1[f−feq]
其中, f e q f^{eq} feq 为局部 Maxwell-Boltzmann 平衡分布, τ \tau τ 为弛豫时间,表示系统恢复平衡的时间尺度。
BGK 近似计算简单,广泛用于格子 Boltzmann 方法 (LBM)。
Chapman-Enskog展开
Chapman-Enskog 展开是一种从 Boltzmann 方程推导 Navier-Stokes 方程的经典方法。假设分布函数
f
f
f 在局部平衡态附近作微扰展开:
f
=
f
e
q
+
ϵ
f
(
1
)
+
ϵ
(
2
)
f
(
2
)
+
.
.
.
f = f^{eq} + \epsilon f^{(1)} + \epsilon^{(2)} f^{(2)} + ...
f=feq+ϵf(1)+ϵ(2)f(2)+...
其中,
ϵ
\epsilon
ϵ 为 Knudsen 数(气体自由程与特征尺度之比),
f
(
1
)
f^{(1)}
f(1),
f
(
2
)
f^{(2)}
f(2) 分别为微扰修正项。
通过将展开项代入 Boltzmann 方程,并逐级展开微扰项,可以推导出粘性应力、热传导等输运性质。不同阶展开可以得到:
- 0 阶近似:恢复 Euler 方程(无粘流动);
- 1 阶近似:恢复 Navier-Stokes 方程(包含粘性和热传导效应);
- 2 阶近似:Burnett 方程(描述非平衡现象,如稀薄气体流动)。
对于一阶展开得到的 Navier-Stokes 方程,粘性系数由以下公式给出:
μ = ρ τ R T \mu=\rho \tau RT μ=ρτRT
C++ 代码实现
以下示例展示如何用 C++ 实现简单的 BGK 模型,通过不断执行碰撞函数,系统逐渐趋于平衡。
#include <iostream>
#include <vector>
#include <cmath>
const int NX = 100;
const int NY = 100;
const double tau = 0.6;
const double omega = 1.0 / tau;
std::vector<std::vector<double>> f(NX, std::vector<double>(NY, 1.0));
void collision()
{
for (int i = 0; i < NX; ++i)
{
for (int j = 0; j < NY; ++j)
{
double feq = 1.0; // 简化为均匀分布
f[i][j] += omega * (feq - f[i][j]);
}
}
}
int main()
{
for (int step = 0; step < 1000; ++step)
{
collision();
}
std::cout << "Simulation completed." << std::endl;
return 0;
}
总结
Boltzmann 方程从微观粒子运动出发,成功描述了气体动力学与宏观流体行为的联系。通过 BGK 模型简化碰撞项,我们能更高效地数值求解 Boltzmann 方程。本篇文章从基础原理、平衡分布函数到 Chapman-Enskog 展开进行了详细探讨,并给出了简单的 C++ 代码示例。