计算流体力学(CFD)公式转化与电脑求解原理
以下是关于流体力学公式如何转化为计算软件能用的形式,以及电脑如何求解的详细解释,用简单语言面向初学者。
1. 如何转化为计算软件使用的公式
流体力学方程是连续的微分公式,电脑只能处理数字,所以需要把它们“翻译”成离散的加减法形式。这个过程叫离散化。
1.1 把空间和时间切成小块
- 空间网格: 把模型(比如管道)分成小格子,像搭乐高积木。例如,一个管道分成10万个小立方体。
- 时间步长: 把时间分成小段,比如每0.001秒算一次,像拍电影一帧一帧。 比喻: 把水流拍成照片。
1.2 把微分变成差分
微分是连续变化,电脑用格子间的差值代替。
- 时间项(如 ∂e/∂t): 用前后时间差近似:
∂e/∂t ≈ (ein+1 – ein) / Δt
- ein: 当前内能,ein+1: 下一步内能,Δt: 时间步长。
- 空间项(如 ∇ · (ρu)): 用相邻格子差值:
∇ · (ρu) ≈ ((ρu)i+1n – (ρu)i-1n) / (2 Δx)
- Δx: 格子宽度。
1.3 处理复杂项
- 对流项(如 u · ∇e): ux (ei+1 – ei-1) / (2 Δx)
- 扩散项(如 ∇ · (k ∇T)): (k (Ti+1 – Ti) – k (Ti – Ti-1)) / (Δx2)
1.4 生成方程组
每个格子一个公式,10万个格子就有10万个方程,形成一个大系统。 比喻: 把水流故事拆成一页页小纸条。
2. 电脑如何执行求解的原理
离散化后,方程变成代数形式,电脑通过以下步骤求解。
2.1 初始化:给个起点
- 假设初始值,比如 u = 0、p = 大气压。 比喻: 像迷宫游戏先选个起点。
2.2 迭代求解:一步步逼近
- 显式方法: 用当前值算下一步,简单但不稳定:
ein+1 = ein + Δt [-pi (∇ · u) + ∇ · (k ∇T) + Φi – ρ (u · ∇e)] / ρ
- 隐式方法: 把 n+1 的值写进方程,解矩阵,更稳定。
- 比喻: 像猜谜语,反复调整直到猜对。
2.3 矩阵求解:处理大方程组
- 隐式方法生成矩阵 A x = b,x 是 n+1 的值。
- 迭代法: 从猜测值开始调整,如Gauss-Seidel。
2.4 检查收敛
检查值变化是否小于 10-6,确保守恒。
2.5 输出结果
生成彩图或动画,如温度分布。 比喻: 把水流拍成视频。
3. 为什么可以转化?更基础的讲解
3.1 流体力学方程是什么
这些公式是“水流规则”,描述连续变化,但电脑只认数字。
3.2 为什么从“连续”变“离散”
- 连续: 微分是平滑曲线,如 ∂ρ/∂t。 比喻: 像一条蜿蜒的河流。
- 离散: 把时间和空间切成小块,用差值代替微分。 比喻: 把河流分成小段直线。
- 为什么行: 块越小,拼起来越接近原曲线。
3.3 例子:连续性方程
∂ρ/∂t + ∂(ρu)/∂x = 0
- 时间项: (ρ2现在 – ρ20.1秒前) / 0.1
- 空间项: (ρ3 u3 – ρ1 u1) / Δx
- 新公式: ρ2现在 = ρ20.1秒前 – 0.1 * (ρ3 u3 – ρ1 u1) / Δx
3.4 电脑怎么算
- 从猜测开始,用公式算下一步,反复调整直到稳定。
4. 具体离散公式与推导
4.1 连续性方程
∂ρ/∂t + ∂(ρu)/∂x = 0
离散公式:
ρin+1 = ρin – (Δt / (2 Δx)) * [(ρu)i+1n – (ρu)i-1n]
推导:
- 时间项: ∂ρ/∂t ≈ (ρin+1 – ρin) / Δt
- 空间项: ∂(ρu)/∂x ≈ ((ρu)i+1n – (ρu)i-1n) / (2 Δx)
- 整合: 代入并整理。
4.2 纳维-斯托克斯方程
ρ (∂u/∂t + u ∂u/∂x) = -∂p/∂x + μ ∂2u/∂x2
离散公式:
uin+1 = uin + (Δt / ρ) * [-(pi+1n – pi-1n) / (2 Δx) + μ (ui+1n – 2 uin + ui-1n) / (Δx2) – ρ uin (ui+1n – ui-1n) / (2 Δx)]
推导:
- 时间项: ∂u/∂t ≈ (uin+1 – uin) / Δt
- 对流项: u ∂u/∂x ≈ uin (ui+1n – ui-1n) / (2 Δx)
- 压力项: -∂p/∂x ≈ -(pi+1n – pi-1n) / (2 Δx)
- 粘性项: μ ∂2u/∂x2 ≈ μ (ui+1n – 2 uin + ui-1n) / (Δx2)
4.3 能量方程
ρ (∂e/∂t + u ∂e/∂x) = -p ∂u/∂x + k ∂2T/∂x2
离散公式:
ein+1 = ein + (Δt / ρ) * [-pin (ui+1n – ui-1n) / (2 Δx) + k (Ti+1n – 2 Tin + Ti-1n) / (Δx2) – ρ uin (ei+1n – ei-1n) / (2 Δx)]
推导:
- 时间项: ∂e/∂t ≈ (ein+1 – ein) / Δt
- 对流项: u ∂e/∂x ≈ uin (ei+1n – ei-1n) / (2 Δx)
- 压力项: -p ∂u/∂x ≈ -pin (ui+1n – ui-1n) / (2 Δx)
- 热传导项: k ∂2T/∂x2 ≈ k (Ti+1n – 2 Tin + Ti-1n) / (Δx2)
5. 隐式方法的矩阵形式
5.1 连续性方程(隐式)
((ρin+1 – ρin) / Δt) + (((ρu)i+1n+1 – (ρu)i-1n+1) / (2 Δx)) = 0
矩阵形式 (假设 u 已知):
[1 a 0] [ρ1n+1] [ρ1n + a (ρu)0n+1]
[-a 1 a] [ρ2n+1] = [ρ2n ]
[0 -a 1] [ρ3n+1] [ρ3n – a (ρu)4n+1], a = (Δt / (2 Δx)) un+1
5.2 纳维-斯托克斯方程(隐式)
ρ (((uin+1 – uin) / Δt) + uin ((ui+1n+1 – ui-1n+1) / (2 Δx))) = -((pi+1n+1 – pi-1n+1) / (2 Δx)) + μ ((ui+1n+1 – 2 uin+1 + ui-1n+1) / (Δx2))
矩阵形式 (假设 p 已知):
[b c 0] [u1n+1] [右边项],
[-a b c] [u2n+1] = [右边项],
[0 -a b] [u3n+1] [右边项],
a = (ρ uin Δt) / (2 Δx) + (μ Δt) / (Δx2), b = ρ / Δt + (2 μ Δt) / (Δx2), c = -(ρ uin Δt) / (2 Δx) + (μ Δt) / (Δx2)
5.3 能量方程(隐式)
ρ (((ein+1 – ein) / Δt) + uin ((ei+1n+1 – ei-1n+1) / (2 Δx))) = -pin+1 ((ui+1n+1 – ui-1n+1) / (2 Δx)) + k ((Ti+1n+1 – 2 Tin+1 + Ti-1n+1) / (Δx2))
矩阵形式 (假设 p, u 已知):
[b c 0] [e1n+1] [右边项],
[-a b c] [e2n+1] = [右边项],
[0 -a b] [e3n+1] [右边项],
a = (ρ uin Δt) / (2 Δx) + (k Δt) / (cv Δx2), b = ρ / Δt + (2 k Δt) / (cv Δx2), c = -(ρ uin Δt) / (2 Δx) + (k Δt) / (cv Δx2)
6. 为什么隐式方法用 n+1
6.1 显式 vs 隐式
- 显式: 只用 n 的值猜 n+1。 比喻: 走路只看脚下,容易摔。
- 隐式: 用 n+1 的值一起解。 比喻: 走路看全路,计划每步。
6.2 为什么用 n+1
隐式站在“未来角度”看问题。
- 显式问题: 只看现在,水流突变可能算错。 例子: 跑步踩坑摔倒。
- 隐式优势: 考虑未来,调整所有格子。 例子: 跑步提前避坑。
6.3 为什么更准确
不是 n+1 本身准,而是整体解更符合规律。
- 显式: 误差像滚雪球。 例子: 只看今天猜天气,错得离谱。
- 隐式: 所有格子一起算,误差不放大。 例子: 看趋势猜天气,更靠谱。
6.4 为什么更稳定
- 显式: Δt 大时结果“爆炸”。 例子: 跳格子跳太远摔出界。
- 隐式: 矩阵约束,Δt 大也稳。 例子: 拉着手跳,不摔。
6.5 例子
- 显式: ρin+1 = 1000 – 变化量,可能变负数。
- 隐式: 矩阵解出 ρin+1 = 998,合理且稳定。