第二章 压力速度耦合算法

2.1 压力泊松方程

在第一章中,我们推导出了不可压缩牛顿流体的控制方程:

  • 连续性方程
    ∇⋅U⃗=0(1.8)\nabla \cdot \vec U =0 \tag{1.8} ∇⋅U=0(1.8)
  • 动量方程
    ∂U⃗∂t+∇⋅(U⃗U⃗)=∇⋅ν∇U⃗−∇pρ+g⃗(1.15){{\partial \vec U}\over{\partial t}}+\nabla\cdot(\vec U\vec U)=\nabla\cdot\nu\nabla\vec U-\nabla {p\over\rho}+ \vec g \tag{1.15} ∂t∂U​+∇⋅(UU)=∇⋅ν∇U−∇ρp​+g​(1.15)

显而易见,这组方程里有两个未知量:速度U⃗\vec UU和压力ppp。未知量个数与控制方程相等,理论上方程可解,但实际求解则要困难很多,最主要的问题来自控制方程组缺少直接求解压力的方程。具体来说,速度不可能通过方程1.8确定,只能使用方程1.15来求解速度,如果使用方程1.15来求解速度,就意味着必须要使用方程1.8来求解压力,但这是不可能的,因为方程1.8根本不包含压力项。

为了解决压力和速度的耦合求解问题,历史上存在两种处理思路。其中一种思路是将方程(1.8)与(1.15)处理为一个大方程后进行整体求解,称为耦合式解法。另一类方法是将两个方程进行分别求解,称为分离式解法,本文之后要介绍的SIMPLE和PISO等压力速度耦合算法算法就属于分离式解法。所有这些压力耦合速度算法的基础都是构建求解压力的方程,即构建压力泊松方程。在这一节,我们首先进行这项工作。

为了方便表述,我们对方程(1.15)进行一定的处理,首先,我们令P=p/ρP=p/\rhoP=p/ρ,其次,暂时忽略重力的作用。此时,仿照方程1.36,方程1.15可以离散为:
aPU⃗pn+∑NaNU⃗Nn=S⃗−∇Pn(2.1)a_P\vec U_p^n+\sum_Na_N\vec U_N^n=\vec S-\nabla P^n \tag{2.1} aP​Upn​+N∑​aN​UNn​=S−∇Pn(2.1)
忽略重力出于以下两个考虑。首先,在许多计算中重力的作用本身可以忽略。其次,重力本身是一个显式的已知量,其可以归入S⃗\vec SS,也可以同压力一起计算,关于这一点我们将在之后进行讨论。对方程进行移项可得:
U⃗pn=S⃗−∑NaNU⃗NnaP−1aP∇Pn(2.2)\vec U_p^n=\frac{\vec S-\sum_Na_N\vec U_N^n}{a_P}-\frac{1}{a_P}\nabla P^n \tag{2.2} Upn​=aP​S−∑N​aN​UNn​​−aP​1​∇Pn(2.2)
定义:
H⃗=S⃗−∑NaNU⃗NnHbyA⃗=H⃗/aP(2.3)\begin{array}{l} \vec H=\vec S-\sum_Na_N\vec U_N^n \\ \vec{HbyA}=\vec H/a_P \end{array} \tag{2.3} H=S−∑N​aN​UNn​HbyA​=H/aP​​(2.3)
将方程(2.3)代入方程(2.2)可得:
U⃗pn=HbyAn⃗−1aP∇Pn(2.4)\vec U_p^n=\vec{HbyA^n}-\frac{1}{a_P}\nabla P^n \tag{2.4} Upn​=HbyAn​−aP​1​∇Pn(2.4)
对U⃗pn\vec U_p^nUpn​使用连续性方程进行约束:
∇⋅(U⃗pn)=0→∇⋅(HbyAn⃗−1aP∇Pn)=0(2.5)\nabla\cdot(\vec U_p^n)=0 \rightarrow \nabla\cdot\left(\vec{HbyA^n}-\frac{1}{a_P}\nabla P^n\right)=0 \tag{2.5} ∇⋅(Upn​)=0→∇⋅(HbyAn​−aP​1​∇Pn)=0(2.5)
即:
∇⋅(1aP∇Pn)=∇⋅(HbyAn⃗)(2.6)\nabla\cdot\left(\frac{1}{a_P}\nabla P^n\right)=\nabla\cdot\left(\vec{HbyA^n}\right) \tag{2.6} ∇⋅(aP​1​∇Pn)=∇⋅(HbyAn​)(2.6)
式2.6即是用于求解压力的压力泊松方程。

为了方便大家对式2.3中的HHH算符,HbyAHbyAHbyA算符以及整个推导流程有更好的理解,接下来使用矩阵形式重新推导一遍压力泊松方程。读者应该注意对比矩阵形式和上述形式之间的联系。

对方程∂U⃗∂t+∇⋅(U⃗U⃗)=∇⋅ν∇U⃗{{\partial \vec U}\over{\partial t}}+\nabla\cdot(\vec U\vec U)=\nabla\cdot\nu\nabla\vec U∂t∂U​+∇⋅(UU)=∇⋅ν∇U进行离散得到:
[A][U⃗]=[S⃗](2.7)[A][\vec U]=[\vec S] \tag{2.7} [A][U]=[S](2.7)
将[A][A][A]拆分成对角线元素[Adiag][A_{diag}][Adiag​]和非对角元素[Aoffdiag][A_{offdiag}][Aoffdiag​]:
[Adiag][U⃗]+[Aoffdiag][U⃗]=[S⃗](2.8)[A_{diag}][\vec U]+[A_{offdiag}][\vec U]=[\vec S] \tag{2.8} [Adiag​][U]+[Aoffdiag​][U]=[S](2.8)
定义HHH算符和HbyAHbyAHbyA算符:
H([U⃗])=[S⃗]−[Aoffdiag][U⃗](2.9)H([\vec U])=[\vec S]-[A_{offdiag}][\vec U] \tag{2.9} H([U])=[S]−[Aoffdiag​][U](2.9)
HbyA([U⃗])=[Adiag]−1H(U⃗)(2.10)HbyA([\vec U])={[A_{diag}]}^{-1}H(\vec U) \tag{2.10} HbyA([U])=[Adiag​]−1H(U)(2.10)
因此,对方程∂U⃗∂t+∇⋅(U⃗U⃗)=∇⋅ν∇U⃗+∇P{{\partial \vec U}\over{\partial t}}+\nabla\cdot(\vec U\vec U)=\nabla\cdot\nu\nabla\vec U+\nabla P∂t∂U​+∇⋅(UU)=∇⋅ν∇U+∇P进行离散可得:
[U⃗]=HbyA([U⃗])−[Adiag]−1∇[P](2.11)[\vec U]=HbyA([\vec U])-{[A_{diag}]}^{-1}\nabla [P] \tag{2.11} [U]=HbyA([U])−[Adiag​]−1∇[P](2.11)
速度满足连续性方程∇⋅U⃗=0\nabla \cdot \vec U=0∇⋅U=0,带入方程(2.11)可得:
∇⋅(HbyA([U⃗]))=∇⋅([Adiag]−1∇[P])(2.12)\nabla\cdot\left(HbyA([\vec U])\right)=\nabla\cdot\left({[A_{diag}]}^{-1}\nabla [P]\right) \tag{2.12} ∇⋅(HbyA([U]))=∇⋅([Adiag​]−1∇[P])(2.12)
上述矩阵形式的推导过程对与理解代码非常有帮助,在之后关于OpenFOAM的代码解读章节,我们将对上述过程进行再次解释。

2.1 压力泊松方程(OpenFOAM理论笔记系列)相关推荐

  1. 2.2 SIMPLE系列算法 | 2.3 PISO算法(OpenFOAM理论笔记系列)

    2.2 SIMPLE系列算法 2.2.1标准SIMPLE算法 SIMPLE算法(Semi-Implicit Method for PressureLinked Equations)1最初被设计用来求解 ...

  2. 3.2.1 对流项离散格式的基本介绍 | 3.2.2 中心离散格式与一阶迎风格式(OpenFOAM理论笔记系列)

    3.2 对流项的离散格式 3.2.1 对流项离散格式的基本介绍 在开始本节的讨论开始,笔者首先要说明,本节所介绍的内容相对于整个对流项离散格式的开发的历史可以说是极其简略的.可以这么说,整个计算流体动 ...

  3. 1.2.2 通用的标量输运方程|1.2.3 控制方程的分类(OpenFOAM理论笔记系列)

    1.2.2 通用的标量输运方程 1.2.1节涉及的动量方程和能量方程都可以整理为如下的标准的标量输运方程: ∂ ( ρ ϕ ) ∂ t + ∇ ⋅ ( ρ ϕ u ⃗ ) = ∇ ⋅ ( Γ ∇ ϕ ...

  4. 《学习geometric deep learning笔记系列》第一篇,Non-Euclidean Structure Data之我见

    <学习geometric deep learning笔记系列>第一篇,Non-Euclidean Structure Data之我见 FesianXu at UESTC 前言 本文是笔者在 ...

  5. 密码学读书笔记系列(一):《密码故事——人类智力的另类较量》

    密码学读书笔记系列(一):<密码故事--人类智力的另类较量> 第一章 玛丽女王的密码 第二章 不可破译的密码 第三章 加密的机械化 第四章 破解恩格玛 第五章 语言上的隔阂 第六章 艾丽丝 ...

  6. 《SVM笔记系列之六》支持向量机中的核技巧那些事儿

    <SVM笔记系列之六>支持向量机中的核技巧那些事儿 前言 我们在前文[1-5]中介绍了线性支持向量机的原理和推导,涉及到了软和硬的线性支持向量机,还有相关的广义拉格朗日乘数法和KKT条件等 ...

  7. 雨痕大神的《学习笔记系列》

    雨痕大神的<学习笔记>可以在他的GitHub(https://github.com/qyuhen/book)下载,7000+的Star,足以证明认可度. 笔记系列陆陆续续在出版,已出版的有 ...

  8. 《浪潮之巅》读书笔记系列:IBM 蓝色巨人

    <浪潮之巅>读书笔记系列:IBM 蓝色巨人 精彩部分 1.    IBM公司可能是的世界上为数不多的成功逃过历次经济危机,并且在历次技术革命中成功转型的公司. 2.    一个公司创始者的 ...

  9. SQL Server 2008/2012中SQL应用系列及BI学习笔记系列--目录索引

    SQL Server 2008中的一些特性总结及BI学习笔记系列,欢迎与邀月交流. 3w@live.cn  ◆0.SQL应用系列 1.SQL Server 2008中SQL增强之一:Values新用途 ...

最新文章

  1. python【力扣LeetCode算法题库】100-相同的树
  2. 代替vscode的工具_Vscode官方版
  3. java2ee和java2se_Java知识:(2)JavaSE和JavaEE
  4. wordpress房产信息网_Realia v3.1.2 wordpress房地产模板 租房网站模板
  5. 安装openssl-devel命令
  6. java header file_javah 生成header file 报错 问题解决
  7. 相关系数excel_《从EXCEL到PYTHON数据分析进阶指南》终结篇
  8. 软件开发项目管理经验总结
  9. idea格式化代码小技巧
  10. 64位驱动 hp630打印机_HP LaserJet1010 打印机驱动win7 64位
  11. python tolist()方法
  12. 云呐|RFID资产盘点系统带审批(rfid库存盘点功能)
  13. PX4 FMU [17] stabilize
  14. java 数据库密码加密解密方法
  15. 概率统计Python计算:F分布分位点计算
  16. java 记录微信转发次数_微信分享追踪分析系统 ,可以精细统计朋友圈访客来访次数及时间和转发...
  17. CentOS之VI编辑器的常用命令
  18. Android-(6)自定义控件
  19. PHP项目部署报错之:open_basedir限制目录
  20. 【云驻共创】华为云云原生之Kubernetes网络架构原理深度剖析(上)

热门文章

  1. wx.showToast() 在真机中一闪而过
  2. domoticz折腾指南--通过esp_easy固件控制继电器开关
  3. html5字体统一解决方案
  4. NetFPGA-SUME10G以太网接口仿真问题
  5. 微信小程序怎么制作自己的程序呢?简单明了的步骤分享
  6. 华三HCL模拟器添加虚拟网卡连接外网、VMware虚拟机、实体机方法
  7. 电商系统之订单设计篇
  8. ad16 导入dwg_AD16怎样精确导入CAD文件
  9. 【愚公系列】2022年09月 微信小程序-WebGL立体图形的绘制
  10. 动感歌词制作与转换工具