首页/文章/ 详情

PINN求解NavierStokes方程(不可压缩层流),pytorch框架

7月前浏览281

逆问题

求解和识别二维不可压缩纳维-斯托克斯方程,具体是下图圆柱绕流问题。

参数    为未知参数,该问题为已知边界条件和微分方程,但方程中参数未知,求解    以及方程参数。

  • 动量方程
 
  • 连续性方程
 

但在求解过程,可引入    ,满足    ,这样就有:

 

这就是“流函数”定义式被设计成这样的原因——它天然就保证了不可压缩条件。

正问题

稳态问题

1. 参数与条件整理

参数      
符号      
数值      
动力粘度      
               
密度      
               
最大入口速度      
               

入口速度剖面(在      处)为:

 

这里      应为通道的高度(或宽度),     是垂直于流动方向的坐标(通常     )。

2. 物理背景与解释

(1)速度剖面

入口速度呈抛物线分布,对应于完全发展的Poiseuille流动(二维平面泊肃叶流)的速度型。最大速度      出现在通道中心      处,此时:

 

与给定的      一致。

(2)雷诺数(Reynolds number)估算

取特征长度     ,特征速度     ,则运动粘度:

 

雷诺数为:

 

雷诺数的大小反映了流动的惯性力与粘性力的相对重要性。

瞬态问题

1. 物性参数

  • 动力粘性:      
  • 密度:      

2. 入口流速条件

入口流速在      处为随时间与      方向变化的速度剖面,其数学表达式为:

 

3. 相关常规定义

  • 最大流速:      
  • 时间周期:      
  • 其中        是流道在        方向的高度(      ).
来源:我的博士日记
UM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-01-27
最近编辑:7月前
此生君子意逍遥
博士 签名征集中
获赞 62粉丝 130文章 153课程 0
点赞
收藏
作者推荐

PINN求解burger方程,tensorflow框架,附代码(三)

TensorFlow 1.x和TensorFlow 2.x区别TensorFlow 1.x版本只有静态图模式,需要手动构建计算图,调试困难,但性能好。TensorFlow 2.x 初期:默认Eager Execution,易于调试,但性能较差。TensorFlow 2.x + @tf.function:两全其美:易于调试 + 高性能,方便在Eager Execution和 Graph Execution间转换本文提供的代码采用2.x版本正问题已知 ,控制方程形式: 初始条件: 边界条件: 该方程的解析表达式通过Hopf-Cole变换获得,较为复杂,感兴趣的读者可自行搜索。 @tf.function def net_f(self, x, t): """Compute physics residual""" # 使用单个GradientTape计算所有导数 with tf.GradientTape() as tape2: tape2.watch([x, t]) with tf.GradientTape(persistent=True) as tape1: tape1.watch([x, t]) u = self.net_u(x, t) # 计算一阶导数 u_t = tape1.gradient(u, t) u_x = tape1.gradient(u, x) # 计算二阶导数 u_xx = tape2.gradient(u_x, x) # 清理tapes del tape1 # Burgers方程残差: u_t + u*u_x - nu*u_xx f = u_t + u * u_x - self.nu * u_xx return f persistent=True时,tape1可以多次使用,但是需要手动管理内存,tape2自动清理。代码运行在Eager Execution模式下,但通过@tf.function可以在关键函数上获得了Graph Execution的性能优化。反问题参数 和 未知,控制方程形式: 已知一些测试点数据,反求未知参数。np.linalg.norm(u_star, 2) 计算u_star的2范数u_train_noisy = u_train + noise * np.std(u_train) * np.random.randn(u_train.shape[0], u_train.shape[1]) 噪声影响,np.std(u_train)是u_train的标准差,np.random.randn(u_train.shape[0], u_train.shape[1])标准正态分布取值上图中的黑色标记为进行训练的数据通过上图显示的信息,可以看到精确数据训练结果和带有噪声数据训练结果和真实结果的对比。来源:我的博士日记

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈