Skip to content
cfd-lab:~/zh/posts/2026-03-24-paper-review-…● online

本文译自作者的韩语原文。 阅读原文(한국어)

NOTE #009DAY TUE 유체역학DATE 2026.03.24UPDATED 2026.10.19READ 3 min read#Paper-Review#PINN#Deep-Learning#Turbulence-Model

[论文回顾] Physics-Informed Neural Networks for Turbulence Modeling

Re变成10倍,粘性残差就剩十分之一。λ一旦抹掉传感器项,表上的1%就不再属于那一次训练。

论文信息

  • 作者: Raissi, M., Perdikaris, P., Karniadakis, G. E.
  • 期刊: Journal of Computational Physics, Vol. 378, pp. 686–707, 2019
  • DOI: 10.1016/j.jcp.2018.10.045
  • arXiv: 1711.10561

一句话总结

该论文提出了一种通过将 Navier-Stokes 方程直接嵌入(Physics-Informed)神经网络损失函数的方法,实现仅通过几个压力传感器即可反求整个速度场。

推动 λ_PDE、λ_BC、λ_data 三个滑块,损失面倾向物理残差还是传感器项,会跟着变。

손실 가중치 λ가 너무 작으면 그 항이 안 떨어지고, 너무 크면 다른 항을 짓누른다. Re가 커지면 PDE 항이 stiff 해진다 — PINN의 핵심 난점.

只有数据项变深时,传感器拟合还在,散度为零的条件会松开。只有物理项变深时,方程更近了,压力传感器和速度却分开。


研究背景

传统的 CFD 处于两个极端之间。

传统方法 (k-ε, k-ω SST): 依赖于经验闭合系数。当雷诺数或几何形状发生变化时,需要重新调整系数,泛化能力有限。

纯数据驱动的深度学习: 需要大量的标注数据,且训练好的模型无法保证质量守恒或动量守恒。即使预测结果在物理上完全讲不通,损失函数也无法感知。

PINNs 是弥合这一差距的尝试。即使数据稀疏,物理定律也能起到正则化(regularizer)的作用。


核心方法论

PINN 的总损失函数是两项之和:

L=Ldata+λ Lphysics\mathcal{L} = \mathcal{L}_{\text{data}} + \lambda \, \mathcal{L}_{\text{physics}}

数据损失 Ldata\mathcal{L}_{\text{data}} 是观测值(例如压力传感器)与神经网络预测值之间的差异。

物理损失 Lphysics\mathcal{L}_{\text{physics}} 是不可压缩 Navier-Stokes 方程的残差(residual):

Lphysics=∥∂u∂t+(u⋅∇)u+∇p−1Re∇2u∥2+∥∇⋅u∥2\mathcal{L}_{\text{physics}} = \left\| \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u} \cdot \nabla)\mathbf{u} + \nabla p - \frac{1}{Re}\nabla^2\mathbf{u} \right\|^2 + \left\| \nabla \cdot \mathbf{u} \right\|^2

第二项是连续性方程(质量守恒)。由于神经网络被训练为使该残差趋于 0,因此预测值始终近似满足 N-S 方程。

导数是通过 PyTorch/TensorFlow 的自动微分 (automatic differentiation) 计算的,不需要额外的数值离散化。

1Re\frac{1}{Re} 变小以后时间积分怎么变硬,格子那一侧写在低马赫数下不把声音杀掉的渐近保持格式。这边同一份刚性,是用损失权重接下来的。


主要结果

案例条件结果
2D 圆柱绕流Re=100, 仅使用压力传感器速度场重构误差在1%以内, 准确复原涡旋频率
顶盖驱动流 (Lid-driven cavity)Re=1000速度剖面与 DNS 结果的一致性在 1% 以内
雷诺数反演仅通过速度数据成功将 Re 值本身识别为学习参数

特别是反问题 (inverse problem) 的解决能力令人印象深刻。可以从流场中反推雷诺数,或者仅凭速度数据复原隐藏的压力场。这些问题在传统方法中是不可能或极难实现的。

把表上的两个 Re 按粘性项拆开。圆柱是 Re=100,顶盖驱动是 Re=1000,差 10 倍。动量残差里的粘性一块是 1Re\frac{1}{Re}。速度尺度靠近 1 时,对流 (u⋅∇)u(\mathbf{u} \cdot \nabla)\mathbf{u} 大小不动,粘性只剩十分之一。连续残差 ∥∇⋅u∥2\left\| \nabla \cdot \mathbf{u} \right\|^2 里没有 Re。若 λ 是数据项和物理项的天平,要在 Re=1000 把粘性一块留在传感器旁边,λ 就得比 Re=100 时更撑得住。

圆柱只用压力传感器,速度场误差在 1% 以内,涡频率也复原了。顶盖驱动和 DNS 的差别在 1% 以内。两个数字都坐在 1% 这个位置。这个位置是 Ldata\mathcal{L}_{\text{data}} 和 λ Lphysics\lambda \, \mathcal{L}_{\text{physics}} 互不抹掉的时候。把 λ 加大到传感器项被埋住,几个压力点就不再把速度绑在 1%。把 λ 减小,拟合还在,散度为零的条件会松开。表记下的是天平成立的一个点,不是说 λ 随便搬,1% 还在。

Re 反演只给速度,把 Re 本身当成学习参数。粘性项的系数就是未知数。1Re\frac{1}{Re} 错了,残差里的粘性一块整个换一个大小,数据项为了贴住速度,可以把这个错误藏进压力梯度。λ 小,这种藏法就便宜。表上的识别成功,是 λ 把这种藏法变得很贵的那一次。


实际应用可能性

何时有用:

  • 实验测量数据稀疏的情况(仅有少数传感器)
  • 反问题:需要从测量值反求物理属性(粘度、Re)时
  • 基于物理的数据插值:利用物理定律填充实验数据的空白区域

能立即替代 OpenFOAM/Fluent 吗?

目前还不行。训练时间比 FVM 求解器慢数十到数百倍。一个简单的槽道流在 GPU 上可能需要数小时。目前不适合实时工程分析。

但是,与 OpenFOAM 混合使用的研究非常活跃。即通过 FVM 求得粗略解,再利用 PINN 进行精细校正。

# 使用 PyTorch 实现的物理损失计算示例
def physics_loss(model, x, t, Re):
    x.requires_grad_(True)
    t.requires_grad_(True)
 
    output = model(x, t)
    u, v, p = output[:, 0], output[:, 1], output[:, 2]
 
    # 通过自动微分计算偏导数
    u_t = torch.autograd.grad(u.sum(), t, create_graph=True)[0]
    u_x = torch.autograd.grad(u.sum(), x, create_graph=True)[0][:, 0]
    u_y = torch.autograd.grad(u.sum(), x, create_graph=True)[0][:, 1]
    p_x = torch.autograd.grad(p.sum(), x, create_graph=True)[0][:, 0]
 
    # x 方向动量方程残差
    residual_u = u_t + u * u_x + v * u_y + p_x - (1/Re) * (u_x + u_y)
 
    return (residual_u**2).mean()

把 λ 调大、把传感器项抹掉的地方

三维高 Re 里,残差的高频不容易留在网络中。边界层一薄,训练就晃,标准 PINN 不把晃动的幅度交回来。把区域切开,或者从 FVM 的解出发,是下一步的选择,不是把 λ 再拧一下就能补上的。

时间步长加大以后收益会断,这和损失权重是同一类账单。把 Δt 放大 5 倍只快了 1.9 倍、放大 10 倍就停在原地的那扇窗就是这条曲线。λ 也一样,过了某个值,它只是在抹传感器项。

如果对您有帮助,请分享。