logo资料库

openFOAM编程日志_单相不可压缩流动2020edition2.5.pdf

第1页 / 共48页
第2页 / 共48页
第3页 / 共48页
第4页 / 共48页
第5页 / 共48页
第6页 / 共48页
第7页 / 共48页
第8页 / 共48页
资料共48页,剩余部分请下载后查看
一 控制方程与离散
1.控制方程及计算难点
2.动量方程的有限体积离散
3.压力泊松方程的构建
二 压力速度耦合算法
1.压力速度耦合算法概述
2.PISO算法
1.SIMPLE/SIMPLEC算法与simpleFoam
1.SIMPLE算法
2.SIMPLEC算法
3.PIMPLE算法与pimpleFoam
1.PISO算法和SIMPLE算法的讨论
2.PIMPLE算法
附录
附录1 icoFoam代码解析
附录2 simpleFoam代码解析
附录3 pimpleFoam代码解析
附录4 压力震荡与Rhie-Chow插值
1.离散的一维压力泊松方程
2.压力的数值震荡
3.Rhie-Chow插值与其openFOAM实现
4.梯度计算引起的数值震荡
附录5 icoFoam与pisoFoam的区别
附录6 附加显式体积力源项的耦合算法
附录7. UEqn.A(),UEqn.H()与pEqn.flux()?
待补充内容
参考资料
更新日志
openFOAM 编程日志 单相不可压缩流动 How to Write CFD Codes with OpenFOAM Section1: Perform an Incompressible Singe Phase Flow Simulation CloudBird 2020 第Ⅱ版 Second Edition in 2020
故 幾 於 道 處 眾 人 之 所 惡 上 善 若 水 水 善 利 萬 物 而 不 爭 东摘西采 初学者的笔记 勘误请联系:cloudbird7@foxmail.com 获取最新修订版请访问我的 CSDN 博客:https://blog.csdn.net/CloudBird07
目录 一 控制方程与离散..................................................................................................................... - 1 - 1. 控制方程及计算难点......................................................................................................- 1 - 2. 动量方程的有限体积离散..............................................................................................- 2 - 3. 压力泊松方程的构建......................................................................................................- 5 - 二 压力速度耦合算法................................................................................................................. - 8 - 1. 压力速度耦合算法概述..................................................................................................- 8 - 2. PISO 算法......................................................................................................................... - 8 - 1. SIMPLE/SIMPLEC 算法与 simpleFoam........................................................................- 11 - 1. SIMPLE 算法........................................................................................................... - 11 - 2. SIMPLEC 算法.........................................................................................................- 13 - 3. PIMPLE 算法与 pimpleFoam........................................................................................ - 15 - 1. PISO 算法和 SIMPLE 算法的讨论.........................................................................- 15 - 2. PIMPLE 算法...........................................................................................................- 17 - 附录..............................................................................................................................................- 19 - 附录 1 icoFoam 代码解析.................................................................................................- 19 - 附录 2 simpleFoam 代码解析.......................................................................................... - 23 - 附录 3 pimpleFoam 代码解析..........................................................................................- 25 - 附录 4 压力震荡与 Rhie-Chow 插值...............................................................................- 29 - 1. 离散的一维压力泊松方程................................................................................... - 29 - 2. 压力的数值震荡....................................................................................................- 31 - 3. Rhie-Chow 插值与其 openFOAM 实现............................................................... - 32 -
4. 梯度计算引起的数值震荡................................................................................... - 34 - 附录 5 icoFoam 与 pisoFoam 的区别..............................................................................- 35 - 附录 6 附加显式体积力源项的耦合算法........................................................................- 36 - 附录 7. UEqn.A(),UEqn.H()与 pEqn.flux()?...............................................................- 40 - 待补充内容................................................................................................................................. - 42 - 参考资料..................................................................................................................................... - 43 - 更新日志..................................................................................................................................... - 44 -
How to Write CFD Codes with OpenFOAM CLoudBird 一 控制方程与离散 注:本章内容整理自李东岳老师的 icoFoam 解析[1],大部分符号与东岳老师的解析内容相 通,但部分推导过程有所不同。 1. 控制方程及计算难点 对于单相不可压缩流体的流动,系统的能量方程与动量方程不存在耦合关系,当不需要 计算温度等能量参数时,可以无需求解能量方程。此时流动的控制方程为与连续性方程与动 量方程(N-S 方程): ∇∙U =0 ⋯⋯(1) U+∙(UU)−∙(∇U)=− ⋯⋯(2) 注意,对于不可压缩流动,密度可以提出到各算符之外,因此,为了简化表达,上述方 程中 p 的单位为压力除以密度的单位,即 m2⋅s−2,若不单独指出,下文中出现的各类方程 均作此处理。 方程二中等号右侧各项从左往右依次是瞬态项,对流项,和扩散项(拉普拉斯项),其 中的对流项的处理是 CFD 计算的难点。对于这一项,当速度待求时,UU 是两个未知量的 积(注意,此处的求积是张量积,向量的张量积运算结果为一张量),存在强烈的非线性耦 合,难以求解。 通常可以选用非线性求解器对对流项进行求解,但 CFD 中往往使用线性化的方式进行 处理。若记上标 n 为当前步的已知量,n+1 为下一步中待求的未知量,线性化即是将原来需 要计算的∙( +1 +1)处理为∙( +1),这样做的缺点是速度信息会有一定的滞 后。 CFD 中的另一个计算难点是压力的求解。方程 1 是一个限制性方程,其无法直接求出速 - 1 -
How to Write CFD Codes with OpenFOAM CLoudBird 度,必须根据方程 2 才可以得到速度的计算结果。即方程 1 和 2 虽然是含有两个未知数的 两个方程,但其显然缺乏求解压力的方程。如何构建关于压力的方程并与速度耦合求解是流 动计算的关键。 本文后面的所有内容基本上都是在处理这两个问题。 2. 动量方程的有限体积离散 在本节中,将推导最基本的动量方程有限体积离散过程。本部分是理解 openFOAM 中 离散格式具体设置内容的前提,其推导的结果也是下面推导各类压力速度耦合算法的基础。 对于动量方程 2,将其线性化,并对瞬态项采用欧拉离散格式有: 左右对有限体积(计算网格)和时间积分,各项为: +1− ∆ ∙( +1)=−+1 ⋯⋯(3) ) ⋯⋯(4) ( +1 ) ∆ )−∙(∇ +∙( +1 +1− ( +1− = ∆ )= )= +1 ( +1 ( +1∙) ⋯⋯(5) =∆ +1)= +1)= (∇ ( ∇ +1) ⋯⋯(6) =∆ ∙(∇ 其中,V 为计算网格的体积,下标 f 表示网格面上的值,为已知时间步的速度通量。 +1) ∆ (∇ 式 4,5 使用高斯定理得到,式 6 使用高斯定理的推论得到。压力项暂不进行有限体积离散 处理,这是因为对压力梯度的离散可能会导致严重的数值震荡,实际上,动量方程右侧所有 的梯度求解都有可能导致数值震荡,这部分内容将在附录中进行阐述。 - 2 -
How to Write CFD Codes with OpenFOAM CLoudBird 将式 4-6 带回式 3 可得: ∇ ( +1) ( +1− )+∆ ( +1) −∆ 在式 6 和式 7 中, ∇ +1为面法向梯度,对于正交网格,其值为: +1− +1 +1= ∇ ⋯⋯(8) =−∆+1 ⋯⋯(7) 其中下标 N 表示相邻网格的值,下标 p 表示当前网格的值。注意,上式仅对于正交网 格成立,对于非正交网格并不成立。面法向梯度在 openFOAM 里的算符为 snGrad,对于 snGrad 项,需要指定其离散格式,对于非正交网格,必须指定非正交的离散格式。 方程 5 中的 +1为面上的值,需要通过体心的值插值得到。假设采用中心离散的格式 则有: +1= +1+ +1 2 ⋯⋯(9) 关于空间插值格式的更多内容,可以参考附录。 将 8,9 式带入 7 可得: ( +1− )+∆ +1+ ( +1 2 =−∆+1 ⋯⋯(10) ) −∆ +1− +1 ( ) 整理可得: (∆+ 2 + +1 +( 2 − ) = ∆ −+1 ⋯⋯(11) ,=∆ ,= 令=∆+ 2 − 2 + +1=− +1+ +1 ⋯⋯(12) ) +1 ,则 10 式可化为: - 3 -
How to Write CFD Codes with OpenFOAM CLoudBird 显然,在给定时间步内,,,均是已知的值。 以上过程虽然是通过将各项进行最简单的线性离散得到的,但其结论是普适的。无论采 用何种离散格式,动量方程最终总可以写为式 12 的形式。 如果待求解的问题是稳态问题,也可以得到类似的结果,只是方程中的系数=0, 会变为: = 2 + +1= ∆ +1=+1++1 2 +1= (+1 ) ⋯⋯(14) 方程 14 中+1也为面上的值,可按下面的式子计算: ⋯⋯(15) 为了之后讨论方便,我们将 openFOAM 中压力项的有限体积离散结果写在这里: ⋯⋯(13) 接下来,我们简单对有限体积离散过程中涉及到的离散格式及其 openFOAM 设置进行 说明: 我们将瞬态项U 处理为 +1− ∆ ,可以在 fvSchemes 文件中指定其他的时间离散格式。 求解梯度时,最终转化为求解面上的物理量的值,例如式 15,对压力的梯度操作最终落实 在了求解面上压力,这是求解梯度的高斯方法(即通过插值实现面值计算以求解梯度)。除 了高斯法,还有其他方法可以求解梯度,可以在 fvSchemes 文件中设定。openFOAM 在 fvSchemes 文 件 中 指 定 拉 普 拉 斯 项 通 常 采 用 的 形 式 为 Gauss 。在式 6 中我们可以清楚的看到,拉普拉斯项最后的计算中其实为一个 系数的面值(如)与一个面法向梯度(如 ∇ +1)的计算。interpolationScheme 指 定了系数的插值方式,snGradScheme 指定了面法向梯度的插值方式。对流项离散格式通 常采用的指定格式为 Gauss , 从式 5 可以看出,对于对流项的计算, 最后落到了面上值的计算,这里的 interpolationScheme 就是指定了面上值离散的方法。另 - 4 -
分享到:
收藏