FVM in CFD 学习笔记_第15章_流动计算:不可压缩流动_1_交错网格上的SIMPLE算法

学习自F. Moukalled, L. Mangani, M. Darwish所著The Finite Volume Method in Computational Fluid Dynamics - An Advanced Introduction with OpenFOAM and Matlab
Chapter 15 Fluid Flow Computation: Incompressible Flows

前面几章讲解的关于变量 ϕ \phi ϕ的一般输运方程的离散和求解流程,均是建立在事先已知速度场的前提下。但是一般情况下,速度场是未知的,且需要通过求解Navier-Stokes方程组来获取。对于不可压缩流动而言,该项工作尤为复杂,因为压力和速度是强烈耦合在一起的,而且压力并不以主变量的形式出现在动量或是连续方程中。本章的重点在于展示解决上述两个问题的方法,以及不可压缩流动问题的流场计算方法。先讲解一维交错网格,然后是一维同位网格,最后是同位三维非结构网格。除了阐明SIMPLE、SIMPLEC、PRIME和PISO算法的来龙去脉,还清晰阐明了Rhie-Chow插值方法,以及将其扩展到瞬态、松弛和体积力项的方法。最后,展现了一些常见边界条件的添加细节。

由于本章内容繁杂,篇幅较长,故分成了四部分来讲解,各部分主要内容分别为:交错网格、同位网格、边界条件、SIMPLE家族算法。

这里是第一部分,主要讲解不可压缩流动问题的求解在常规网格上所碰到的问题,以及,交错网格上的SIMPLE算法是如何解决该问题的。

1 主要困难

前面几章所处理的通用守恒方程,可以改写成与连续方程或动量方程相似的形式。然而,目前为止所呈现的数值技术,并不足以求解Navier-Stokes方程,因为求解一般流动的算法要能够处理压力速度的耦合问题。为理解该问题,先把连续方程和动量方程写出来
∂ ρ ∂ t + ∇ ⋅ ( ρ v ) = 0 ∂ ∂ t ( ρ v ) + ∇ ⋅ ( ρ v v ) = − ∇ p + ∇ ⋅ { μ [ ∇ v + ( ∇ v ) T ] } + f b \begin{aligned} \frac{\partial\rho}{\partial t}+\nabla\cdot(\rho\bold v)&=0 \\ \frac{\partial}{\partial t}(\rho \bold v)+\nabla\cdot(\rho\bold v\bold v)&= -\nabla p+\nabla\cdot\left\{ \mu\left[ \nabla\bold v+(\nabla\bold v)^\text{T} \right] \right\} + \bold f_b \end{aligned} tρ+(ρv)t(ρv)+(ρvv)=0=p+{μ[v+(v)T]}+fb
这俩方程是非线性的,但也并不是不可克服的困难,因为这种问题通常可采用迭代方法来应对。此外,第二式是矢量方程,若把其展开成分量形式的话,则是个标量方程系统,需要顺序求解。再者,应力张量可改写成类似扩散项的形式,并可隐式处理,其第2项(即,速度梯度的转置 ( ∇ v ) T (\nabla\bold v)^\text{T} (v)T)则基于前次迭代值做显式估算并添加到源项中去。针对上述连续方程和动量方程,从通有标量方程的数值方法(前面几章讲解的方法)中无法汲取灵感来解决的主要难题在于,出现在动量方程中的压力场无法获得其显式计算方程。

从这俩方程中可以看出,纵然速度场可以直接使用动量方程来计算,然而出现在动量方程中的压力场无法直接从连续方程中计算。该耦合关系(压力和速度的耦合)是如此强烈却又如此隐含,为便于理解,可把方程组写成如下矩阵形式
A u = [ F B T B 0 ] [ v p ] = [ f b 0 ] \bold A \bold u=\begin{bmatrix} \bold F & \bold B^\text T \\ \bold B & \bold 0 \end{bmatrix} \begin{bmatrix} \bold v \\ \bold p \end{bmatrix}= \begin{bmatrix} \bold f_b \\ \bold 0 \end{bmatrix} Au=[FBBT0][vp]=[fb0]
在该形式中,上式中出现了一个零对角块,这是鞍点(saddle point)问题的特性,表明其无法通过任何迭代手法来求解压力和速度场。因此,需要推导出关于压力的方程才好。

一种处理方法是,通过把矩阵 A \bold A A分解成下三角 L \bold L L和上三角 U \bold U U矩阵,将动量和连续方程系统重新改写成下述形式
A = [ F B T B 0 ] = [ F 0 B − B F − 1 B T ] [ I F − 1 B T 0 I ] = L U \bold A = \begin{bmatrix} \bold F & \bold B^\text T \\ \bold B & \bold 0 \end{bmatrix}= \begin{bmatrix} \bold F & \bold 0 \\ \bold B & -\bold B\bold F^{-1}\bold B^\text T \end{bmatrix} \begin{bmatrix} \bold I & \bold F^{-1}\bold B^\text T \\ \bold 0 & \bold I \end{bmatrix}= \bold L \bold U A=[FBBT0]=[FB0BF1BT][I0F1BTI]=LU
其中 − B F − 1 B T -\bold B\bold F^{-1}\bold B^\text T BF1BT为Schur补矩阵(Schur complement matrix)。

这正是下面要讲的迭代求解Navier-Stokes方程的方法的本质,Patankar和Spalding将该技术嵌入在经典的分离式SIMPLE(Semi Implicit Method for Pressure Linked Equations)算法中。

求解流程是,将Navier-Stokes方程重新整理成动量方程和压力方程的形式,然后做离散和顺序求解。压力方程是通过联合半离散动量方程和连续方程(Schur补矩阵)来创建的。

算法是由Picard类型的迭代流程驱动的,其率先求解动量方程,使用的是前次迭代的压力场。求出的速度场是满足动量方程的但是未必满足质量方程。接下来用该速度场来构建压力方程,并用所得解来修正压力和速度场以便满足质量守恒。然后开始新的迭代过程,并重复上述流程,直到速度和压力场既满足质量守恒又满足动量守恒为止。

该算法可用如下的矩阵形式来描述
[ I D − 1 B T 0 I ] [ v p ] = [ v ∗ p ∗ ] \begin{bmatrix} \bold I & \bold D^{-1}\bold B^\text T \\ \bold 0 & \bold I \end{bmatrix}\begin{bmatrix} \bold v \\ \bold p \end{bmatrix}= \begin{bmatrix} \bold v^* \\ \bold p^* \end{bmatrix} [I0D1BTI][vp]=[vp]
接下来使用下式来更新速度场
[ F 0 B − B D − 1 B T ] [ v ∗ p ∗ ] = [ f b 0 ] \begin{bmatrix} \bold F & \bold 0 \\ \bold B & -\bold B\bold D^{-1}\bold B^\text T \end{bmatrix} \begin{bmatrix} \bold v^* \\ \bold p^* \end{bmatrix}= \begin{bmatrix} \bold f_b \\ \bold 0 \end{bmatrix} [FB0BD1BT][vp]=[fb0]
上式和上上式中的 F − 1 \bold F^{-1} F1用其逆对角阵 D − 1 \bold D^{-1} D1来近似,上标 ∗ ^* 表示当前迭代的中间值。流程汇总如下:

  • 求解: F v ∗ = f b \bold F \bold v^*=\bold f_b Fv=fb
  • 求解: − B D − 1 B T p ∗ = − B v ∗ -\bold B \bold D^{-1} \bold B^\text T \bold p^*=-\bold B \bold v^* BD1BTp=Bv
  • 更新: v = v ∗ − D − 1 B T p ∗ \bold v=\bold v^*-\bold D^{-1}\bold B^\text T\bold p^* v=vD1BTp
  • 更新: p = p ∗ \bold p=\bold p^* p=p

这种类型的分裂与SIMPLE系列算法中所用的分裂是相同的,这正是本章的主题。

2 初步推导

在这里插入图片描述

针对不可压缩流动问题发展求解算法的困难之处,可通过对上图所示的一维空间均匀网格问题的离散处理来加深理解。为简便起见,假设流动是定常的。简化的连续和动量方程(写成守恒形式)为
∂ ( ρ u ) ∂ x = 0   ∂ ( ρ u u ) ∂ x = ∂ ∂ x ( μ ∂ u ∂ x ) − ∂ p ∂ x \begin{aligned} \frac{\partial (\rho u)}{\partial x}&=0 \\ ~ \\ \frac{\partial(\rho u u)}{\partial x}&=\frac{\partial}{\partial x} \left(\mu \frac{\partial u}{\partial x} \right) -\frac{\partial p}{\partial x} \end{aligned} x(ρu) x(ρuu)=0=x(μxu)xp

2.1 动量方程离散

动量方程的离散,首先要对其在单元 C C C上做积分,得
∫ V C ∂ ( ρ u u ) ∂ x d V = ∫ V C ∂ ∂ x ( μ ∂ u ∂ x ) d V − ∫ V C ∂ p ∂ x d V \int_{V_C}\frac{\partial(\rho u u)}{\partial x}dV= \int_{V_C}\frac{\partial}{\partial x} \left(\mu \frac{\partial u}{\partial x} \right)dV- \int_{V_C}\frac{\partial p}{\partial x}dV VCx(ρuu)dV=VCx(μxu)dVVCxpdV
使用散度定理,将对流项和扩散项的体积分转化成面积分
∫ ∂ V C ( ρ u u ) d y = ∫ ∂ V C μ ∂ u ∂ x d y − ∫ V C ∂ p ∂ x d V \int_{\partial V_C}(\rho u u)dy=\int_{\partial V_C}\mu \frac{\partial u}{\partial x}dy - \int_{V_C}\frac{\partial p}{\partial x}dV VC(ρuu)dy=VCμxudyVCxpdV
把面积分用流过单元面的通量加和来替换,并使用单Gauss点来做面积分,得到半离散形式为
( ρ u Δ y ) e ⏟ m ˙ e u e + − ( ρ u Δ y ) w ⏟ m ˙ w u w = ( μ ∂ u ∂ x Δ y ) e − ( μ ∂ u ∂ x Δ y ) w − ∫ V C ∂ p ∂ x d V \underbrace{(\rho u \Delta y)_e}_{\dot m_e} u_e+ \underbrace{-(\rho u \Delta y)_w}_{\dot m_w} u_w= \left( \mu \frac{\partial u}{\partial x}\Delta y \right)_e- \left( \mu \frac{\partial u}{\partial x}\Delta y \right)_w- \int_{V_C}\frac{\partial p}{\partial x}dV m˙e (ρuΔy)eue+m˙w (ρuΔy)wuw=(μxuΔy)e(μxuΔy)wVCxpdV
其可重写为
m ˙ e u e + m ˙ w u w ⏟ C o n v e c t i o n − [ ( μ ∂ u ∂ x Δ y ) e − ( μ ∂ u ∂ x Δ y ) w ] ⏟ D i f f u s i o n = − ∫ V C ∂ p ∂ x d V \underbrace{\dot m_e u_e+\dot m_w u_w}_{Convection}- \underbrace{\left[\left( \mu \frac{\partial u}{\partial x}\Delta y \right)_e- \left( \mu \frac{\partial u}{\partial x}\Delta y \right)_w\right]}_{Diffusion}=- \int_{V_C}\frac{\partial p}{\partial x}dV Convection m˙eue+m˙wuwDiffusion [(μxuΔy)e(μxuΔy)w]=VCxpdV
对流和扩散项可用之前章节中所讲的方法来离散化处理,得到如下形式的代数方程
a C u u C + ∑ F ∼ N B ( C ) ( a F u u F ) = b C u − ∫ V C ∂ p ∂ x d V a_C^u u_C+\sum_{F\sim NB(C)}(a_F^u u_F)=b_C^u-\int_{V_C}\frac{\partial p}{\partial x}dV aCuuC+FNB(C)(aFuuF)=bCuVCxpdV
压力项的离散待咱们讲完连续方程的离散后再说。

2.2 连续方程的离散

连续方程的离散,也是要对其在单元 C C C上做积分,得
∫ V C ∂ ( ρ u ) ∂ x d V = 0 \int_{V_C}\frac{\partial(\rho u)}{\partial x}dV=0 VCx(ρu)dV=0
再次使用散度定理将体积分转化成面积分,然后转化成单元面通量的加和形式,连续方程的离散形式为
∑ f ∼ n b ( C ) ( ρ u Δ y ) f = ( ρ u Δ y ) e − ( ρ u Δ y ) w = 0 \sum_{f\sim nb(C)}(\rho u \Delta y)_f=(\rho u \Delta y)_e - (\rho u \Delta y)_w=0 fnb(C)(ρuΔy)f=(ρuΔy)e(ρuΔy)w=0

∑ f ∼ n b ( C ) m ˙ f = m ˙ e + m ˙ w = 0 \sum_{f\sim nb(C)}\dot m_f=\dot m_e + \dot m_w=0 fnb(C)m˙f=m˙e+m˙w=0

2.3 棋盘问题(Checkerboard Problem)

压力项离散可由下面两种方法中的任意一个来实现。第一种方法,通过单点Gauss积分来计算体积分
∫ V C ∂ p ∂ x d V = ( ∂ p ∂ x ) C V C \int_{V_C}\frac{\partial p}{\partial x}dV=\left(\frac{\partial p}{\partial x}\right)_CV_C VCxpdV=(xp)CVC
使用中心差分格式,上式的离散形式为
∫ V C ∂ p ∂ x d V = p E − p W 2 Δ x V C \int_{V_C}\frac{\partial p}{\partial x}dV=\frac{p_E-p_W}{2\Delta x} V_C VCxpdV=2ΔxpEpWVC
第二种方法,把压力梯度项的体积分转化成面积分
∫ V C ∂ p ∂ x d V = ∫ ∂ V C p d y \int_{V_C}\frac{\partial p}{\partial x}dV=\int_{\partial V_C}p dy VCxpdV=VCpdy
把面积分写成单元面通量加和的形式,有
∫ V C ∂ p ∂ x d V = ∫ ∂ V C p d y = p e Δ y e − p w Δ y w = ( p e − p w ) Δ y = ( p e − p w ) V C Δ x \int_{V_C}\frac{\partial p}{\partial x}dV=\int_{\partial V_C}p dy= p_e\Delta y_e - p_w \Delta y_w=(p_e-p_w)\Delta y= (p_e-p_w)\frac{V_C}{\Delta x} VCxpdV=VCpdy=peΔyepwΔyw=(pepw)Δy=(pepw)ΔxVC
压力的变化选用线性插值廓线,把压力梯度项重新写成主节点上压力值的函数形式
∫ V C ∂ p ∂ x d V = [ 1 2 ( p E + p C ) − 1 2 ( p C + p W ) ] V C Δ x = p E − p W 2 Δ x V C \int_{V_C}\frac{\partial p}{\partial x}dV= \left[\frac12(p_E+p_C)-\frac12(p_C+p_W)\right]\frac{V_C}{\Delta x}= \frac{p_E-p_W}{2\Delta x} V_C VCxpdV=[21(pE+pC)21(pC+pW)]ΔxVC=2ΔxpEpWVC
两个方法导出了同样的表达式,即,包含交替节点 E E E W W W之间压力差值的表达式(这里的交替指的是, E E E W W W节点之间间隔了一个节点 C C C)。

采用同样的方法,使用线性插值廓线,并注意到密度是常数,且有 ( Δ y ) e = ( Δ y ) w = ( Δ y ) C (\Delta y)_e=(\Delta y)_w=(\Delta y)_C (Δy)e=(Δy)w=(Δy)C,则连续方程为
u E − u W = 0 u_E-u_W=0 uEuW=0
用的也是两个交替网格节点的速度值。

在上上式中,单元 C C C处的压力梯度项是由两个交替的(而非连续的)横跨单元两侧的网格节点上的压力值所决定的。连续方程亦是如此,这样一来就只是对交替的速度单元施加了守恒特性。这意味着不符合物理意义的之字形(或棋盘型,国际象棋中的黑白格子间隔排列)的压力场或速度场(如下图所示的那样),在该数值方法中将会被感知成均匀场。换句话说,像这种…-A-B-A-B-…排列的场,原本并非是均匀场,但是由于数值算法中的压力梯度和连续方程均考虑的是间隔单元间的特性,所以反倒是把其错误滴认定为是均匀场了。

在这里插入图片描述

针对上图所示的压力和速度值,在点 W W W C C C E E E处的压力梯度为
∫ V W ∂ p ∂ x d V = ( p C − p W W ) V W 2 Δ x W = ( 10 − 10 ) V W 2 Δ x W = 0 ∫ V C ∂ p ∂ x d V = ( p E − p W ) V C 2 Δ x C = ( − 100 + 100 ) V C 2 Δ x C = 0 ∫ V E ∂ p ∂ x d V = ( p E E − p C ) V E 2 Δ x E = ( 10 − 10 ) V E 2 Δ x E = 0 \begin{aligned} &\int_{V_W}\frac{\partial p}{\partial x}dV=(p_C-p_{WW})\frac{V_W}{2\Delta x_W}=(10-10)\frac{V_W}{2\Delta x_W}=0 \\ &\int_{V_C}\frac{\partial p}{\partial x}dV=(p_E-p_{W})\frac{V_C}{2\Delta x_C}=(-100+100)\frac{V_C}{2\Delta x_C}=0 \\ &\int_{V_E}\frac{\partial p}{\partial x}dV=(p_{EE}-p_{C})\frac{V_E}{2\Delta x_E}=(10-10)\frac{V_E}{2\Delta x_E}=0 \\ \end{aligned} VWxpdV=(pCpWW)2ΔxWVW=(1010)2ΔxWVW=0VCxpdV=(pEpW)2ΔxCVC=(100+100)2ΔxCVC=0VExpdV=(pEEpC)2ΔxEVE=(1010)2ΔxEVE=0
而且连续方程看起来在每个单元上都是满足的,因为
∫ V W ∂ u ∂ x d V = ( u C − u W W ) V W 2 Δ x W = ( 1 − 1 ) V W 2 Δ x W = 0 ∫ V C ∂ u ∂ x d V = ( u E − u W ) V C 2 Δ x C = ( 10 − 10 ) V C 2 Δ x C = 0 ∫ V E ∂ u ∂ x d V = ( u E E − u C ) V E 2 Δ x E = ( 1 − 1 ) V E 2 Δ x E = 0 \begin{aligned} & \int_{V_W}\frac{\partial u}{\partial x}dV=(u_C-u_{WW})\frac{V_W}{2\Delta x_W}=(1-1)\frac{V_W}{2\Delta x_W}=0 \\ & \int_{V_C}\frac{\partial u}{\partial x}dV=(u_E-u_{W})\frac{V_C}{2\Delta x_C}=(10-10)\frac{V_C}{2\Delta x_C}=0 \\ & \int_{V_E}\frac{\partial u}{\partial x}dV=(u_{EE}-u_{C})\frac{V_E}{2\Delta x_E}=(1-1)\frac{V_E}{2\Delta x_E}=0 \\ \end{aligned} VWxudV=(uCuWW)2ΔxWVW=(11)2ΔxWVW=0VCxudV=(uEuW)2ΔxCVC=(1010)2ΔxCVC=0VExudV=(uEEuC)2ΔxEVE=(11)2ΔxEVE=0
在多维情况下,也会产生相似的非物理特性,即使很难具象化展示(其实如果是二维结构网格的话,这种情况跟国际象棋的黑白格子就很像了,即,黑格子是一个值,而白格子是另一个值,但是按照上面这种数值方法处理起来,整场各个单元反倒是满足了连续方程,而且压力梯度也都是零了)。这为下面展示一种处理该问题的方法做好了铺垫。

2.4 交错网格

前面公式中所呈现的问题是压力和速度场的解耦问题。可以通过把不同的变量存储在交错位置上来加强它们的耦合特性,因为这样一来,就不需要用插值手段来计算动量方程中的压力梯度以及连续方程中的速度场了。这样的交错网格如下图所示,在交错网格中速度场是存储在单元面上的(图a),而压力场则是存储在单元形心上的(图b)。
在这里插入图片描述

单元 C C C的连续方程离散为
∑ f ∼ n b ( C ) m ˙ f = m ˙ e + m ˙ w = 0 \sum_{f\sim nb(C)}\dot m_f=\dot m_e+\dot m_w=0 fnb(C)m˙f=m˙e+m˙w=0

u e − u w = 0 u_e-u_w=0 ueuw=0
无需再做插值了,因为速度在界面 e e e w w w处是可以获得的。此外,动量方程的积分是在单元 e e e上进行的,其产生如下的离散动量方程形式
a e u u e + ∑ f ∼ N B ( e ) a f u u f = b e u − V e ( ∇ p ) e = b e u − V e p E − p C δ x e a_e^u u_e+\sum_{f\sim NB(e)}a_f^u u_f=b_e^u-V_e(\nabla p)_e= b_e^u-V_e\frac{p_E-p_C}{\delta x_e} aeuue+fNB(e)afuuf=beuVe(p)e=beuVeδxepEpC
压力梯度的计算用的是横跨单元面两侧的连续单元形心节点值,故不需要做插值。因此棋盘压力场和速度场的情况将不会出现,因为这些情况将很容易地被数值方法探测并衰减掉。

2.5 压力修正方程

接下来要呈现的推导是基于Patankar和Spalding的工作,他们发展了SIMPLE(Semi Implicit Method for Pressure Linked Equations)算法的最初实用形式。

由上图所示网格上的离散连续方程和动量方程出发
∑ f ∼ n b ( C ) m ˙ f = 0 a e u u e + ∑ f ∼ N B ( e ) a f u u f = b e u − V e ( ∂ p ∂ x ) e \begin{aligned} \sum_{f\sim nb(C)}\dot m_f &= 0 \\ a_e^u u_e+\sum_{f\sim NB(e)}a_f^u u_f&= b_e^u-V_e\left(\frac{\partial p}{\partial x}\right)_e \end{aligned} fnb(C)m˙faeuue+fNB(e)afuuf=0=beuVe(xp)e
求解过程首先需要提供初始的猜测速度和压力场。把初始猜测的或是迭代开始时的解用上标 ( n ) ^{(n)} (n)表示,那么这些个暂定的(初始猜测的或是未达到收敛的不确定的)速度和压力场用 u ( n ) u^{(n)} u(n) p ( n ) p^{(n)} p(n)表示。在每步迭代中,先求解动量方程来获取速度场,所得解用上标 ∗ ^* 表示,因为其并非当前迭代步的最终解(注意,由于并未考虑连续方程,所以这时候的速度场并不满足连续方程)。这样,动量方程满足
a e u u e ∗ + ∑ f ∼ N B ( e ) a f u u f ∗ = b e u − V e ( ∂ p ( n ) ∂ x ) e a_e^u u_e^*+\sum_{f\sim NB(e)}a_f^u u_f^*= b_e^u-V_e\left(\frac{\partial p^{(n)}}{\partial x}\right)_e aeuue+fNB(e)afuuf=beuVe(xp(n))e
其中压力场仍旧采用的是前次迭代值,那么,算出来的速度场 u ∗ u^* u满足动量方程,但是未必满足连续方程,因为压力场并不是精确值。因此,需要寻找修正措施来确保速度(或质量流量)和压力满足连续方程。

将修正场用上标撇来表示,即,( u ′ u' u p ′ p' p),那么速度和压力修正为
u = u ∗ + u ′ p = p ∗ + p ′ u=u^*+u' \\ p=p^*+p' u=u+up=p+p
注意,单元面处的质量流量也修正为
m ˙ f = m ˙ f ∗ + ρ u ′ S f x = m ˙ f ∗ + m f ′ \dot m_f=\dot m_f^*+\rho u' S_f^x=\dot m_f^*+m_f' m˙f=m˙f+ρuSfx=m˙f+mf
这样,精确质量流量应满足连续方程,即
m ˙ e + m ˙ w = m ˙ e ∗ + m ˙ e ′ + m ˙ w ∗ + m ˙ w ′ = 0 \dot m_e+\dot m_w=\dot m_e^*+\dot m_e'+\dot m_w^*+\dot m_w'=0 m˙e+m˙w=m˙e+m˙e+m˙w+m˙w=0
可以写为
m ˙ e ′ + m ˙ w ′ = − m ˙ e ∗ − m ˙ w ∗ \dot m_e'+\dot m_w'=-\dot m_e^*-\dot m_w^* m˙e+m˙w=m˙em˙w
这个形式的连续方程非常有趣,其表明,一旦算得的质量流量是满足连续方程的精确解的话,那么RHS(右端项)是零,从而修正场也是零(即,如果满足连续方程话就无需再修正了)。因此,正是当前场的质量守恒误差驱动着修正场,单元面处的质量流量和质量流量修正为
m ˙ e ∗ = ρ v e ∗ ⋅ S e = ρ u e ∗ S e x = ρ u e ∗ Δ y e m ˙ w ∗ = ρ v w ∗ ⋅ S w = ρ u w ∗ S w x = − ρ u w ∗ Δ y w \begin{aligned} \dot m_e^* &= \rho \bold v_e^* \cdot \bold S_e=\rho u_e^* S_e^x = \rho u_e^* \Delta y_e \\ \dot m_w^* &= \rho \bold v_w^* \cdot \bold S_w=\rho u_w^* S_w^x = -\rho u_w^* \Delta y_w \end{aligned} m˙em˙w=ρveSe=ρueSex=ρueΔye=ρvwSw=ρuwSwx=ρuwΔyw

m ˙ e ′ = ρ v e ′ ⋅ S e = ρ u e ′ S e x = ρ u e ′ Δ y e m ˙ w ′ = ρ v w ′ ⋅ S w = ρ u w ′ S w x = − ρ u w ′ Δ y w \begin{aligned} \dot m_e' &= \rho \bold v_e' \cdot \bold S_e=\rho u_e' S_e^x = \rho u_e' \Delta y_e \\ \dot m_w' &= \rho \bold v_w' \cdot \bold S_w=\rho u_w' S_w^x = -\rho u_w' \Delta y_w \end{aligned} m˙em˙w=ρveSe=ρueSex=ρueΔye=ρvwSw=ρuwSwx=ρuwΔyw
上式中用到了 S e x = Δ y e S_e^x=\Delta y_e Sex=Δye S w x = − Δ y w S_w^x=-\Delta y_w Swx=Δyw

压力场并没有出现在修正形式的连续方程 m ˙ e ′ + m ˙ w ′ = − m ˙ e ∗ − m ˙ w ∗ \dot m_e'+\dot m_w'=-\dot m_e^*-\dot m_w^* m˙e+m˙w=m˙em˙w中,为了将其引入到式中,需要使用动量方程的离散形式。该过程先把离散动量方程 a e u u e + ∑ f ∼ N B ( e ) a f u u f = b e u − V e ( ∂ p ∂ x ) e a_e^u u_e+\displaystyle\sum_{f\sim NB(e)}a_f^u u_f=b_e^u-V_e\left(\dfrac{\partial p}{\partial x}\right)_e aeuue+fNB(e)afuuf=beuVe(xp)e写成更加紧凑的形式
u e + H e ( u e ) = B e u − D e u ( ∂ p ∂ x ) e u_e+H_e(u_e) = B_e^u - D_e^u\left(\frac{\partial p}{\partial x}\right)_e ue+He(ue)=BeuDeu(xp)e
其中
H e ( u e ) = ∑ f ∼ N B ( e ) a f u a e u u f B e u = b e u a e u D e u = V e a e u H_e(u_e) =\sum_{f\sim NB(e)}\frac{a_f^u}{a_e^u} u_f \quad\quad B_e^u = \frac{b_e^u}{a_e^u} \quad\quad D_e^u = \frac{V_e}{a_e^u} He(ue)=fNB(e)aeuafuufBeu=aeubeuDeu=aeuVe
对于计算的速度场 u e ∗ u_e^* ue,上式变为
u e ∗ + H e ( u e ∗ ) = B e u − D e u ( ∂ p ( n ) ∂ x ) e u_e^*+H_e(u_e^*) = B_e^u - D_e^u\left(\frac{\partial p^{(n)}}{\partial x}\right)_e ue+He(ue)=BeuDeu(xp(n))e
用精确速度场表示的动量方程 u e + H e ( u e ) = B e u − D e u ( ∂ p ∂ x ) e u_e+H_e(u_e) = B_e^u - D_e^u\left(\frac{\partial p}{\partial x}\right)_e ue+He(ue)=BeuDeu(xp)e,减去,算得速度场所表示的动量方程 u e ∗ + H e ( u e ∗ ) = B e u − D e u ( ∂ p ( n ) ∂ x ) e u_e^*+H_e(u_e^*) = B_e^u - D_e^u\left(\frac{\partial p^{(n)}}{\partial x}\right)_e ue+He(ue)=BeuDeu(xp(n))e,可得到修正场的方程为
u e ′ + H e ( u ′ ) ‾ = − D e u ( ∂ p ′ ∂ x ) e u_e'+\underline{H_e(u')} = - D_e^u\left(\frac{\partial p'}{\partial x}\right)_e ue+He(u)=Deu(xp)e
同样也可以推导出 w w w面的修正方程
u w ′ + H w ( u ′ ) ‾ = − D w u ( ∂ p ′ ∂ x ) w u_w'+\underline{H_w(u')} = - D_w^u\left(\frac{\partial p'}{\partial x}\right)_w uw+Hw(u)=Dwu(xp)w
m ˙ e ′ = ρ u e ′ Δ y e \dot m_e' = \rho u_e' \Delta y_e m˙e=ρueΔye m ˙ w ′ = − ρ u w ′ Δ y w \dot m_w' = -\rho u_w' \Delta y_w m˙w=ρuwΔyw代入到连续方程 m ˙ e ′ + m ˙ w ′ = − m ˙ e ∗ − m ˙ w ∗ \dot m_e'+\dot m_w'=-\dot m_e^*-\dot m_w^* m˙e+m˙w=m˙em˙w,得
ρ e u e ′ Δ y e + ( − ρ w u w ′ Δ y w ) = − ( m ˙ e ∗ + m ˙ w ∗ ) \rho_e u_e' \Delta y_e+(-\rho_w u_w' \Delta y_w)=-(\dot m_e^*+\dot m_w^*) ρeueΔye+(ρwuwΔyw)=(m˙e+m˙w)
然后,把上上式和上上上式的 u e ′ u_e' ue u w ′ u_w' uw的离散形式代入上式,可得到压力修正项的方程
ρ e [ − H e ( u ′ ) ‾ − D e u ( ∂ p ′ ∂ x ) e ] Δ y e − ρ w [ − H w ( u ′ ) ‾ − D w u ( ∂ p ′ ∂ x ) w ] Δ y w = − ( m ˙ e ∗ + m ˙ w ∗ ) \begin{aligned} &\rho_e \left[ -\underline{H_e(u')} - D_e^u\left(\frac{\partial p'}{\partial x}\right)_e \right] \Delta y_e \\ &-\rho_w \left[ -\underline{H_w(u')} - D_w^u\left(\frac{\partial p'}{\partial x}\right)_w \right] \Delta y_w=-(\dot m_e^*+\dot m_w^*) \end{aligned} ρe[He(u)Deu(xp)e]Δyeρw[Hw(u)Dwu(xp)w]Δyw=(m˙e+m˙w)
在该方程中,压力场以扩散项的形式出现,离散后变为
ρ e [ − H e ( u ′ ) ‾ − D e u ( p E ′ − p C ′ Δ x ) e ] Δ y e + ρ w [ − H w ( u ′ ) ‾ − D w u ( p C ′ − p W ′ Δ x ) w ] ( − Δ y w ) = − ( m ˙ e ∗ + m ˙ w ∗ ) \begin{aligned} &\rho_e \left[ -\underline{H_e(u')} - D_e^u\left(\frac{p_E'-p_C'}{\Delta x}\right)_e \right] \Delta y_e \\ &+\rho_w \left[ -\underline{H_w(u')} - D_w^u\left(\frac{p_C'-p_W'}{\Delta x}\right)_w \right] (-\Delta y_w)=-(\dot m_e^*+\dot m_w^*) \end{aligned} ρe[He(u)Deu(ΔxpEpC)e]Δye+ρw[Hw(u)Dwu(ΔxpCpW)w](Δyw)=(m˙e+m˙w)

− ρ e D e u ( Δ y e Δ x e ) ( p E ′ − p C ′ ) − ρ w D w u ( − Δ y w Δ x w ) ( p C ′ − p W ′ ) = − ( m ˙ e ∗ + m ˙ w ∗ ) + ρ e H e ( u ′ ) ‾ Δ y e + ρ w H w ( u ′ ) ‾ ( − Δ y w ) \begin{aligned} & -\rho_e D_e^u\left(\frac{\Delta y_e}{\Delta x_e}\right)(p_E'-p_C') -\rho_w D_w^u\left(-\frac{\Delta y_w}{\Delta x_w}\right) (p_C'-p_W')\\ &=-(\dot m_e^*+\dot m_w^*)+\rho_e \underline{H_e(u')}\Delta y_e+\rho_w \underline{H_w(u')}(-\Delta y_w) \end{aligned} ρeDeu(ΔxeΔye)(pEpC)ρwDwu(ΔxwΔyw)(pCpW)=(m˙e+m˙w)+ρeHe(u)Δye+ρwHw(u)(Δyw)
整理后的压力修正方程形式为
a C p ′ p C ′ + a E p ′ p E ′ + a W p ′ p W ′ = b C p ′ a_C^{p'}p_C'+a_E^{p'}p_E'+a_W^{p'}p_W'=b_C^{p'} aCppC+aEppE+aWppW=bCp
其中
a E p ′ = − ρ e D e u Δ y e Δ x e a W p ′ = − ρ w D w u Δ y w Δ x w a C p ′ = − ( a E p ′ + a W p ′ ) b C p ′ = − ( m ˙ e ∗ + m ˙ w ∗ ) + [ ρ e Δ y e H e ( u ′ ) − ρ w Δ y w H w ( u ′ ) ] ‾ \begin{aligned} a_E^{p'} &= -\frac{\rho_e D_e^u\Delta y_e}{\Delta x_e} \\ a_W^{p'} &= -\frac{\rho_w D_w^u\Delta y_w}{\Delta x_w}\\ a_C^{p'} &= -(a_E^{p'}+a_W^{p'}) \\ b_C^{p'} &= -(\dot m_e^*+\dot m_w^*)+ \underline{[\rho_e \Delta y_e H_e(u')-\rho_w \Delta y_w H_w(u')]} \end{aligned} aEpaWpaCpbCp=ΔxeρeDeuΔye=ΔxwρwDwuΔyw=(aEp+aWp)=(m˙e+m˙w)+[ρeΔyeHe(u)ρwΔywHw(u)]
注意,对于上式下划线所标记的项,在达到稳态收敛的情况下,其值将变为零。因此,它们对于最终的解将没有影响。对于这些项的不同近似方法将会衍生不同的算法,这将在下面详细展开。在最初的SIMPLE算法中,这些项是简单地直接忽略掉了。此外,对于一维问题,且面积 Δ y \Delta y Δy为定值的情况,可直接把它设成 1 1 1并从方程中刨掉即可。

2.6 交错网格上的SIMPLE算法

使用动量方程和压力修正方程,可以获得流动问题的解。在SIMPLE算法中的求解过程是,在每步迭代中,交替地生成压力和速度场,并先后满足动量方程和连续方程,然后再逐步逼近最终解(连续方程和动量方程这两个方程都满足的最终解)。该流程并非是同步进行的,这种求解方程的法子常被称为分离式方法(segregated approach)(实际上还有一种把压力和速度直接耦合起来同步求解的法子呢,不过比较耗内存了)。该分离式的SIMPLE算法的计算流程汇总如下:

  1. 从某个猜测的压力场 p ( n ) p^{(n)} p(n)和速度场 u ( n ) u^{(n)} u(n)开始;
  2. 求解动量方程来获得新的速度场 u f ∗ u_f^* uf
    a e u u e ∗ + ∑ f ∼ N B ( e ) a f u u f ∗ = b e u − V e ( ∂ p ( n ) ∂ x ) e a w u u w ∗ + ∑ f ∼ N B ( e ) a f u u f ∗ = b w u − V w ( ∂ p ( n ) ∂ x ) w a_e^u u_e^*+\sum_{f\sim NB(e)}a_f^u u_f^*= b_e^u-V_e\left(\frac{\partial p^{(n)}}{\partial x}\right)_e \\ a_w^u u_w^*+\sum_{f\sim NB(e)}a_f^u u_f^*= b_w^u-V_w\left(\frac{\partial p^{(n)}}{\partial x}\right)_w aeuue+fNB(e)afuuf=beuVe(xp(n))eawuuw+fNB(e)afuuf=bwuVw(xp(n))w
  3. 使用满足动量方程的速度场 u f ∗ u_f^* uf来更新质量流量 m ˙ f ∗ \dot m_f^* m˙f
    m ˙ f ∗ = ρ v f ∗ ⋅ S f = ρ f u f ∗ S f x \dot m_f^* = \rho \bold v_f^* \cdot \bold S_f=\rho_f u_f^* S_f^x m˙f=ρvfSf=ρfufSfx
  4. 使用新的质量流量 m ˙ f ∗ \dot m_f^* m˙f求解压力修正方程来获取压力修正场 p ′ p' p
    a C p ′ p C ′ + a E p ′ p E ′ + a W p ′ p W ′ = b C p ′ a_C^{p'}p_C'+a_E^{p'}p_E'+a_W^{p'}p_W'=b_C^{p'} aCppC+aEppE+aWppW=bCp
  5. 更新压力场和速度场以获取满足连续方程的场
    u f ∗ ∗ = u f ∗ + u f ′ u f ′ = − D f u ( ∂ p ′ ∂ x ) f p C ∗ = p C ( n ) + p C ′ m ˙ f ∗ ∗ = m ˙ f ∗ + m ˙ f ′ m ˙ f ′ = − ρ f D f u Δ y f ( ∂ p ′ ∂ x ) f \begin{aligned} u_f^{**} &= u_f^* + u_f' \quad\quad u_f'=-D_f^u\left(\frac{\partial p'}{\partial x}\right)_f \\ p_C^* &=p_C^{(n)} + p_C' \\ \dot m_f^{**} &= \dot m_f^* + \dot m_f' \quad\quad \dot m_f'=-\rho_f D_f^u \Delta y_f \left(\frac{\partial p'}{\partial x}\right)_f \end{aligned} ufpCm˙f=uf+ufuf=Dfu(xp)f=pC(n)+pC=m˙f+m˙fm˙f=ρfDfuΔyf(xp)f
  6. u ( n ) = u ∗ ∗ u^{(n)}=u^{**} u(n)=u p ( n ) = p ∗ p^{(n)}=p^{*} p(n)=p
  7. 返回第2步,并重复该流程直到收敛。

理论是晦涩的,而实例则是生动的,用个简单的小例子来展示下SIMPLE的强大是再好不过的了。


例1 管道网络(管网)中的流动

下图展示的是水力管网系统中的一部分,管道流动中的动量方程可以写成
m ˙ = ρ u A = − D ∇ P \dot m=\rho u A = -D\nabla P m˙=ρuA=DP
其中, D A = 0.5 D_A=0.5 DA=0.5 D B = D F = 0.4 D_B=D_F=0.4 DB=DF=0.4 D C = D E = 0.3 D_C=D_E=0.3 DC=DE=0.3 D D = 0.19 D_D=0.19 DD=0.19 D G = 0.1875 D_G=0.1875 DG=0.1875 D H = 0.35 D_H=0.35 DH=0.35。使用SIMPLE算法,计算系统中的未知质量流量和压力。

在这里插入图片描述

在该系统中,使用质量流量场作为变量,来替代速度场。这并不会产生什么问题,因为该例中的动量方程已经忽略掉了对流项和扩散项,仅保留了压力梯度项,即认为对流和扩散效应,与压差驱动力相比非常小,直接忽略了。

使用SIMPLE算法的求解要先用假设的压力场来求解一个初始速度场,然后再根据这个计算的速度场预测一个压力场,以满足连续方程。

该流程汇总如下:

  1. 由一个猜测的压力场开始;
  2. 使用给定的动量方程计算质量流量;
  3. 构造压力修正方程来满足连续性(质量守恒),并用其修正压力和速度场。

该例中无需迭代,因为其不含对流项所带来的非线性效应(如果是用SIMPLE来求解不可压缩流动,那是要迭代多次才能收敛的)。

step 1
给定待求解位置处的压力猜测值,如下:
p 3 ( n ) = 300 p 6 ( n ) = 200 p 8 ( n ) = 120 p_3^{(n)}=300 \quad\quad p_6^{(n)}=200 \quad\quad p_8^{(n)}=120 p3(n)=300p6(n)=200p8(n)=120
当然也可以使用其它值。

step 2
基于假设的压力值,使用动量方程计算不同的质量流量:
m ˙ A ∗ = D A ( p 1 − p 3 ( n ) ) = 0.5 ∗ ( 400 − 300 ) = 50 m ˙ B ∗ = D B ( p 3 ( n ) − p 2 ) = 0.4 ∗ ( 300 − 350 ) = − 20 m ˙ C ∗ = D C ( p 4 − p 3 ( n ) ) = 0.3 ∗ ( 50 − 300 ) = − 75 m ˙ D ∗ = D D ( p 3 ( n ) − p 6 ( n ) ) = 0.19 ∗ ( 300 − 200 ) = 19 m ˙ E ∗ = D E ( p 6 ( n ) − p 5 ) = 0.3 ∗ ( 200 − 300 ) = − 30 m ˙ F ∗ = D F ( p 7 − p 6 ( n ) ) = 0.4 ∗ ( 80 − 200 ) = − 48 m ˙ G ∗ = D G ( p 6 ( n ) − p 8 ( n ) ) = 0.1875 ∗ ( 200 − 120 ) = 15 m ˙ H ∗ = D H ( p 9 − p 8 ( n ) ) = 0.35 ∗ ( 200 − 120 ) = 28 \begin{aligned} & \dot m_A^*=D_A(p_1-p_3^{(n)})=0.5*(400-300)=50 \\ & \dot m_B^*=D_B(p_3^{(n)}-p_2)=0.4*(300-350)=-20 \\ & \dot m_C^*=D_C(p_4-p_3^{(n)})=0.3*(50-300)=-75 \\ & \dot m_D^*=D_D(p_3^{(n)}-p_6^{(n)})=0.19*(300-200)=19 \\ & \dot m_E^*=D_E(p_6^{(n)}-p_5)=0.3*(200-300)=-30 \\ & \dot m_F^*=D_F(p_7-p_6^{(n)})=0.4*(80-200)=-48 \\ & \dot m_G^*=D_G(p_6^{(n)}-p_8^{(n)})=0.1875*(200-120)=15 \\ & \dot m_H^*=D_H(p_9-p_8^{(n)})=0.35*(200-120)=28 \end{aligned} m˙A=DA(p1p3(n))=0.5(400300)=50m˙B=DB(p3(n)p2)=0.4(300350)=20m˙C=DC(p4p3(n))=0.3(50300)=75m˙D=DD(p3(n)p6(n))=0.19(300200)=19m˙E=DE(p6(n)p5)=0.3(200300)=30m˙F=DF(p7p6(n))=0.4(80200)=48m˙G=DG(p6(n)p8(n))=0.1875(200120)=15m˙H=DH(p9p8(n))=0.35(200120)=28

step 3
检查质量流量是否满足连续性,对所有内部节点计算 ∑ ∼ k m ˙ k ∗ \displaystyle\sum_{\sim k}\dot m_k^* km˙k,得
Node 3: ∑ ∼ k ( m ˙ k ∗ ) = m ˙ B ∗ + m ˙ D ∗ − m ˙ A ∗ − m ˙ C ∗ = − 20 + 19 − 50 + 75 = 24 Node 6: ∑ ∼ k ( m ˙ k ∗ ) = m ˙ E ∗ + m ˙ G ∗ − m ˙ D ∗ − m ˙ F ∗ = − 30 + 15 − 19 + 48 = 14 Node 8: ∑ ∼ k ( m ˙ k ∗ ) = m ˙ I ∗ − m ˙ G ∗ − m ˙ H ∗ = 50 − 15 − 28 = 7 \begin{aligned} & \text{Node 3:\quad}\sum_{\sim k}(\dot m_k^*)=\dot m_B^*+\dot m_D^*-\dot m_A^*-\dot m_C^*=-20+19-50+75=24 \\ & \text{Node 6:\quad}\sum_{\sim k}(\dot m_k^*)=\dot m_E^*+\dot m_G^*-\dot m_D^*-\dot m_F^*=-30+15-19+48=14 \\ & \text{Node 8:\quad}\sum_{\sim k}(\dot m_k^*)=\dot m_I^*-\dot m_G^*-\dot m_H^*=50-15-28=7 \end{aligned} Node 3:k(m˙k)=m˙B+m˙Dm˙Am˙C=20+1950+75=24Node 6:k(m˙k)=m˙E+m˙Gm˙Dm˙F=30+1519+48=14Node 8:k(m˙k)=m˙Im˙Gm˙H=501528=7
由于质量守恒并不满足,需要修正处理,压力修正方程推导如下:
∑ ∼ k ( m ˙ k ∗ + m ˙ k ′ ) = 0 ⇒ ∑ ∼ k ( m ˙ k ′ ) = − ∑ ∼ k ( m ˙ k ∗ ) \sum_{\sim k}(\dot m_k^*+\dot m_k')=0 \Rightarrow \sum_{\sim k}(\dot m_k')=-\sum_{\sim k}(\dot m_k^*) k(m˙k+m˙k)=0k(m˙k)=k(m˙k)
基于动量方程,把质量流量的修正用压力修正表示为
m ˙ A ′ = D A ( − p 3 ′ ) m ˙ B ′ = D B ( p 3 ′ ) m ˙ C ′ = D C ( − p 3 ′ ) m ˙ D ′ = D D ( p 3 ′ − p 6 ′ ) m ˙ E ′ = D E ( p 6 ′ ) m ˙ F ′ = D F ( − p 6 ′ ) m ˙ G ′ = D G ( p 6 ′ − p 8 ′ ) m ˙ H ′ = D H ( − p 8 ′ ) \begin{aligned} & \dot m'_A = D_A(-p'_3) \\ & \dot m_B'=D_B(p_3') \\ & \dot m_C'=D_C(-p_3') \\ & \dot m_D'=D_D(p_3'-p_6') \\ & \dot m_E'=D_E(p_6') \\ & \dot m_F'=D_F(-p_6') \\ & \dot m_G'=D_G(p_6'-p_8') \\ & \dot m_H'=D_H(-p_8') \end{aligned} m˙A=DA(p3)m˙B=DB(p3)m˙C=DC(p3)m˙D=DD(p3p6)m˙E=DE(p6)m˙F=DF(p6)m˙G=DG(p6p8)m˙H=DH(p8)
注意 p 1 , 2 , 4 , 5 , 7 ′ p'_{1,2,4,5,7} p1,2,4,5,7为0,因为这些压力值是已知的,本身就是精确值,所以无需修正。

节点 3 、 6 、 8 3、6、8 368处的质量守恒方程(连续方程)为
m ˙ B ′ + m ˙ D ′ − m ˙ A ′ − m ˙ C ′ = − ( m ˙ B ∗ + m ˙ D ∗ − m ˙ A ∗ − m ˙ C ∗ ) m ˙ E ′ + m ˙ G ′ − m ˙ D ′ − m ˙ F ′ = − ( m ˙ E ∗ + m ˙ G ∗ − m ˙ D ∗ − m ˙ F ∗ ) − m ˙ G ′ − m ˙ H ′ = − ( m ˙ I ∗ − m ˙ G ∗ − m ˙ H ∗ ) \begin{aligned} \dot m_B'+\dot m_D'-\dot m_A'-\dot m_C' &= -(\dot m_B^*+\dot m_D^*-\dot m_A^*-\dot m_C^*) \\ \dot m_E'+\dot m_G'-\dot m_D'-\dot m_F' &= -(\dot m_E^*+\dot m_G^*-\dot m_D^*-\dot m_F^*)\\ -\dot m_G'-\dot m_H' &= -(\dot m_I^*-\dot m_G^*-\dot m_H^*) \end{aligned} m˙B+m˙Dm˙Am˙Cm˙E+m˙Gm˙Dm˙Fm˙Gm˙H=(m˙B+m˙Dm˙Am˙C)=(m˙E+m˙Gm˙Dm˙F)=(m˙Im˙Gm˙H)
把压力修正表示的质量流量修正代入上式,得到压力修正方程
D B ( p 3 ′ ) + D D ( p 3 ′ − p 6 ′ ) − D A ( − p 3 ′ ) − D C ( − p 3 ′ ) = − ( m ˙ B ∗ + m ˙ D ∗ − m ˙ A ∗ − m ˙ C ∗ ) D E ( p 6 ′ ) + D G ( p 6 ′ − p 8 ′ ) − D D ( p 3 ′ − p 6 ′ ) − D F ( − p 6 ′ ) = − ( m ˙ E ∗ + m ˙ G ∗ − m ˙ D ∗ − m ˙ F ∗ ) − D G ( p 6 ′ − p 8 ′ ) − D H ( − p 8 ′ ) = − ( m ˙ I ∗ − m ˙ G ∗ − m ˙ H ∗ ) \begin{aligned} D_B(p_3')+D_D(p_3'-p_6')-D_A(-p'_3)-D_C(-p_3') &= -(\dot m_B^*+\dot m_D^*-\dot m_A^*-\dot m_C^*) \\ D_E(p_6')+D_G(p_6'-p_8')-D_D(p_3'-p_6')-D_F(-p_6') &= -(\dot m_E^*+\dot m_G^*-\dot m_D^*-\dot m_F^*)\\ -D_G(p_6'-p_8')-D_H(-p_8') &= -(\dot m_I^*-\dot m_G^*-\dot m_H^*) \end{aligned} DB(p3)+DD(p3p6)DA(p3)DC(p3)DE(p6)+DG(p6p8)DD(p3p6)DF(p6)DG(p6p8)DH(p8)=(m˙B+m˙Dm˙Am˙C)=(m˙E+m˙Gm˙Dm˙F)=(m˙Im˙Gm˙H)
整理后,压力修正方程变为
1.39 ( p 3 ′ ) − 0.19 ( p 6 ′ ) = − ( m ˙ B ∗ + m ˙ D ∗ − m ˙ A ∗ − m ˙ C ∗ ) 1.0775 ( p 6 ′ ) − 0.1875 ( p 8 ′ ) − 0.19 ( p 3 ′ ) = − ( m ˙ E ∗ + m ˙ G ∗ − m ˙ D ∗ − m ˙ F ∗ ) − 0.1875 ( p 6 ′ ) + 0.5375 ( p 8 ′ ) = − ( m ˙ I ∗ − m ˙ G ∗ − m ˙ H ∗ ) \begin{aligned} 1.39(p_3')-0.19(p_6') &= -(\dot m_B^*+\dot m_D^*-\dot m_A^*-\dot m_C^*) \\ 1.0775(p_6')-0.1875(p_8')-0.19(p_3') &= -(\dot m_E^*+\dot m_G^*-\dot m_D^*-\dot m_F^*)\\ -0.1875(p_6')+0.5375(p_8') &= -(\dot m_I^*-\dot m_G^*-\dot m_H^*) \end{aligned} 1.39(p3)0.19(p6)1.0775(p6)0.1875(p8)0.19(p3)0.1875(p6)+0.5375(p8)=(m˙B+m˙Dm˙Am˙C)=(m˙E+m˙Gm˙Dm˙F)=(m˙Im˙Gm˙H)
把算得的初始质量流量代入进去,得到修正方程为
1.39 ( p 3 ′ ) − 0.19 ( p 6 ′ ) = − 24 1.0775 ( p 6 ′ ) − 0.1875 ( p 8 ′ ) − 0.19 ( p 3 ′ ) = − 14 − 0.1875 ( p 6 ′ ) + 0.5375 ( p 8 ′ ) = − 7 \begin{aligned} 1.39(p_3')-0.19(p_6') &= -24 \\ 1.0775(p_6')-0.1875(p_8')-0.19(p_3') &= -14 \\ -0.1875(p_6')+0.5375(p_8') &= -7 \end{aligned} 1.39(p3)0.19(p6)1.0775(p6)0.1875(p8)0.19(p3)0.1875(p6)+0.5375(p8)=24=14=7
求解压力修正方程,得
{ p 3 ′ = − 20 p 6 ′ = − 20 p 8 ′ = − 20 \begin{cases} p'_3=-20 \\ p'_6=-20 \\ p'_8=-20 \end{cases} p3=20p6=20p8=20
使用算得的修正压力,更新速度场和压力场,以产生满足质量守恒的速度场。修正后的质量流量为:
m ˙ A ∗ ∗ = m ˙ A ∗ + m ˙ A ′ = m ˙ A ∗ + D A ( − p 3 ′ ) = 50 + 0.5 ( − ( − 20 ) ) = 60 m ˙ B ∗ ∗ = m ˙ B ∗ + m ˙ B ′ = m ˙ B ∗ + D B ( p 3 ′ ) = − 20 + 0.4 ( − 20 ) = − 28 m ˙ C ∗ ∗ = m ˙ C ∗ + m ˙ C ′ = m ˙ C ∗ + D C ( − p 3 ′ ) = − 75 + 0.3 ( − ( − 20 ) ) = − 69 m ˙ D ∗ ∗ = m ˙ D ∗ + m ˙ D ′ = m ˙ D ∗ + D D ( p 3 ′ − p 6 ′ ) = 19 + 0.19 ( − 20 − ( − 20 ) ) = 19 m ˙ E ∗ ∗ = m ˙ E ∗ + m ˙ E ′ = m ˙ E ∗ + D E ( p 6 ′ ) = − 30 + 0.3 ( − 20 ) = − 36 m ˙ F ∗ ∗ = m ˙ F ∗ + m ˙ F ′ = m ˙ F ∗ + D F ( − p 6 ′ ) = − 48 + 0.4 ( − ( − 20 ) ) = − 40 m ˙ G ∗ ∗ = m ˙ G ∗ + m ˙ G ′ = m ˙ G ∗ + D G ( p 6 ′ − p 8 ′ ) = 15 + 0.1875 ( − 20 − ( − 20 ) ) = 15 m ˙ H ∗ ∗ = m ˙ H ∗ + m ˙ H ′ = m ˙ H ∗ + D H ( − p 8 ′ ) = 28 + 0.35 ( − ( − 20 ) ) = 35 \begin{aligned} & \dot m_A^{**}=\dot m_A^*+\dot m'_A = \dot m_A^*+D_A(-p'_3)=50+0.5(-(-20))=60 \\ & \dot m_B^{**}=\dot m_B^*+\dot m_B'=\dot m_B^*+D_B(p_3')=-20+0.4(-20)=-28 \\ & \dot m_C^{**}=\dot m_C^*+\dot m_C'=\dot m_C^*+D_C(-p_3')=-75+0.3(-(-20))=-69 \\ & \dot m_D^{**}=\dot m_D^*+\dot m_D'=\dot m_D^*+D_D(p_3'-p_6')=19+0.19(-20-(-20))=19 \\ & \dot m_E^{**}=\dot m_E^*+\dot m_E'=\dot m_E^*+D_E(p_6')=-30+0.3(-20)=-36 \\ & \dot m_F^{**}=\dot m_F^*+\dot m_F'=\dot m_F^*+D_F(-p_6')=-48+0.4(-(-20))=-40 \\ & \dot m_G^{**}=\dot m_G^*+\dot m_G'=\dot m_G^*+D_G(p_6'-p_8')=15+0.1875(-20-(-20))=15 \\ & \dot m_H^{**}=\dot m_H^*+\dot m_H'=\dot m_H^*+D_H(-p_8')=28+0.35(-(-20))=35 \end{aligned} m˙A=m˙A+m˙A=m˙A+DA(p3)=50+0.5((20))=60m˙B=m˙B+m˙B=m˙B+DB(p3)=20+0.4(20)=28m˙C=m˙C+m˙C=m˙C+DC(p3)=75+0.3((20))=69m˙D=m˙D+m˙D=m˙D+DD(p3p6)=19+0.19(20(20))=19m˙E=m˙E+m˙E=m˙E+DE(p6)=30+0.3(20)=36m˙F=m˙F+m˙F=m˙F+DF(p6)=48+0.4((20))=40m˙G=m˙G+m˙G=m˙G+DG(p6p8)=15+0.1875(20(20))=15m˙H=m˙H+m˙H=m˙H+DH(p8)=28+0.35((20))=35
压力修正为
p 3 ∗ = p 3 ( n ) + p 3 ′ = 300 + ( − 20 ) = 280 p 6 ∗ = p 6 ( n ) + p 6 ′ = 200 + ( − 20 ) = 180 p 8 ∗ = p 8 ( n ) + p 8 ′ = 120 + ( − 20 ) = 100 \begin{aligned} & p_3^*=p_3^{(n)}+p_3'=300+(-20)=280 \\ & p_6^*=p_6^{(n)}+p_6'=200+(-20)=180 \\ & p_8^*=p_8^{(n)}+p_8'=120+(-20)=100 \\ \end{aligned} p3=p3(n)+p3=300+(20)=280p6=p6(n)+p6=200+(20)=180p8=p8(n)+p8=120+(20)=100
把修正后的值作为新的猜测值,即
p 3 ( n ) = p 3 ∗ = 280 p 6 ( n ) = p 6 ∗ = 180 p 8 ( n ) = p 8 ∗ = 100 \begin{aligned} & p_3^{(n)}=p_3^*=280 \\ & p_6^{(n)}=p_6^*=180 \\ & p_8^{(n)}=p_8^*=100 \end{aligned} p3(n)=p3=280p6(n)=p6=180p8(n)=p8=100
继续上述流程,使用动量方程计算不同的质量流量为
m ˙ A ∗ = D A ( p 1 − p 3 ( n ) ) = 0.5 ∗ ( 400 − 280 ) = 60 m ˙ B ∗ = D B ( p 3 ( n ) − p 2 ) = 0.4 ∗ ( 280 − 350 ) = − 28 m ˙ C ∗ = D C ( p 4 − p 3 ( n ) ) = 0.3 ∗ ( 50 − 280 ) = − 69 m ˙ D ∗ = D D ( p 3 ( n ) − p 6 ( n ) ) = 0.19 ∗ ( 280 − 180 ) = 19 m ˙ E ∗ = D E ( p 6 ( n ) − p 5 ) = 0.3 ∗ ( 180 − 300 ) = − 36 m ˙ F ∗ = D F ( p 7 − p 6 ( n ) ) = 0.4 ∗ ( 80 − 180 ) = − 40 m ˙ G ∗ = D G ( p 6 ( n ) − p 8 ( n ) ) = 0.1875 ∗ ( 180 − 100 ) = 15 m ˙ H ∗ = D H ( p 9 − p 8 ( n ) ) = 0.35 ( 200 − 100 ) = 35 \begin{aligned} & \dot m_A^*=D_A(p_1-p_3^{(n)})=0.5*(400-280)=60 \\ & \dot m_B^*=D_B(p_3^{(n)}-p_2)=0.4*(280-350)=-28 \\ & \dot m_C^*=D_C(p_4-p_3^{(n)})=0.3*(50-280)=-69 \\ & \dot m_D^*=D_D(p_3^{(n)}-p_6^{(n)})=0.19*(280-180)=19 \\ & \dot m_E^*=D_E(p_6^{(n)}-p_5)=0.3*(180-300)=-36 \\ & \dot m_F^*=D_F(p_7-p_6^{(n)})=0.4*(80-180)=-40 \\ & \dot m_G^*=D_G(p_6^{(n)}-p_8^{(n)})=0.1875*(180-100)=15 \\ & \dot m_H^*=D_H(p_9-p_8^{(n)})=0.35(200-100)=35 \end{aligned} m˙A=DA(p1p3(n))=0.5(400280)=60m˙B=DB(p3(n)p2)=0.4(280350)=28m˙C=DC(p4p3(n))=0.3(50280)=69m˙D=DD(p3(n)p6(n))=0.19(280180)=19m˙E=DE(p6(n)p5)=0.3(180300)=36m˙F=DF(p7p6(n))=0.4(80180)=40m˙G=DG(p6(n)p8(n))=0.1875(180100)=15m˙H=DH(p9p8(n))=0.35(200100)=35
节点 3 、 6 、 8 3、6、8 368处的不平衡质量流量为
Node 3: ∑ ∼ k ( m ˙ k ∗ ) = m ˙ B ∗ + m ˙ D ∗ − m ˙ A ∗ − m ˙ C ∗ = − 28 + 19 − 60 + 69 = 0 Node 6: ∑ ∼ k ( m ˙ k ∗ ) = m ˙ E ∗ + m ˙ G ∗ − m ˙ D ∗ − m ˙ F ∗ = − 36 + 15 − 19 + 40 = 0 Node 8: ∑ ∼ k ( m ˙ k ∗ ) = m ˙ I ∗ − m ˙ G ∗ − m ˙ H ∗ = 50 − 15 − 35 = 0 \begin{aligned} & \text{Node 3:\quad}\sum_{\sim k}(\dot m_k^*)=\dot m_B^*+\dot m_D^*-\dot m_A^*-\dot m_C^*=-28+19-60+69=0 \\ & \text{Node 6:\quad}\sum_{\sim k}(\dot m_k^*)=\dot m_E^*+\dot m_G^*-\dot m_D^*-\dot m_F^*=-36+15-19+40=0 \\ & \text{Node 8:\quad}\sum_{\sim k}(\dot m_k^*)=\dot m_I^*-\dot m_G^*-\dot m_H^*=50-15-35=0 \end{aligned} Node 3:k(m˙k)=m˙B+m˙Dm˙Am˙C=28+1960+69=0Node 6:k(m˙k)=m˙E+m˙Gm˙Dm˙F=36+1519+40=0Node 8:k(m˙k)=m˙Im˙Gm˙H=501535=0
压力修正方程为
1.39 ( p 3 ′ ) − 0.19 ( p 6 ′ ) = 0 1.0775 ( p 6 ′ ) − 0.1875 ( p 8 ′ ) − 0.19 ( p 3 ′ ) = 0 − 0.1875 ( p 6 ′ ) + 0.5375 ( p 8 ′ ) = 0 \begin{aligned} 1.39(p_3')-0.19(p_6') &= 0 \\ 1.0775(p_6')-0.1875(p_8')-0.19(p_3') &= 0 \\ -0.1875(p_6')+0.5375(p_8') &= 0 \end{aligned} 1.39(p3)0.19(p6)1.0775(p6)0.1875(p8)0.19(p3)0.1875(p6)+0.5375(p8)=0=0=0
解得压力修正值为
{ p 3 ′ = 0 p 6 ′ = 0 p 8 ′ = 0 \begin{cases} p'_3=0 \\ p'_6=0 \\ p'_8=0 \end{cases} p3=0p6=0p8=0
可见,只用一步迭代就获得了收敛解(其实第2次迭代的时候算出来各节点的不平衡质量流量为零就无需再往后计算压力修正值了),这是因为该例子较为简单,不含非线性效应的缘故。实际若是包含对流项、扩散项和压力梯度项的动量方程的话,SIMPLE算法的求解时需要迭代很多次才能收敛的。


2.7 二维交错笛卡尔网格上的压力修正方程

在二维笛卡尔网格中,将使用三套网格系统来构建交错网格体系。第一套是存储速度分量 u u u的,第二套是存储速度分量 v v v的,第三套是存储压力和其它变量的,如下图所示。
在这里插入图片描述

前面展示的一维区域内压力修正方程的推导方法,可以很容易地扩展到多维情况。对于下图所示的单元 C C C,其压力修正方程为

在这里插入图片描述

a C p ′ p C ′ + a E p ′ p E ′ + a W p ′ p W ′ + a N p ′ p N ′ + a S p ′ p S ′ = b C p ′ a_C^{p'}p'_C+a_E^{p'}p'_E+a_W^{p'}p'_W+a_N^{p'}p'_N+a_S^{p'}p'_S=b_C^{p'} aCppC+aEppE+aWppW+aNppN+aSppS=bCp
其中
a E p ′ = − ρ e D e u Δ y C δ x e a W p ′ = − ρ w D w u Δ y C δ x w a N p ′ = − ρ n D n v Δ x C δ y n a S p ′ = − ρ s D s v Δ x C δ y s a C p ′ = − ( a E p ′ + a W p ′ + a N p ′ + a S p ′ ) b C p ′ = − ( m ˙ e ∗ + m ˙ w ∗ + m ˙ n ∗ + m ˙ s ∗ ) \begin{aligned} a_E^{p'} &= -\frac{\rho_e D_e^u \Delta y_C}{\delta x_e} \quad\quad a_W^{p'} = -\frac{\rho_w D_w^u \Delta y_C}{\delta x_w} \\ a_N^{p'} &= -\frac{\rho_n D_n^v \Delta x_C}{\delta y_n} \quad\quad a_S^{p'} = -\frac{\rho_s D_s^v \Delta x_C}{\delta y_s} \\ a_C^{p'} &= -(a_E^{p'}+a_W^{p'}+a_N^{p'}+a_S^{p'})\\ b_C^{p'} &= -(\dot m^*_e+\dot m^*_w+\dot m^*_n+\dot m^*_s) \end{aligned} aEpaNpaCpbCp=δxeρeDeuΔyCaWp=δxwρwDwuΔyC=δynρnDnvΔxCaSp=δysρsDsvΔxC=(aEp+aWp+aNp+aSp)=(m˙e+m˙w+m˙n+m˙s)


例2

在下图所示的二维问题中,变量 u w = 50 u_w=50 uw=50 v s = 20 v_s=20 vs=20 p N = 0 p_N=0 pN=0 p E = 10 p_E=10 pE=10

流动是定常的,密度为常数且等于1,则 u e u_e ue v n v_n vn的动量方程为(同样不考虑对流项和扩散项,只考虑压力梯度项)
u e = − d e ( p E − p C ) v n = − d n ( p N − p C ) \begin{aligned} u_e &= -d_e(p_E-p_C) \\ v_n &= -d_n(p_N-p_C) \end{aligned} uevn=de(pEpC)=dn(pNpC)
其中常量系数 d e = 1 d_e=1 de=1 d n = 0.25 d_n=0.25 dn=0.25。单元的 Δ x = Δ y = 1 \Delta x=\Delta y=1 Δx=Δy=1

使用SIMPLE算法计算 u e u_e ue v n v_n vn p C p_C pC的值。
在这里插入图片描述

对于要寻找的 C C C处的压力赋予个猜测值,假设
p C ( n ) = 100 p_C^{(n)}=100 pC(n)=100
其他猜测值也都可以的。

基于假设的压力值,使用动量方程计算不同的速度
u e ∗ = − d e ( p E − p C ( n ) ) = − 1 ∗ ( 10 − 100 ) = 90 v n ∗ = − d n ( p N − p C ( n ) ) = − 0.25 ∗ ( 0 − 100 ) = 25 \begin{aligned} u_e^* &= -d_e(p_E-p_C^{(n)})=-1*(10-100) =90 \\ v_n^* &= -d_n(p_N-p_C^{(n)})=-0.25*(0-100)=25 \end{aligned} uevn=de(pEpC(n))=1(10100)=90=dn(pNpC(n))=0.25(0100)=25
由于密度是均匀的且等于 1 1 1,而且有 Δ x = Δ y = 1 \Delta x=\Delta y=1 Δx=Δy=1,所以质量流量
m ˙ e ∗ = u e ∗ = 90 m ˙ n ∗ = v n ∗ = 25 \begin{aligned} \dot m_e^* &= u_e^* =90 \\ \dot m_n^* &= v_n^*=25 \end{aligned} m˙em˙n=ue=90=vn=25
检查在单元 C C C上的质量流量是否满足连续性
∑ ∼ f ( m ˙ f ∗ ) = m ˙ e ∗ − m ˙ w ∗ + m ˙ n ∗ − m ˙ s ∗ = 90 − 50 + 25 − 20 = 45 \sum_{\sim f}(\dot m_f^*)=\dot m_e^*-\dot m_w^*+\dot m_n^*-\dot m_s^*=90-50+25-20=45 f(m˙f)=m˙em˙w+m˙nm˙s=9050+2520=45
在上面的质量守恒方程中, m ˙ w ∗ \dot m_w^* m˙w m ˙ s ∗ \dot m_s^* m˙s是负的,而且是直接显式使用的,因为它们的值是确定的。因为质量守恒不满足,所以需要修正流场,要推导压力修正方程,其推导过程如下:
∑ ∼ f ( m ˙ f ∗ + m ˙ f ′ ) = 0 ⇒ ∑ ∼ f ( m ˙ f ′ ) = − ∑ ∼ f ( m ˙ f ∗ ) \sum_{\sim f}(\dot m_f^*+\dot m_f')=0 \Rightarrow \sum_{\sim f}(\dot m_f')=-\sum_{\sim f}(\dot m_f^*) f(m˙f+m˙f)=0f(m˙f)=f(m˙f)
再把质量流量的修正值用压力修正值来表示(从动量方程中推出),即
m ˙ e ′ = u e ′ = d e p C ′ = p C ′ m ˙ n ′ = v n ′ = d n p C ′ = 0.25 p C ′ \begin{aligned} \dot m_e' &= u_e'=d_e p_C'=p_C' \\ \dot m_n' &= v_n'=d_n p_C'=0.25p_C' \end{aligned} m˙em˙n=ue=depC=pC=vn=dnpC=0.25pC
这样,得到压力修正方程为
m ˙ e ′ + m ˙ n ′ = − ∑ ∼ f ( m ˙ f ∗ ) ⇒ 1.25 p C ′ = − 45 ⇒ p C ′ = − 36 \dot m_e' +\dot m_n' =-\sum_{\sim f}(\dot m_f^*) \Rightarrow 1.25p_C'=-45 \Rightarrow p_C'=-36 m˙e+m˙n=f(m˙f)1.25pC=45pC=36
获得了压力修正值后,可用其来修正质量流量和压力场,使得流场满足守恒条件,即
m ˙ e ∗ ∗ = m ˙ e ∗ + m ˙ e ′ = m ˙ e ∗ + p C ′ = 90 − 36 = 54 m ˙ n ∗ ∗ = m ˙ n ∗ + m ˙ n ′ = m ˙ n ∗ + 0.25 p C ′ = 25 − 0.25 ∗ 36 = 16 p C ∗ ∗ = p C ( n ) + p C ′ = 100 − 36 = 64 \begin{aligned} \dot m_e^{**} &=\dot m_e^*+\dot m_e'=\dot m_e^*+p_C'= 90-36=54 \\ \dot m_n^{**} &=\dot m_n^*+\dot m_n'=\dot m_n^*+0.25p_C'= 25-0.25*36=16 \\ p_C^{**} &=p_C^{(n)}+p_C'=100-36=64 \end{aligned} m˙em˙npC=m˙e+m˙e=m˙e+pC=9036=54=m˙n+m˙n=m˙n+0.25pC=250.2536=16=pC(n)+pC=10036=64
用修正后的压力场和流量场作为新的猜测值,继续上述过程,即
m ˙ e ∗ = m ˙ e ∗ ∗ = 54 m ˙ n ∗ = m ˙ n ∗ ∗ = 16 p C ( n ) = p C ∗ ∗ = 64 \begin{aligned} \dot m_e^{*} &=\dot m_e^{**}=54 \\ \dot m_n^{*} &=\dot m_n^{**}=16 \\ p_C^{(n)} &=p_C^{**}=64 \end{aligned} m˙em˙npC(n)=m˙e=54=m˙n=16=pC=64
再次检查在单元 C C C上的质量流量是否满足连续性
∑ ∼ f ( m ˙ f ∗ ) = m ˙ e ∗ − m ˙ w ∗ + m ˙ n ∗ − m ˙ s ∗ = 54 − 50 + 16 − 20 = 0 \sum_{\sim f}(\dot m_f^*)=\dot m_e^*-\dot m_w^*+\dot m_n^*-\dot m_s^*=54-50+16-20=0 f(m˙f)=m˙em˙w+m˙nm˙s=5450+1620=0
再次计算压力修正方程
1.25 p C ′ = − ∑ ∼ f ( m ˙ f ∗ ) = 0 1.25p_C'=-\sum_{\sim f}(\dot m_f^*)=0 1.25pC=f(m˙f)=0
算得压力修正值为
p C ′ = 0 p_C'=0 pC=0
即,无需修正,也就是说,一个迭代步就获得了收敛解
u e = m ˙ e ∗ = 54 v n = m ˙ n ∗ = 16 p C = p C ( n ) = 64 \begin{aligned} u_e&=\dot m_e^{*} =54 \\ v_n&=\dot m_n^{*} =16 \\ p_C&=p_C^{(n)} =64 \end{aligned} uevnpC=m˙e=54=m˙n=16=pC(n)=64


2.8 三维交错笛卡尔网格上的压力修正方程

在这里插入图片描述

不再做详细推导和完整展示,直接给出如上图所示的三维交错笛卡尔网格上的压力修正方程,其中 u u u v v v w w w速度分量分别存储在 ( e , w ) (e,w) (e,w) ( n , s ) (n,s) (n,s) ( t , b ) (t,b) (t,b)单元面上,压力修正方程为
a C p ′ p C ′ + a E p ′ p E ′ + a W p ′ p W ′ + a N p ′ p N ′ + a S p ′ p S ′ + a T p ′ p T ′ + a B p ′ p B ′ = b C p ′ a_C^{p'}p'_C+a_E^{p'}p'_E+a_W^{p'}p'_W+a_N^{p'}p'_N+a_S^{p'}p'_S+a_T^{p'}p'_T+a_B^{p'}p'_B=b_C^{p'} aCppC+aEppE+aWppW+aNppN+aSppS+aTppT+aBppB=bCp
其中
a E p ′ = − ρ e D e u Δ y e Δ z e δ x e a W p ′ = − ρ w D w u Δ y w Δ z w δ x w a N p ′ = − ρ n D n v Δ x n Δ z n δ y n a S p ′ = − ρ s D s v Δ x s Δ z s δ y s a T p ′ = − ρ t D t w Δ x t Δ y t δ z t a B p ′ = − ρ b D b w Δ x b Δ y b δ z b a C p ′ = − ( a E p ′ + a W p ′ + a N p ′ + a S p ′ + a T p ′ + a B p ′ ) b C p ′ = − ( m ˙ e ∗ + m ˙ w ∗ + m ˙ n ∗ + m ˙ s ∗ + m ˙ t ∗ + m ˙ b ∗ ) \begin{aligned} a_E^{p'} &= -\frac{\rho_e D_e^u \Delta y_e \Delta z_e}{\delta x_e} \quad\quad a_W^{p'} = -\frac{\rho_w D_w^u \Delta y_w \Delta z_w}{\delta x_w} \\ a_N^{p'} &= -\frac{\rho_n D_n^v \Delta x_n \Delta z_n}{\delta y_n} \quad\quad a_S^{p'} = -\frac{\rho_s D_s^v \Delta x_s \Delta z_s}{\delta y_s} \\ a_T^{p'} &= -\frac{\rho_t D_t^w \Delta x_t \Delta y_t}{\delta z_t} \quad\quad a_B^{p'} = -\frac{\rho_b D_b^w \Delta x_b \Delta y_b}{\delta z_b} \\ a_C^{p'} &= -(a_E^{p'}+a_W^{p'}+a_N^{p'}+a_S^{p'}+a_T^{p'}+a_B^{p'})\\ b_C^{p'} &= -(\dot m^*_e+\dot m^*_w+\dot m^*_n+\dot m^*_s+\dot m^*_t+\dot m^*_b) \end{aligned} aEpaNpaTpaCpbCp=δxeρeDeuΔyeΔzeaWp=δxwρwDwuΔywΔzw=δynρnDnvΔxnΔznaSp=δysρsDsvΔxsΔzs=δztρtDtwΔxtΔytaBp=δzbρbDbwΔxbΔyb=(aEp+aWp+aNp+aSp+aTp+aBp)=(m˙e+m˙w+m˙n+m˙s+m˙t+m˙b)

  • 16
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要用 Python 做导热问题的数值计算,可以使用有限元方法(FEM)或有限体积法(FVM)等数值方法。 首先,需要将导热问题建模为偏微分方程,例如热传导方程。然后,将偏微分方程离散化,得到一个代数方程组。最后,用数值方法求解代数方程组,得到导热问题的数值解。 下面以 FEM 为例,介绍 Python 实现导热问题的数值计算。 1. 建立网格 首先,需要建立网格。可以使用 Python 的第三方库如 meshpy、gmsh 等来生成网格。这里以 gmsh 为例: ```python import gmsh import numpy as np gmsh.initialize() gmsh.model.add("heat_transfer") lc = 0.1 # 网格大小 L = 1.0 # 区域长度 W = 1.0 # 区域宽度 p1 = gmsh.model.geo.addPoint(0, 0, 0, lc) p2 = gmsh.model.geo.addPoint(L, 0, 0, lc) p3 = gmsh.model.geo.addPoint(L, W, 0, lc) p4 = gmsh.model.geo.addPoint(0, W, 0, lc) l1 = gmsh.model.geo.addLine(p1, p2) l2 = gmsh.model.geo.addLine(p2, p3) l3 = gmsh.model.geo.addLine(p3, p4) l4 = gmsh.model.geo.addLine(p4, p1) ll = [l1, l2, l3, l4] pl = gmsh.model.geo.addCurveLoop(ll) ps = [pl] s = gmsh.model.geo.addPlaneSurface(ps) gmsh.model.geo.synchronize() # 生成网格 gmsh.model.mesh.generate(2) # 获取网格节点坐标和拓扑关系 nodes, elems = gmsh_to_mesh(gmsh) gmsh.finalize() ``` 2. 离散化 接着,需要将偏微分方程离散化。这里以有限元法为例,使用 Python 的第三方库 FEniCS 实现: ```python from dolfin import * mesh = Mesh(MPI.comm_world, nodes, elems, 2) V = FunctionSpace(mesh, "P", 1) u = TrialFunction(V) v = TestFunction(V) k = Constant(1.0) # 热导率 f = Constant(0.0) # 热源 a = k*dot(grad(u), grad(v))*dx L = f*v*dx bc = DirichletBC(V, Constant(0.0), "on_boundary") u = Function(V) solve(a == L, u, bc) ``` 3. 可视化 最后,可以使用 Python 的第三方库 matplotlib、mayavi 等来可视化数值解。 ```python import matplotlib.pyplot as plt plot(u, cmap="coolwarm") plt.colorbar() plt.show() ``` 以上就是用 Python 做导热问题的数值计算的基本步骤,具体实现可以根据具体问题进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值