FVM in CFD 学习笔记_第15章_流动计算:不可压缩流动_3_边界条件

学习自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算法中,在组装动量方程和压力修正方程时,不同类型的边界条件是如何考虑和添加(处理)的。

6 边界条件

FVM in CFD 学习笔记_第15章_流动计算:不可压缩流动_3_边界条件_第1张图片

如上图,边界单元是那些至少有一个面位于边界片上的单元,这种面被称为边界面。边界面处边界条件的处理,对于CFD代码的精确性和健壮性来说十分重要。为了让压力基求解代码(pressure-based code,即SIMPLE算法类,用压力基求解器来求解不可压缩流动)成功实现,动量方程和压力修正方程两者边界条件的正确添加是不可或缺的环节。这一章节就详细探讨下不同类型边界条件的添加方法。(边界条件也称为“定解条件”,不添加边界条件的方程是无解的,或者说是有无穷多解的,边界条件添加错误的话,方程将得出错误的不符合物理意义的解,或者压根就得不到解)

首先,来关注下在边界面处的Rhie-Chow插值表达式,因为边界面处无法像内部面那样子来做平均,所以边界面处的平均将直接写成单元值的形式,即
□ ‾ b = □ C \overline{\square}_b=\square_C b=C
其中 b b b代表边界面形心, C C C代表单元形心。基于此做法,Rhie-Chow插值中的平均值、速度、质量流量在边界面上变为了下述形式
v b ∗ ‾ = v C ∗ ∇ p b ( n ) ‾ = ∇ p C ( n ) D b v ‾ = D C v v b ∗ ⏟ b o u n d a r y   f a c e = v b ∗ ‾ − D b v ‾ ( ∇ p b ( n ) − ∇ p b ( n ) ‾ ) ⏟ s t a n d a r d   R h i e − C h o w = v C ∗ − D C v ( ∇ p b ( n ) − ∇ p C ( n ) ) ⏟ b o u n d a r y   R h i e − C h o w m ˙ b ∗ = ρ b v b ∗ ⋅ S b = ρ b [ v C ∗ − D C v ( ∇ p b ( n ) − ∇ p C ( n ) ) ] ⋅ S b \begin{aligned} \overline{\bold v_b^*}&=\bold v_C^* \\ \overline{\nabla p_b^{(n)}}&=\nabla p_C^{(n)} \\ \overline{\bold D_b^{\bold v}}&=\bold D_C^{\bold v} \\ \underbrace{\bold v_b^*}_{boundary~face} &= \underbrace{\overline{\bold v_b^*} - \overline{\bold D_b^{\bold v}}\left( \nabla p_b^{(n)}-\overline{\nabla p_b^{(n)}} \right)}_{standard~Rhie-Chow} \\ &= \underbrace{\bold v_C^*-\bold D_C^{\bold v}\left( \nabla p_b^{(n)}-\nabla p_C^{(n)} \right)}_ {boundary~Rhie-Chow} \\ \dot m_b^* &=\rho_b\bold v_b^*\cdot \bold S_b \\ &= \rho_b \left[ \bold v_C^*-\bold D_C^{\bold v}\left( \nabla p_b^{(n)}-\nabla p_C^{(n)} \right) \right] \cdot \bold S_b \end{aligned} vbpb(n)Dbvboundary face vbm˙b=vC=pC(n)=DCv=standard RhieChow vbDbv(pb(n)pb(n))=boundary RhieChow vCDCv(pb(n)pC(n))=ρbvbSb=ρb[vCDCv(pb(n)pC(n))]Sb

接下来先讲解动量方程边界条件的添加方法,然后是压力修正方程边界条件的添加方法。对于动量方程和压力修正方程两者边界条件相互关联的情形,它们的处理方法将在压力修正方程的章节详解。

6.1 动量方程边界条件

动量方程的半离散形式为
( ρ v ) C − ( ρ v ) C ∘ Δ t V C ⏟ e l e m e n t   d i s c r e t i z a t i o n + ∑ f ∼ n b ( C ) ( m ˙ f v f ) ⏟ f a c e   d i s c r e t i z a t i o n = − ∑ f ∼ n b ( C ) ( p f S f ) ⏟ f a c e   d i s c r e t i z a t i o n + ∑ f ∼ n b ( C ) ( τ f ⋅ S f ) ⏟ f a c e   d i s c r e t i z a t i o n + B ⏟ e l e m e n t d i s c r e t i z a t i o n \underbrace{\frac{(\rho\bold v)_C-(\rho\bold v)_C^\circ}{\Delta t}V_C}_{element~discretization} + \underbrace{\sum_{f\sim nb(C)}\left(\dot m_f \bold v_f\right)}_{face~discretization}= -\underbrace{\sum_{f\sim nb(C)}\left(p_f\bold S_f\right)}_{face~discretization} +\underbrace{\sum_{f\sim nb(C)}\left(\tau_f\cdot\bold S_f\right)}_{face~discretization} +\underbrace{\bold B}_{\footnotesize{\begin{matrix}element\\discretization\end{matrix}}} element discretization Δt(ρv)C(ρv)CVC+face discretization fnb(C)(m˙fvf)=face discretization fnb(C)(pfSf)+face discretization fnb(C)(τfSf)+elementdiscretization B
其中把不同项的离散类型皆清晰标出。在单元面处评估的项应该沿着边界面加以修改,以便与所用边界条件的类型相符合。因此,对于边界单元,在单元面处评估的项将写成下述形式
∑ f ∼ n b ( C ) ( m ˙ f v f ) ⏟ f a c e   d i s c r e t i z a t i o n = ∑ f ∼ i n t e r i o r   n b ( C ) ( m ˙ f v f ) + m ˙ b v b ⏟ b o u n d a r y   f a c e ∑ f ∼ n b ( C ) ( τ f ⋅ S f ) ⏟ f a c e   d i s c r e t i z a t i o n = ∑ f ∼ i n t e r i o r   n b ( C ) ( τ f ⋅ S f ) + τ b ⋅ S b ⏟ b o u n d a r y   f a c e = ∑ f ∼ i n t e r i o r   n b ( C ) ( τ f ⋅ S f ) + F b ⏟ b o u n d a r y   f a c e ∑ f ∼ n b ( C ) ( p f S f ) ⏟ f a c e   d i s c r e t i z a t i o n = ∑ f ∼ i n t e r i o r   n b ( C ) ( p f S f ) + p b S b ⏟ b o u n d a r y   f a c e \begin{aligned} \underbrace{\sum_{f\sim nb(C)}\left(\dot m_f \bold v_f\right)}_{face~discretization}&= \sum_{f\sim interior~nb(C)}\left(\dot m_f \bold v_f\right)+\underbrace{\dot m_b \bold v_b}_{boundary~face} \\ \underbrace{\sum_{f\sim nb(C)}\left(\tau_f\cdot\bold S_f\right)}_{face~discretization}&= \sum_{f\sim interior~nb(C)}\left(\tau_f\cdot\bold S_f\right)+\underbrace{\tau_b\cdot\bold S_b}_{boundary~face} \\ &= \sum_{f\sim interior~nb(C)}\left(\tau_f\cdot\bold S_f\right)+\underbrace{\bold F_b}_{boundary~face} \\ \underbrace{\sum_{f\sim nb(C)}\left(p_f\bold S_f\right)}_{face~discretization} &= \sum_{f\sim interior~nb(C)}\left(p_f\bold S_f\right)+\underbrace{p_b\bold S_b}_{boundary~face} \end{aligned} face discretization fnb(C)(m˙fvf)face discretization fnb(C)(τfSf)face discretization fnb(C)(pfSf)=finterior nb(C)(m˙fvf)+boundary face m˙bvb=finterior nb(C)(τfSf)+boundary face τbSb=finterior nb(C)(τfSf)+boundary face Fb=finterior nb(C)(pfSf)+boundary face pbSb
其中的下标 b b b代表边界值。如前所述(本章5.1节),压力项的离散可通过单元离散或面离散来实现。不论采用哪种离散手段,其展开形式都是相同的,因为 V C ( ∇ p ) C V_C(\nabla p)_C VC(p)C是用 ∑ f ∼ n b ( C ) ρ f S f \displaystyle\sum_{f\sim nb(C)}\rho_f\bold S_f fnb(C)ρfSf来计算的,这意味着边界值总是需要的。为了表明边界压力对解的影响方式,压力梯度的展开形式(即,面离散)将应用于边界条件的添加中。

6.1.1 壁面边界条件

一般来说,无滑移或滑移边界条件可以用于移动或固定壁面。添加过程包括计算和线性化壁面处的剪切应力,这与Dirichlet条件是不同的,尽管对于笛卡尔网格两种条件在外部表现上是相同的。

无滑移壁面边界 p b = ? ;   m ˙ b = 0 ;   v b = v w a l l p_b=?;~\dot m_b=0;~\bold v_b=\bold v_{wall} pb=?; m˙b=0; vb=vwall

无滑移边界条件意味着壁面处的流体速度 v b \bold v_b vb与壁面的速度 v w a l l \bold v_{wall} vwall是相等的,对于静止壁面,边界速度为零。在壁面处已知速度 常被错认为是 Dirichlet边界条件,然而这是不对的,因为壁面已知速度的情况需要添加零法向边界通量(即 m ˙ b v b = 0 \dot m_b \bold v_b=0 m˙bvb=0),还要同时考虑剪切应力,这些是无法通过简单地设置 v b = v w a l l \bold v_b=\bold v_{wall} vb=vwall来满足的。
FVM in CFD 学习笔记_第15章_流动计算:不可压缩流动_3_边界条件_第2张图片

上图表明可通过确保剪切应力与壁面相切,以及边界速度方程与壁面速度相等,来满足这些条件。由壁面施加到流体上的力 F b \bold F_b Fb可写为
F b = F ⊥ + F ∥ \bold F_b = \bold F_{\perp}+\bold F_{\parallel} Fb=F+F
其中 F ∥ \bold F_{\parallel} F是壁面切向,而 F ⊥ \bold F_{\perp} F为法向,其应该是零(前面说了,剪切应力应和壁面相切),即
F b = F ∥ = τ w a l l S b \bold F_b=\bold F_{\parallel}=\tau_{wall}S_b Fb=F=τwallSb
其中 τ w a l l \tau_{wall} τwall为壁面施加在流体上的剪切应力
τ w a l l = − μ ∂ v ∥ ∂ d ⊥ \tau_{wall}=-\mu\frac{\partial \bold v_{\parallel}}{\partial d_{\perp}} τwall=μdv
其中 v ∥ \bold v_{\parallel} v为平行于壁面的速度矢量,而 d ⊥ d_{\perp} d为从边界单元形心到壁面的垂直距离,即
n = S b S b = n x i + n y j + n z k d ⊥ = d C b ⋅ n = d C b ⋅ S b S b \begin{aligned} \bold n &= \frac{\bold S_b}{S_b}=n_x\bold i+ n_y \bold j + n_z \bold k \\ d_{\perp} &= \bold d_{Cb}\cdot n=\frac{\bold d_{Cb}\cdot\bold S_b}{S_b} \end{aligned} nd=SbSb=nxi+nyj+nzk=dCbn=SbdCbSb
其中 n \bold n n为壁面法向单位矢量。切向速度矢量 v ∥ \bold v_{\parallel} v可写为 v \bold v v和其法向分量的差值形式
v ∥ = v − ( v ⋅ n ) n = { u − ( u n x + v n y + w n z ) n x v − ( u n x + v n y + w n z ) n y w − ( u n x + v n y + w n z ) n z } \bold v_{\parallel}=\bold v-(\bold v\cdot \bold n)\bold n=\left\{ \begin{matrix} u-(un_x+vn_y+wn_z)n_x \\ v-(un_x+vn_y+wn_z)n_y \\ w-(un_x+vn_y+wn_z)n_z \end{matrix} \right\} v=v(vn)n=u(unx+vny+wnz)nxv(unx+vny+wnz)nyw(unx+vny+wnz)nz
于是,壁面剪切应力可近似为
τ w a l l ≈ − μ b ( v C − v b ) ∥ d ⊥ = − μ b ( v C − v b ) − [ ( v C − v b ) ⋅ n ] n d ⊥ = − μ b d ⊥ { ( u C − u b ) − [ ( u C − u b ) n x + ( v C − v b ) n y + ( w C − w b ) n z ] n x ( v C − v b ) − [ ( u C − u b ) n x + ( v C − v b ) n y + ( w C − w b ) n z ] n y ( w C − w b ) − [ ( u C − u b ) n x + ( v C − v b ) n y + ( w C − w b ) n z ] n z } \begin{aligned} \tau_{wall} &\approx -\mu_b\frac{(\bold v_C-\bold v_b)_{\parallel}}{d_{\perp}}= -\mu_b\frac{(\bold v_C-\bold v_b)-[(\bold v_C-\bold v_b)\cdot\bold n]\bold n}{d_{\perp}} \\ &=-\frac{\mu_b}{d_{\perp}}\left\{ \begin{matrix} (u_C-u_b)-[(u_C-u_b)n_x+(v_C-v_b)n_y+(w_C-w_b)n_z]n_x \\ (v_C-v_b)-[(u_C-u_b)n_x+(v_C-v_b)n_y+(w_C-w_b)n_z]n_y \\ (w_C-w_b)-[(u_C-u_b)n_x+(v_C-v_b)n_y+(w_C-w_b)n_z]n_z \end{matrix} \right\} \end{aligned} τwallμbd(vCvb)=μbd(vCvb)[(vCvb)n]n=dμb(uCub)[(uCub)nx+(vCvb)ny+(wCwb)nz]nx(vCvb)[(uCub)nx+(vCvb)ny+(wCwb)nz]ny(wCwb)[(uCub)nx+(vCvb)ny+(wCwb)nz]nz
从中可获得层流流动的边界力为
F b = = − μ b S b d ⊥ { ( u C − u b ) − [ ( u C − u b ) n x + ( v C − v b ) n y + ( w C − w b ) n z ] n x ( v C − v b ) − [ ( u C − u b ) n x + ( v C − v b ) n y + ( w C − w b ) n z ] n y ( w C − w b ) − [ ( u C − u b ) n x + ( v C − v b ) n y + ( w C − w b ) n z ] n z } \bold F_b==-\frac{\mu_bS_b}{d_{\perp}}\left\{ \begin{matrix} (u_C-u_b)-[(u_C-u_b)n_x+(v_C-v_b)n_y+(w_C-w_b)n_z]n_x \\ (v_C-v_b)-[(u_C-u_b)n_x+(v_C-v_b)n_y+(w_C-w_b)n_z]n_y \\ (w_C-w_b)-[(u_C-u_b)n_x+(v_C-v_b)n_y+(w_C-w_b)n_z]n_z \end{matrix} \right\} Fb==dμbSb(uCub)[(uCub)nx+(vCvb)ny+(wCwb)nz]nx(vCvb)[(uCub)nx+(vCvb)ny+(wCwb)nz]ny(wCwb)[(uCub)nx+(vCvb)ny+(wCwb)nz]nz
使用上式,在 x x x y y y z z z方向的动量方程的边界单元系数修改为下述形式:

u u u分量方程
a C u ← a C u ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n + μ b S b d ⊥ ( 1 − n x 2 ) ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n 0 ← a F = b u b C u ← b C u ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n + μ b S b d ⊥ [ u b ( 1 − n x 2 ) + ( v C − v b ) n y n x + ( w C − w b ) n z n x ] − p b S b x ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n \begin{aligned} a_C^u &\leftarrow \underbrace{a_C^u}_{interior~faces~contribution} + \underbrace{\frac{\mu_bS_b}{d_{\perp}}(1-n_x^2)}_{boundary~face~contribution} \\ 0 &\leftarrow a_{F=b}^{u} \\ b_C^u &\leftarrow \underbrace{b_C^u}_{interior~faces~contribution} + \underbrace{\frac{\mu_bS_b}{d_{\perp}}[u_b(1-n_x^2)+(v_C-v_b)n_yn_x+(w_C-w_b)n_zn_x]-p_bS_b^x}_{boundary~face~contribution} \end{aligned} aCu0bCuinterior faces contribution aCu+boundary face contribution dμbSb(1nx2)aF=buinterior faces contribution bCu+boundary face contribution dμbSb[ub(1nx2)+(vCvb)nynx+(wCwb)nznx]pbSbx
v v v分量方程
a C v ← a C v ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n + μ b S b d ⊥ ( 1 − n y 2 ) ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n 0 ← a F = b v b C v ← b C v ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n + μ b S b d ⊥ [ ( u C − u b ) n x n y + v b ( 1 − n y 2 ) + ( w C − w b ) n z n y ] − p b S b y ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n \begin{aligned} a_C^v &\leftarrow \underbrace{a_C^v}_{interior~faces~contribution} + \underbrace{\frac{\mu_bS_b}{d_{\perp}}(1-n_y^2)}_{boundary~face~contribution} \\ 0 &\leftarrow a_{F=b}^{v} \\ b_C^v &\leftarrow \underbrace{b_C^v}_{interior~faces~contribution} + \underbrace{\frac{\mu_bS_b}{d_{\perp}}[(u_C-u_b)n_xn_y+v_b(1-n_y^2)+(w_C-w_b)n_zn_y]-p_bS_b^y}_{boundary~face~contribution} \end{aligned} aCv0bCvinterior faces contribution aCv+boundary face contribution dμbSb(1ny2)aF=bvinterior faces contribution bCv+boundary face contribution dμbSb[(uCub)nxny+vb(1ny2)+(wCwb)nzny]pbSby
w w w分量方程
a C w ← a C w ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n + μ b S b d ⊥ ( 1 − n z 2 ) ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n 0 ← a F = b w b C w ← b C w ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n + μ b S b d ⊥ [ ( u C − u b ) n x n z + ( v C − v b ) n y n z + w b ( 1 − n z 2 ) ] − p b S b z ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n \begin{aligned} a_C^w &\leftarrow \underbrace{a_C^w}_{interior~faces~contribution} + \underbrace{\frac{\mu_bS_b}{d_{\perp}}(1-n_z^2)}_{boundary~face~contribution} \\ 0 &\leftarrow a_{F=b}^{w} \\ b_C^w &\leftarrow \underbrace{b_C^w}_{interior~faces~contribution} + \underbrace{\frac{\mu_bS_b}{d_{\perp}}[(u_C-u_b)n_xn_z+(v_C-v_b)n_yn_z+w_b(1-n_z^2)]-p_bS_b^z}_{boundary~face~contribution} \end{aligned} aCw0bCwinterior faces contribution aCw+boundary face contribution dμbSb(1nz2)aF=bwinterior faces contribution bCw+boundary face contribution dμbSb[(uCub)nxnz+(vCvb)nynz+wb(1nz2)]pbSbz
上式中的边界面压力 p b p_b pb是未知的,其是从内部解外插获得的,要么使用在点 C C C处的Taylor级数展开截断方法
p b = p C + ∇ p C ( n ) ⋅ d C b p_b=p_C+\nabla p_C^{(n)}\cdot \bold d_{Cb} pb=pC+pC(n)dCb
要么先通过Rhie-Chow插值来计算质量流量
m ˙ b ∗ = ρ b v b ∗ ⋅ S b − ρ b D C v ( ∇ p b ( n ) − ∇ p C ( n ) ) ⋅ S b \dot m_b^* = \rho_b\bold v_b^*\cdot \bold S_b - \rho_b\bold D_C^{\bold v}(\nabla p_b^{(n)}-\nabla p_C^{(n)})\cdot \bold S_b m˙b=ρbvbSbρbDCv(pb(n)pC(n))Sb
(不解,上式的 v b ∗ \bold v_b^* vb为何不是 v b ∗ ‾ \overline{\bold v_b^*} vb v C ∗ \bold v_C^* vC?)

因为壁面边界处的质量流量和速度为零,上述方程变为
0 = 0 − ρ b D C v ( ∇ p b ( n ) − ∇ p C ( n ) ) ⋅ S b 0=0-\rho_b\bold D_C^{\bold v}(\nabla p_b^{(n)}-\nabla p_C^{(n)})\cdot \bold S_b 0=0ρbDCv(pb(n)pC(n))Sb
修改为
D C v ∇ p b ( n ) ⋅ S b = ∇ p b ( n ) ⋅ S b ′ = ∇ p C ( n ) ⋅ S b ′ \begin{aligned} \bold D_C^{\bold v}\nabla p_b^{(n)}\cdot \bold S_b=\nabla p_b^{(n)}\cdot \bold S'_b=\nabla p_C^{(n)}\cdot \bold S'_b \end{aligned} DCvpb(n)Sb=pb(n)Sb=pC(n)Sb
S b ′ \bold S'_b Sb转化为两矢量和加和形式 S b ′ = E b + T b \bold S'_b=\bold E_b+\bold T_b Sb=Eb+Tb,上式变为
∇ p b ( n ) ⋅ ( E b + T b ) = ∇ p C ( n ) ⋅ S b ′ \nabla p_b^{(n)}\cdot (\bold E_b+\bold T_b)=\nabla p_C^{(n)}\cdot \bold S'_b pb(n)(Eb+Tb)=pC(n)Sb
因为 E b \bold E_b Eb是沿着 C b \bold{Cb} Cb方向的,上式可修改为
D C ( p b − p C ) = ( ∇ p C ( n ) ⋅ S b ′ − ∇ p b ( n ) ⋅ T b ) \mathcal D_C(p_b-p_C)=(\nabla p_C^{(n)}\cdot \bold S'_b-\nabla p_b^{(n)}\cdot \bold T_b) DC(pbpC)=(pC(n)Sbpb(n)Tb)
从中可以获得边界压力(这便是计算边界压力的第二种方法)
p b = p C + ∇ p C ( n ) ⋅ S b ′ − ∇ p b ( n ) ⋅ T b D C p_b=p_C+\frac{\nabla p_C^{(n)}\cdot \bold S'_b-\nabla p_b^{(n)}\cdot \bold T_b}{\mathcal D_C} pb=pC+DCpC(n)Sbpb(n)Tb
FVM in CFD 学习笔记_第15章_流动计算:不可压缩流动_3_边界条件_第3张图片

滑移壁面边界 p b = ? ;   m ˙ b = 0 ;   F b = 0 p_b=?;~\dot m_b=0;~\bold F_b=\bold 0 pb=?; m˙b=0; Fb=0

如上图所示,对于这类边界条件,壁面剪切应力为零,因此边界力也是零。边界压力值的计算和前面无滑移边界中的一样,可采用两种方法来计算。动量方程(矢量形式)的系数修改如下:
a C v ← a C v ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n 0 ← a F = b v b C v ← b C v ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n − p b S b ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n \begin{aligned} a_C^{\bold v} &\leftarrow \underbrace{a_C^{\bold v}}_{interior~faces~contribution}\\ 0 &\leftarrow a_{F=b}^{\bold v} \\ \bold b_C^{\bold v} &\leftarrow \underbrace{\bold b_C^{\bold v}}_{interior~faces~contribution} - \underbrace{p_b\bold S_b}_{boundary~face~contribution} \end{aligned} aCv0bCvinterior faces contribution aCvaF=bvinterior faces contribution bCvboundary face contribution pbSb

6.1.2 进口边界条件

考虑三种类型的进口边界条件:(i)给定速度;(ii)给定静压和速度方向;(iii)给定总压和速度方向。对于压力边界条件的处理将放到后续的压力修正方程边界条件小节中详细阐述,本节就先不涉及了。

给定速度(Specified Velocity) p b = ? p_b=? pb=? m ˙ b \dot m_b m˙b给定; v b \bold v_b vb给定)
FVM in CFD 学习笔记_第15章_流动计算:不可压缩流动_3_边界条件_第4张图片

如上图,对于给定速度边界条件的进口来说,在边界面处的对流项( m ˙ b v b \dot m_b\bold v_b m˙bvb)和扩散项( F b = τ b ⋅ S b \bold F_b=\tau_b\cdot\bold S_b Fb=τbSb)是直接使用已知的速度 v b \bold v_b vb和质量流量 m ˙ b \dot m_b m˙b来计算的。边界处的压力则是从边界单元形心外插获得的
p b = p C + ∇ p C ( n ) ⋅ d C b p_b=p_C+\nabla p_C^{(n)}\cdot \bold d_{Cb} pb=pC+pC(n)dCb
那些包含边界速度的项( m ˙ b v b \dot m_b\bold v_b m˙bvb F b \bold F_b Fb),将作显式处理直接添加到源项 b C v \bold b_C^{\bold v} bCv中。此外,把系数 a F = b v a_{F=b}^{\bold v} aF=bv设为零,并将其值添加到系数 a C v a_C^{\bold v} aCv中。

边界单元的系数修改为
a C v ← a C v b C v ← b C v − m ˙ b v b + F b − p b S b 0 ← a F = b v (15.136) \begin{aligned} a_C^{\bold v} &\leftarrow a_C^{\bold v} \\ \bold b_C^{\bold v} &\leftarrow \bold b_C^{\bold v}- \dot m_b \bold v_b+\bold F_b-p_b \bold S_b \tag{15.136}\\ 0 &\leftarrow a_{F=b}^{\bold v} \end{aligned} aCvbCv0aCvbCvm˙bvb+FbpbSbaF=bv(15.136)
(书上的式子感觉不是很对,所以我按照自己的理解给改了下,可能也未必对……书上的式子是下面酱紫滴,有点莫名其妙)
a C v ← a C v b C v ← b C v − a F = b v v b 0 ← a F = b v \begin{aligned} a_C^{\bold v} &\leftarrow a_C^{\bold v} \\ \bold b_C^{\bold v} &\leftarrow \bold b_C^{\bold v}-a_{F=b}^{\bold v}\bold v_b\\ 0 &\leftarrow a_{F=b}^{\bold v} \end{aligned} aCvbCv0aCvbCvaF=bvvbaF=bv

给定静压和速度方向(Specified Static Pressure and Velocity Direction) p b = p s p e c i f i e d p_b=p_{specified} pb=pspecified m ˙ b \dot m_b m˙b?; e v \bold e_{\bold v} ev给定; v b \bold v_b vb?)

FVM in CFD 学习笔记_第15章_流动计算:不可压缩流动_3_边界条件_第5张图片

如图,在进口处给定静压,即 p b p_b pb已知。速度未知,需要从边界处的压力梯度算得。因此,作为边界条件的一部分,速度方向也需要指定。

由于边界压力 p b p_b pb已知,其值将直接用于计算边界单元的压力梯度,而无需特殊处理。即 p b p_b pb用来算出 ∇ p C \nabla p_C pC

边界处的质量流量是由连续方程算出的(见下节)。那么,对于指定的速度方向,即,单位矢量 e v \bold e_{\bold v} ev,指定压力边界条件的进口速度为
m ˙ b ∗ ∗ = ρ b v b ∗ ∗ ⋅ S b = ρ b ∣ ∣ v b ∗ ∗ ∣ ∣ e v ⋅ S b ⇒ ∣ ∣ v b ∗ ∗ ∣ ∣ = m ˙ b ∗ ∗ ρ b ( e v ⋅ S b ) ⇒ v b ∗ ∗ = ∣ ∣ v b ∗ ∗ ∣ ∣ e v \begin{aligned} & \dot m_b^{**}=\rho_b \bold v_b^{**} \cdot \bold S_b=\rho_b ||\bold v_b^{**}|| \bold e_{\bold v}\cdot \bold S_b \\ \Rightarrow & ||\bold v_b^{**}||=\frac{\dot m_b^{**}}{\rho_b ( \bold e_{\bold v}\cdot \bold S_b)} \\ \Rightarrow & \bold v_b^{**}=||\bold v_b^{**}|| \bold e_{\bold v} \end{aligned} m˙b=ρbvbSb=ρbvbevSbvb=ρb(evSb)m˙bvb=vbev
边界速度在每个迭代步都要计算,且该问题的求解是和指定速度的边界条件情况一样的,根据式(15.136)来修改动量方程系数。

指定总压和速度方向(Specified Total Pressure and Velocity Direction) p o , b = p o , s p e c i f i e d p_{o,b}=p_{o,specified} po,b=po,specified m ˙ b \dot m_b m˙b?; e v \bold e_{\bold v} ev给定; v b \bold v_b vb?)
FVM in CFD 学习笔记_第15章_流动计算:不可压缩流动_3_边界条件_第6张图片

如上图,进口指定总压和速度方向,但是速度幅值和静压未知,但它们之间的关系可利用总压表达式给出
p o = p ⏟ s t a t i c   p r e s s u r e + 1 2 ρ v ⋅ v ⏟ d y n a m i c   p r e s s u r e p_o=\underbrace{p}_{static~pressure}+\underbrace{\frac{1}{2}\rho \bold v \cdot \bold v}_{dynamic~pressure} po=static pressure p+dynamic pressure 21ρvv
其中 p o p_o po为总压, p p p为静压, ρ \rho ρ为密度, v \bold v v为速度矢量。边界质量流量是从连续方程算出的(见下节),知道了边界质量流量,速度是用上上式算得的(跟指定静压和速度方向的情况一样),接下来就可用总压关系算出静压值了。然后,把速度作为已知速度条件(即,Dirichlet边界条件)处理,用式(15.136)将动量方程的系数作以修正即可。

6.1.3 出口边界条件

考虑三种类型的出口边界条件:(i)指定静压;(ii)指定质量流量;(iii)完全发展流动。

指定静压 p b = p s p e c i f i e d p_b=p_{specified} pb=pspecified m ˙ b \dot m_b m˙b?; v b \bold v_b vb?)
FVM in CFD 学习笔记_第15章_流动计算:不可压缩流动_3_边界条件_第7张图片

对于动量方程来说,完全发展条件是假设在指定压力出口处,沿着面矢量方向的速度梯度为零。这等效于假设出口速度等于边界单元速度,因此其和零通量边界条件类似,其添加相当简单。

动量方程的系数修改为
a C v ← a C v ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n + m ˙ b ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n 0 ← a F = b v b C v ← b C v ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n − p b S b ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n \begin{aligned} a_C^{\bold v} &\leftarrow \underbrace{a_C^{\bold v}}_{interior~faces~contribution}+ \underbrace{\dot m_b}_{boundary~face~contribution} \\ 0 &\leftarrow a_{F=b}^{\bold v} \\ \bold b_C^{\bold v} &\leftarrow \underbrace{\bold b_C^{\bold v}}_{interior~faces~contribution}- \underbrace{p_b \bold S_b}_{boundary~face~contribution} \end{aligned} aCv0bCvinterior faces contribution aCv+boundary face contribution m˙baF=bvinterior faces contribution bCvboundary face contribution pbSb
(上式相当于让 v b = v C \bold v_b = \bold v_C vb=vC,即, m ˙ b v b = m ˙ b v C \dot m_b \bold v_b=\dot m_b \bold v_C m˙bvb=m˙bvC,所以系数 a C v a_C^{\bold v} aCv中多了一项 m ˙ b \dot m_b m˙b
这种方式使得出口速度的贡献为零,且使用指定压力边界值来计算压力梯度。

然而,为了保证在只是在出口边界面的法向矢量方向的通量为零(切向通量未必是零),速度通常是使用边界通量外插到出口的,边界通量则是由边界单元算出的,即(下式相当于刨掉了速度梯度的法向分量,只保留速度梯度的切向分量)
∇ v b = ∇ v C − ( ∇ v C ⋅ e b ) e b \nabla \bold v_b=\nabla \bold v_C-(\nabla \bold v_C \cdot \bold e_b) \bold e_b vb=vC(vCeb)eb
这样保证了沿着单元面矢量的梯度是零,那么,使用Taylor级数展开,边界处的速度为
v b = v C + ∇ v b ⋅ d C b \bold v_b = \bold v_C + \nabla \bold v_b \cdot \bold d_{Cb} vb=vC+vbdCb
其中使用 ∇ v b \nabla \bold v_b vb替代了 ∇ v C \nabla \bold v_C vC。因此,源项中加入了额外的修正,系数修正为
a C v ← a C v ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n + m ˙ b ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n 0 ← a F = b v b C v ← b C v ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n − m ˙ b ( ∇ v b ⋅ d C b ) − p b S b ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n (15.142) \begin{aligned} a_C^{\bold v} &\leftarrow \underbrace{a_C^{\bold v}}_{interior~faces~contribution}+ \underbrace{\dot m_b}_{boundary~face~contribution} \\ 0 &\leftarrow a_{F=b}^{\bold v} \tag{15.142}\\ \bold b_C^{\bold v} &\leftarrow \underbrace{\bold b_C^{\bold v}}_{interior~faces~contribution} \underbrace{-\dot m_b(\nabla \bold v_b \cdot \bold d_{Cb})-p_b \bold S_b}_{boundary~face~contribution} \end{aligned} aCv0bCvinterior faces contribution aCv+boundary face contribution m˙baF=bvinterior faces contribution bCvboundary face contribution m˙b(vbdCb)pbSb(15.142)
(关于上式的说明,边界速度所带来的质量通量为 m ˙ b v b = m ˙ b v C + m ˙ b ( ∇ v b ⋅ d C b ) \dot m_b \bold v_b=\dot m_b \bold v_C+\dot m_b(\nabla \bold v_b \cdot \bold d_{Cb}) m˙bvb=m˙bvC+m˙b(vbdCb),前面的进入对角系数 a C v a_C^{\bold v} aCv中,后面的放入源项 b C v \bold b_C^{\bold v} bCv中。实际效果相当于既让出口速度的法向梯度为零,还允许出口速度含切向分量。还有一点要说明的,由于出口,所以没有剪切应力,所以 F b \bold F_b Fb为零,系数中也就不再出现它了。)

指定质量流量 m ˙ b = m ˙ s p e c i f i e d \dot m_b=\dot m_{specified} m˙b=m˙specified p b p_b pb?; v b \bold v_b vb?)
FVM in CFD 学习笔记_第15章_流动计算:不可压缩流动_3_边界条件_第8张图片

如上图,既然流动是不可压缩的,那么指定质量流量的边界条件就等效于指定边界速度的法向分量。速度的计算是通过假设其方向是和主网格节点方向一样,即, ( e v ) b = ( e v ) C (\bold e_{\bold v})_b=(\bold e_{\bold v})_C (ev)b=(ev)C来实现的。这样一来,速度展开为
v b = ∣ v b ∣ ( e v ) C \bold v_b=|\bold v_b|(\bold e_{\bold v})_C vb=vb(ev)C
其中 ∣ v b ∣ |\bold v_b| vb是由下式计算的
m ˙ b = ρ b v b ⋅ S b = ρ b ∣ v b ∣ ( e v ) C ⋅ S b ⇒ ∣ v b ∣ = m ˙ b ρ b ( e v ) C ⋅ S b \begin{aligned} &\dot m_b=\rho_b\bold v_b\cdot \bold S_b=\rho_b|\bold v_b|(\bold e_{\bold v})_C\cdot \bold S_b \\ \Rightarrow & |\bold v_b|=\frac{\dot m_b}{\rho_b(\bold e_{\bold v})_C\cdot \bold S_b} \end{aligned} m˙b=ρbvbSb=ρbvb(ev)CSbvb=ρb(ev)CSbm˙b
这样便可算得 v b \bold v_b vb。这样对于动量方程,施加了指定速度边界条件。边界单元的系数修改将依据式(15.136)进行修改。

完全发展出口流动(Fully Developed Outlet Flow)

对于完全发展流动,出口面的法向速度梯度假设为零。因此,出口速度假设已知,且根据零法向梯度算得
∇ v b = ∇ v C − ( ∇ v C ⋅ e b ) e b v b = v C + ∇ v b ⋅ d C b \begin{aligned} \nabla \bold v_b&=\nabla \bold v_C-(\nabla \bold v_C \cdot \bold e_b) \bold e_b \\ \bold v_b &= \bold v_C + \nabla \bold v_b \cdot \bold d_{Cb} \end{aligned} vbvb=vC(vCeb)eb=vC+vbdCb
至于边界压力,其由内部压力场外插得到
p b = p C + ∇ p C ⋅ d C b p_b=p_C+\nabla p_C\cdot \bold d_{Cb} pb=pC+pCdCb
将速度视作已知,动量方程的系数修改将根据式(15.142)进行。

6.1.4 对称边界条件

FVM in CFD 学习笔记_第15章_流动计算:不可压缩流动_3_边界条件_第9张图片

穿过对称边界的标量将发生反射,如此看来,对标量而言对称边界条件的添加可将标量的法向梯度设为零,就跟绝热壁面边界条件一样。对于速度矢量,在如上图所示的对称边界上,速度同样发生反射,即,速度的平行分量(平行于对称边界)保持其幅值和方向不变,而速度的法向垂直分量(垂直于对称边界)则变为零。这在对称边界上产生了零剪切应力和非零的法向应力。因此,同样的边界条件可用于粘性流动的滑移边界条件的施加。

垂直于边界方向的单位矢量 n \bold n n和到边界的垂直距离 d ⊥ d_{\perp} d前面已经得出其计算式,为
n = S b S b = n x i + n y j + n z k d ⊥ = d C b ⋅ n = d C b ⋅ S b S b \begin{aligned} \bold n &= \frac{\bold S_b}{S_b}=n_x\bold i+ n_y \bold j + n_z \bold k \\ d_{\perp} &= \bold d_{Cb}\cdot n=\frac{\bold d_{Cb}\cdot\bold S_b}{S_b} \end{aligned} nd=SbSb=nxi+nyj+nzk=dCbn=SbdCbSb
因此对称边界的垂直和平行速度分量满足(注意这里的速度是指的在边界面上的速度)
v ⊥ = 0 ∂ v ∥ ∂ n = 0 \begin{aligned} \bold v_{\perp} &= \bold 0 \\ \frac{\partial \bold v_{\parallel}}{\partial \bold n} &= \bold 0 \end{aligned} vnv=0=0
速度的垂直分量为(注意这里的速度指的是单元形心的速度)
v ⊥ = ( v ⋅ n ) n = { ( u C n x + v C n y + w C n z ) n x ( u C n x + v C n y + w C n z ) n y ( u C n x + v C n y + w C n z ) n z } \bold v_{\perp}=(\bold v\cdot \bold n)\bold n=\left\{ \begin{matrix} (u_Cn_x+v_Cn_y+w_Cn_z)n_x \\ (u_Cn_x+v_Cn_y+w_Cn_z)n_y \\ (u_Cn_x+v_Cn_y+w_Cn_z)n_z \end{matrix} \right\} v=(vn)n=(uCnx+vCny+wCnz)nx(uCnx+vCny+wCnz)ny(uCnx+vCny+wCnz)nz
速度的平行分量前面已经算得(注意这里的速度是单元形心的速度)
v ∥ = v − ( v ⋅ n ) n = { u C − ( u C n x + v C n y + w C n z ) n x v C − ( u C n x + v C n y + w C n z ) n y w C − ( u C n x + v C n y + w C n z ) n z } \bold v_{\parallel}=\bold v-(\bold v\cdot \bold n)\bold n=\left\{ \begin{matrix} u_C-(u_Cn_x+v_Cn_y+w_Cn_z)n_x \\ v_C-(u_Cn_x+v_Cn_y+w_Cn_z)n_y \\ w_C-(u_Cn_x+v_Cn_y+w_Cn_z)n_z \end{matrix} \right\} v=v(vn)n=uC(uCnx+vCny+wCnz)nxvC(uCnx+vCny+wCnz)nywC(uCnx+vCny+wCnz)nz
边界力 F b \bold F_b Fb可分解成法向分量 F ⊥ \bold F_{\perp} F和平行分量 F ∥ \bold F_{\parallel} F。因为沿着对称边界的剪切应力是零,所以 F b \bold F_b Fb的平行分量也是零。将法向应力定义为 σ ⊥ \sigma_{\perp} σ,则力 F b \bold F_b Fb
F b = σ ⊥ S b \bold F_b=\sigma_{\perp}S_b Fb=σSb
法向应力分量可近似为
σ ⊥ ≈ − 2 μ b v ⊥ d ⊥ = − 2 μ b d ⊥ { ( u C n x + v C n y + w C n z ) n x ( u C n x + v C n y + w C n z ) n y ( u C n x + v C n y + w C n z ) n z } \sigma_{\perp}\approx-2\mu_b\frac{\bold v_{\perp}}{d_{\perp}}=-2\frac{\mu_b}{d_{\perp}} \left\{ \begin{matrix} (u_Cn_x+v_Cn_y+w_Cn_z)n_x \\ (u_Cn_x+v_Cn_y+w_Cn_z)n_y \\ (u_Cn_x+v_Cn_y+w_Cn_z)n_z \end{matrix} \right\} σ2μbdv=2dμb(uCnx+vCny+wCnz)nx(uCnx+vCny+wCnz)ny(uCnx+vCny+wCnz)nz
从中可以算得边界力为
F b = F n = − 2 μ b S b d ⊥ { ( u C n x + v C n y + w C n z ) n x ( u C n x + v C n y + w C n z ) n y ( u C n x + v C n y + w C n z ) n z } \bold F_b=\bold F_n=-2\frac{\mu_bS_b}{d_{\perp}} \left\{ \begin{matrix} (u_Cn_x+v_Cn_y+w_Cn_z)n_x \\ (u_Cn_x+v_Cn_y+w_Cn_z)n_y \\ (u_Cn_x+v_Cn_y+w_Cn_z)n_z \end{matrix} \right\} Fb=Fn=2dμbSb(uCnx+vCny+wCnz)nx(uCnx+vCny+wCnz)ny(uCnx+vCny+wCnz)nz
在垂直于对称边界方向的压力梯度为零,数学上的表达式为
∇ p b ⋅ n = 0 \nabla p_b\cdot \bold n=0 pbn=0
对称边界上的压力可以从区域内部外插获得,因此,为了保证零法向梯度,对称边界处的压力梯度计算为(相当于从 ∇ p C \nabla p_C pC中刨掉了法向分量 ( ∇ p C ⋅ n ) n (\nabla p_C \cdot \bold n)\bold n (pCn)n,只保留了切向分量)
∇ p b = ∇ p C − ( ∇ p C ⋅ n ) n \nabla p_b = \nabla p_C - (\nabla p_C \cdot \bold n)\bold n pb=pC(pCn)n
这样,压力的计算为
p b = p C + ∇ p b ⋅ d C b p_b=p_C+\nabla p_b\cdot \bold d_{Cb} pb=pC+pbdCb
使用上述方程,在 x , y , z x,y,z x,y,z方向的动量方程的边界单元系数修改为如下形式:

u u u分量方程
a C u ← a C u ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n + 2 μ b S b d ⊥ n x 2 ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n 0 ← a F = b u b C u ← b C u ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n − 2 μ b S b d ⊥ ( v C n y + w C n z ) n x − p b S b x ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n \begin{aligned} a_C^u &\leftarrow \underbrace{a_C^u}_{interior~faces~contribution} + \underbrace{\frac{2\mu_bS_b}{d_{\perp}}n_x^2}_{boundary~face~contribution} \\ 0 &\leftarrow a_{F=b}^{u} \\ b_C^u &\leftarrow \underbrace{b_C^u}_{interior~faces~contribution} - \underbrace{\frac{2\mu_bS_b}{d_{\perp}}(v_Cn_y+w_Cn_z)n_x-p_bS_b^x}_{boundary~face~contribution} \end{aligned} aCu0bCuinterior faces contribution aCu+boundary face contribution d2μbSbnx2aF=buinterior faces contribution bCuboundary face contribution d2μbSb(vCny+wCnz)nxpbSbx
v v v分量方程
a C v ← a C v ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n + 2 μ b S b d ⊥ n y 2 ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n 0 ← a F = b v b C v ← b C v ⏟ i n t e r i o r   f a c e s   c o n t r i b u t i o n − 2 μ b S b d ⊥ ( u C n x + w C n z ) n y − p b S b y ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n \begin{aligned} a_C^v &\leftarrow \underbrace{a_C^v}_{interior~faces~contribution} + \underbrace{\frac{2\mu_bS_b}{d_{\perp}}n_y^2}_{boundary~face~contribution} \\ 0 &\leftarrow a_{F=b}^{v} \\ b_C^v &\leftarrow \underbrace{b_C^v}_{interior~faces~contribution} - \underbrace{\frac{2\mu_bS_b}{d_{\perp}}(u_Cn_x+w_Cn_z)n_y-p_bS_b^y}_{boundary~face~contribution} \end{aligned} aCv0bCvinterior faces contribution aCv+boundary face contribution d2μbSbny2aF=bvinteri

你可能感兴趣的:(FVM,in,CFD,学习笔记)