瑞利-贝纳德对流¶
瑞利-贝纳德问题将不可压缩流体流动与热输运耦合在一起:一个底部加热、顶部冷却的水平腔体,一旦浮力超过黏性与热扩散的耗散效应,便会发展出对流卷。脚本 examples/fluid/rayleigh_benard/rayleigh_benard.py 在长宽比为 2:1 的矩形腔体中、以可配置的瑞利数求解稳态布西内斯克近似。
这是 流体力学 中唯一涉及多物理场耦合的算例——将动量、连续性与能量纳入一个整体系统。
问题¶
布西内斯克方程组,
定义在 \(\Omega = [0, 2] \times [0, 1]\) 上,其中
速度:所有壁面均为无滑移,
温度:底部(\(y = 0\))为 \(T = 1\),顶部(\(y = 1\))为 \(T = 0\),侧壁为无通量。
瑞利数
决定了流动所处的区间:低于 \(\mathrm{Ra}_c \approx 1708\) 时传热纯粹靠传导;高于此值则出现对流卷;在更高的 \(\mathrm{Ra}\) 下,卷会变得非定常并最终走向混沌。脚本默认取 \(\mathrm{Ra} = 10^4\),稳稳地处于稳态对流区间。
耦合装配器¶
每个节点上的未知量为 \((u, v, p, T)\)——每个节点 4 个自由度——装配器在每个求积点返回一个 \(4 \times 4\) 的块:
class RayleighBenardAssembler(ElementAssembler):
def __post_init__(self, rho=1.0, mu=0.01, kappa=0.01,
g=9.81, beta=0.1, tau=0.1):
self.rho, self.mu, self.kappa = rho, mu, kappa
self.g, self.beta, self.tau = g, beta, tau
def forward(self, u, v, gradu, gradv, w_prev, T_prev):
# row 0: x-momentum [convection+diffusion, 0, -dxp, 0 ]
# row 1: y-momentum [0, convection+diffusion, -dyp, buoyancy ]
# row 2: continuity [dxv, dyv, PSPG, 0 ]
# row 3: energy [0, 0, 0, convection+diffusion]
...
位于第 1 行 / 第 3 列的浮力块正是将温度反耦合进动量方程的部分:
这里的 \(u\) 与 \(v\) 是试探形函数与测试形函数的值(请注意它们与速度分量 \(v\) 不幸的命名冲突——分发约定参见 形式)。温度方程(第 3 行)复用了对流 / 扩散块,只是用热导率 \(\kappa\) 取代了黏度 \(\mu\)。
上一迭代步的速度 w_prev 与温度 T_prev 以 point_data 关键字参数的形式传入,模式与单物理场的方腔算例完全一致。
稳定化¶
脚本仅使用 PSPG(不含 SUPG),并取常数 \(\tau = 0.05 / n_\text{grid}\)。在 \(\mathrm{Ra} = 10^4\) 下,速度足够温和,SUPG 并非严格必需;对于更高的瑞利数,可换用 圆柱绕流(涡脱落) 中的自适应 \(\tau\)。
Picard 迭代¶
与 顶盖驱动方腔 相同的不动点循环。每次迭代:
由当前解向量计算 \(\mathbf{w}^n, T^n\)。
用新的
point_data重新装配 \(K\)。对速度与温度的狄利克雷边界条件应用
Condenser(每个分量使用不同的掩码!)并求解。与上一迭代步比较以检查收敛性。
典型收敛情况:在 \(\mathrm{Ra} = 10^4\) 下约需 30 次迭代。
图 48 rayleigh_benard.py 的输出。左:温度场——温暖的底壁沿中心线送出一股上升羽流,在寒冷的顶部分裂为沿两侧壁面下沉的两股冷羽流。右:速度大小——两个反向旋转的对流卷,峰值速度出现在上升 / 下沉的流柱沿线,而卷心处则为滞止区。¶
输出¶
rayleigh_benard.png 显示两个面板:温度(带有特征性的温暖上升羽流 / 寒冷下沉羽流)以及速度大小(带有双卷结构)。对于中等 \(\mathrm{Ra}\) 下的 2:1 腔体,稳态解呈现为两个反向旋转的卷。
运行方式¶
cd examples/fluid/rayleigh_benard
python rayleigh_benard.py # writes rayleigh_benard.png
修改脚本中的 ra= 参数以扫描瑞利数;远高于 \(10^5\) 的取值将需要更细的网格,并很可能需要一个瞬态驱动器。
下一步¶
顶盖驱动方腔——不含温度耦合的同款 Picard 方案。
泰勒-格林涡(收敛性研究)——一个具有精确解、用于验证的瞬态不可压缩流动。
扩散——单独求解的热方程。
形式——多分量
forward返回值的签名。