PINNs在计算流体力学中的应用
物理信息神经网络(PINNs)在计算流体力学(CFD)领域展现了独特的优势:无需生成大规模训练数据集,仅通过物理方程作为约束即可进行流场求解。本章详细介绍PINNs在流体模拟中的理论基础、方法论和实践技巧。
1. Navier-Stokes方程的PINNs formulation
1.1 不可压缩Navier-Stokes方程
对于二维不可压缩流动,Navier-Stokes方程为:
其中 是速度场, 是压力, 是密度, 是运动粘度, 是外力。
PINNs通过神经网络逼近解:
1.2 损失函数构造
总损失函数由多部分组成:
NS残差损失:
其中 是动量方程残差, 是不可压缩性约束(散度损失)。
初始条件损失:
边界条件损失:
1.3 压力场处理技巧
压力没有时间导数项,梯度的反向传播可能不稳定。常用方法:
- 直接预测压力:将压力作为额外输出
- Poisson方程求解:从速度场导出压力
- 压力投影法:与传统的Projection方法结合
class PINN_CFD(nn.Module):
def __init__(self, layers, nu):
super().__init__()
self.nu = nu
# 速度网络
self.u_net = NeuralNetwork(layers[:-1] + [1])
self.v_net = NeuralNetwork(layers[:-1] + [1])
# 压力网络
self.p_net = NeuralNetwork(layers[:-1] + [1])
def forward(self, t, x, y):
# 预测速度场
u = self.u_net(torch.cat([t, x, y], dim=1))
v = self.v_net(torch.cat([t, x, y], dim=1))
p = self.p_net(torch.cat([t, x, y], dim=1))
return u, v, p
def compute_residuals(self, t, x, y):
u, v, p = self.forward(t, x, y)
# 自动微分计算
u_t = torch.autograd.grad(u, t, grad_outputs=torch.ones_like(u))[0]
u_x = torch.autograd.grad(u, x, grad_outputs=torch.ones_like(u))[0]
# ... 其他偏导数
# NS方程残差
r_u = u_t + u*u_x + v*u_y + p_x - self.nu*(u_xx + u_yy)
r_v = v_t + u*v_x + v*v_y + p_y - self.nu*(v_xx + v_yy)
r_div = u_x + v_y
return r_u, r_v, r_div2. 边界条件处理
2.1 无滑移边界条件
固体壁面处速度为零:
实现方式:在边界点强制约束损失
def boundary_enforcement(x, y, boundary_type):
"""边界条件强制"""
if boundary_type == "no_slip":
# 无滑移:速度为零
return 0.0, 0.0
elif boundary_type == "slip":
# 滑移:法向速度为零
normal = compute_normal(x, y)
return torch.dot(velocity, normal), tangential_velocity
elif boundary_type == "periodic":
# 周期性边界
return None # 需要特殊处理2.2 周期性边界条件
周期性边界在通道流中常见。关键技巧:
- 网络架构不变:不引入周期性假设到网络中
- 训练数据覆盖完整周期:1
- 损失函数无额外项:边界点处的损失自然满足
2.3 入口/出口边界条件
对于开放边界,常见处理方法:
- 速度入口:指定速度分布(如Poiseuille流)
- 压力出口:自由流出条件
- 无反射边界:减少人为反射
3. 湍流建模与PINNs
3.1 湍流的挑战
直接数值模拟(DNS)计算量极大,大涡模拟(LES)也需要精细网格。PINNs提供了一种数据高效的方法。
3.2 RANS-PINNs
将雷诺平均N-S方程(RANS)与PINNs结合:
湍流应力 通过神经网络建模:
其中 是可学习的湍流修正项。2
3.3 LES-PINNs
大涡模拟只过滤大尺度涡,小尺度涡通过亚网格模型建模:
亚网格应力模型:
PINNs可学习 空间分布。
4. 多尺度问题与时间依赖
4.1 时间多尺度
流体问题通常涉及多个时间尺度:
- 对流时间尺度:
- 扩散时间尺度:
- 湍流时间尺度:
自适应时间采样策略:
def adaptive_time_sampling(t_range, difficulty):
"""自适应时间采样"""
if difficulty == "multi_scale":
# 多尺度问题:密集采样多个时间点
t1 = torch.linspace(0, 0.1, 50) # 早期
t2 = torch.linspace(0.1, 1.0, 30) # 中期
t3 = torch.linspace(1.0, t_range, 20) # 稳态
return torch.cat([t1, t2, t3])
else:
return torch.linspace(0, t_range, 100)4.2 空间多尺度
复杂几何流动涉及边界层、剪切层等不同空间尺度:
- 局部增强:在高梯度区域增加采样点
- 自适应网络:使用自适应激活函数或网络架构
- 多网络方法:不同尺度使用不同网络
4.3 重整化群方法
将湍流的多尺度特性编码到PINNs中:
损失函数包含多尺度约束:
5. 典型应用案例
5.1 圆柱绕流
二维圆柱绕流是经典CFD benchmark:
- Reynolds数范围:Re = 100 ~ 10000
- 现象:层流分离、卡门涡街、过渡湍流
- PINNs优势:无需网格生成,处理复杂几何
5.2 顶盖驱动腔流
方腔内流体的顶盖驱动运动:
- 几何:2D方形腔体
- 边界条件:顶部边界速度给定的Dirichlet条件
- 验证数据:Gelfgat benchmark
5.3 通道流
周期性管道/通道流动:
- 精确解:Poiseuille流
- 应用:验证PINNs框架
- 可扩展:加入粗糙壁面、弯曲等复杂因素
6. 挑战与前沿方向
6.1 高Reynolds数问题
高Re流动的边界层极薄,对PINNs精度要求高:
- 区域分解:边界层内使用高分辨率
- 渐近增强:引入边界层渐近解
- 对齐坐标:使用边界层坐标变换
6.2 数值稳定性
长时间积分的数值发散问题:
- 软约束vs硬约束:硬边界条件更稳定
- 学习率调度:adaptive learning rate
- 残差缩放:避免损失函数的数值级差异
6.3 前沿进展
- Physics-informed Transformer:处理更大规模问题
- Neural Navier-Stokes Solver:端到端流场预测
- Adaptive PINNs:自动识别物理困难区域3
参考文献
Footnotes
-
Raissi, M., Perdikaris, P., & Karniadakis, G. E. (2019). Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations. Journal of Computational Physics. ↩
-
Duraisamy, K., Iacca, G., & Mendez, M. A. (2019). Perspectives on machine learning-augmented Reynolds-averaged and large eddy simulation models of turbulence. arXiv preprint. ↩
-
Jagtap, A. D., Kawaguchi, K., & Karniadakis, G. E. (2020). Adaptive activation functions accelerate convergence in deep and physics-informed neural networks. Journal of Computational Physics. ↩