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 边界条件

在这里插入图片描述

如上图,边界单元是那些至少有一个面位于边界片上的单元,这种面被称为边界面。边界面处边界条件的处理,对于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 ) p f S f \displaystyle\sum_{f\sim nb(C)}p_f\bold S_f fnb(C)pfSf来计算的,这意味着边界值总是需要的。为了表明边界压力对解的影响方式,压力梯度的展开形式(即,面离散)将应用于边界条件的添加中。

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来满足的。
在这里插入图片描述

上图表明可通过确保剪切应力与壁面相切,以及边界速度方程与壁面速度相等,来满足这些条件。由壁面施加到流体上的力 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
在这里插入图片描述

滑移壁面边界 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给定)
在这里插入图片描述

如上图,对于给定速度边界条件的进口来说,在边界面处的对流项( 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?)

在这里插入图片描述

如图,在进口处给定静压,即 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?)
在这里插入图片描述

如上图,进口指定总压和速度方向,但是速度幅值和静压未知,但它们之间的关系可利用总压表达式给出
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?)
在这里插入图片描述

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

动量方程的系数修改为
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?)
在这里插入图片描述

如上图,既然流动是不可压缩的,那么指定质量流量的边界条件就等效于指定边界速度的法向分量。速度的计算是通过假设其方向是和主网格节点方向一样,即, ( 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 对称边界条件

在这里插入图片描述

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

垂直于边界方向的单位矢量 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=bvinterior faces contribution bCvboundary face contribution d2μbSb(uCnx+wCnz)nypbSby
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 + 2 μ b S b d ⊥ 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 − 2 μ b S b d ⊥ ( u C n x + v C n y ) n z − 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{2\mu_bS_b}{d_{\perp}}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{2\mu_bS_b}{d_{\perp}}(u_Cn_x+v_Cn_y)n_z-p_bS_b^z}_{boundary~face~contribution} \end{aligned} aCw0bCwinterior faces contribution aCw+boundary face contribution d2μbSbnz2aF=bwinterior faces contribution bCwboundary face contribution d2μbSb(uCnx+vCny)nzpbSbz
这并不是动量方程边界条件的详尽列表,但是覆盖到了大多数的常见边界类型。

6.2 压力修正方程的边界条件

边界单元的连续方程可写成
∑ f ∼ n b ( C ) m ˙ f + m ˙ b ⏟ b o u n d a r y   f a c e = 0 \sum_{f\sim nb(C)}\dot m_f + \underbrace{\dot m_b}_{boundary~face}=0 fnb(C)m˙f+boundary face m˙b=0

∑ f ∼ n b ( C ) ( m ˙ f ∗ + m ˙ f ′ ) + ( m ˙ b ∗ + m ˙ b ′ ) ⏟ b o u n d a r y   f a c e = 0 \sum_{f\sim nb(C)}(\dot m_f^*+\dot m_f') + \underbrace{(\dot m_b^*+\dot m_b')}_{boundary~face}=0 fnb(C)(m˙f+m˙f)+boundary face (m˙b+m˙b)=0
其中 m ˙ b ∗ \dot m_b^* m˙b为边界质量通量, m ˙ b ′ \dot m_b' m˙b为其修正值。对于内部面来说,质量通量和修正值由下式给定
m ˙ f ∗ = ρ f v f ∗ ⋅ S f = ρ f v f ∗ ‾ ⋅ S f − ρ f D f v ‾ ( ∇ p f ( n ) − ∇ p f ( n ) ‾ ) ⋅ S f m ˙ f ′ = − ρ f D f v ‾ ∇ p f ′ ⋅ S f \begin{aligned} \dot m_f^* &= \rho_f \bold v_f^* \cdot \bold S_f = \rho_f \overline{\bold v_f^*} \cdot \bold S_f - \rho_f\overline{\bold D_f^{\bold v}}\left( \nabla p_f^{(n)}-\overline{\nabla p_f^{(n)}} \right) \cdot \bold S_f \\ \dot m'_f &= -\rho_f \overline{\bold D_f^{\bold v}}\nabla p'_f \cdot \bold S_f \end{aligned} m˙fm˙f=ρfvfSf=ρfvfSfρfDfv(pf(n)pf(n))Sf=ρfDfvpfSf
对于边界面来说则略有不同,因为边界面处仅有边界单元对平均量做贡献,故
m ˙ b ∗ = ρ b v C ∗ ⋅ S b − ρ b D C v ( ∇ p b ( n ) − ∇ p C ( n ) ) ⋅ S b m ˙ b ′ = − ρ b D C ( p b ′ − p C ′ ) \begin{aligned} \dot m_b^* &= \rho_b {\bold v_C^*} \cdot \bold S_b - \rho_b{\bold D_C^{\bold v}}\left( \nabla p_b^{(n)}-{\nabla p_C^{(n)}} \right) \cdot \bold S_b \\ \dot m'_b &= -\rho_b {\mathcal D_C}(p_b'-p_C') \end{aligned} m˙bm˙b=ρbvCSbρbDCv(pb(n)pC(n))Sb=ρbDC(pbpC)
在添加边界条件的时候,必须计算 m ˙ b ∗ ,   m ˙ b ′ ,   p b ,   p b ′ \dot m_b^*,~\dot m'_b,~p_b,~p_b' m˙b, m˙b, pb, pb。基于动量方程中的讨论,可推出三类边界条件。第一种是“给定质量流量”(例,壁面或速度已知的进口),对于这种边界条件, m ˙ b ′ = 0 \dot m'_b=0 m˙b=0,其和零标量通量边界条件很像,无需对压力修正方程进行修改,边界处的压力是从内部场算得的。第二类边界条件是“给定压力”,其 p ′ = 0 p'=0 p=0,对于压力修正方程需要添加一个类似Dirichlet条件,此时, m ˙ b ∗ \dot m^*_b m˙b是从边界和内部压力场算得的。第三类,压力和质量流量之间存在隐式关系,此时,从隐式关系中抽取一个显式方程并将其代入到压力修正方程中。

关于不同类型边界条件的细节和它们的添加如下:

6.2.1 壁面边界条件

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)或( 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

不管是滑移还是无滑移壁面边界条件,质量流量都是零,即 m ˙ b = 0 \dot m_b=0 m˙b=0。因此 m ˙ b ′ = 0 \dot m_b'=0 m˙b=0,这等效于给定零通量,表明无需修改压力修正方程。然而,仍旧需要知道壁面的压力,前面提到了两种方法,也可直接由 p C p_C pC给定,汇总如下:
p b = { p C + ∇ p C ( n ) ⋅ d C b p C + ∇ p C ( n ) ⋅ S b ′ − ∇ p b ( n ) ⋅ T b D C p C l o w   o r d e r   e x t r a p o l a t i o n (15.160) p_b=\begin{cases} p_C+\nabla p_C^{(n)}\cdot \bold d_{Cb} \tag{15.160}\\ p_C+\dfrac{\nabla p_C^{(n)}\cdot \bold S'_b-\nabla p_b^{(n)}\cdot \bold T_b}{\mathcal D_C} \\ p_C & low~order~extrapolation \end{cases} pb=pC+pC(n)dCbpC+DCpC(n)Sbpb(n)TbpClow order extrapolation(15.160)

6.2.2 进口边界条件

给定速度 p b = ? ;   m ˙ b   s p e c i f i e d ;   v b   s p e c i f i e d p_b=?;~\dot m_b~specified;~\bold v_b~specified pb=?; m˙b specified; vb specified

对于进口速度给定的情况,质量流量是已知的,把其修正量设为零,即, m ˙ b ′ = 0 \dot m_b'=0 m˙b=0。这样一来,和壁面边界条件类似,该项直接从压力修正方程中去掉即可。边界处的压力是从内部压力场外插得到的,可使用多种方法来获得,见式(15.160)。

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

对进口处指定静压的情况, p b p_b pb是已知的,因此 p b ′ p_b' pb设为零,但是 m ˙ b ′ ≠ 0 \dot m_b' \ne 0 m˙b=0。对于压力修正方程,把进口当做Dirichlet边界条件处理。 p ′ p' p方程的系数变为
a C p ′ = ∑ f ∼ n b ( C ) ρ f D f ⏟ 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 D C ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n a_C^{p'}=\underbrace{\sum_{f\sim nb(C)}\rho_f\mathcal D_f}_{interior~faces~contribution}+ \underbrace{\rho_b\mathcal D_C}_{boundary~face~contribution} aCp=interior faces contribution fnb(C)ρfDf+boundary face contribution ρbDC

给定总压和速度方向 p o , b = p o , s p e c i f i e d ;   m ˙ b ? ;   e v   s p e c i f i e d ;   v b ? p_{o,b}=p_{o,specified};~\dot m_b?;~\bold e_{\bold v}~specified;~\bold v_b? po,b=po,specified; m˙b?; ev specified; vb?

如前所述,对于指定总压的情况,速度方向也需要指定。总压关系方程式 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要写成质量流量和压力的形式,通过把质量流量替换为速度幅值来实现,即
m ˙ b = ρ v b ⋅ S b = ρ ∣ v b ∣ e v ⋅ S b ⇒ ρ ∣ v b ∣ = m ˙ b e v ⋅ S b ⇒ p o , b = p b + 1 2 ρ b m ˙ b 2 ( e v ⋅ S b ) 2 \dot m_b=\rho \bold v_b \cdot \bold S_b=\rho |\bold v_b| \bold e_{\bold v} \cdot \bold S_b \Rightarrow \rho |\bold v_b| = \frac{\dot m_b}{\bold e_{\bold v}\cdot \bold S_b} \\ \Rightarrow p_{o,b}=p_b+\frac{1}{2\rho_b}\frac{\dot m_b^2}{(\bold e_{\bold v}\cdot \bold S_b)^2} m˙b=ρvbSb=ρvbevSbρvb=evSbm˙bpo,b=pb+2ρb1(evSb)2m˙b2
基于 p b p_b pb使用Taylor展开,求得 p b ′ p_b' pb
p b + p b ′ = p b + ∂ p b ∂ m ˙ b ( m ˙ b ′ ) ⇒ p b ′ = ∂ p b ∂ m ˙ b ( m ˙ b ′ ) p_b+p_b'=p_b+\frac{\partial p_b}{\partial \dot m_b}(\dot m_b') \Rightarrow p_b'=\frac{\partial p_b}{\partial \dot m_b}(\dot m_b') pb+pb=pb+m˙bpb(m˙b)pb=m˙bpb(m˙b)
上上式对 m ˙ b \dot m_b m˙b求偏导,并联合上式,推得
p b ′ = − 1 ρ b m ˙ b ∗ ( e v ⋅ S b ) 2 m ˙ b ′ = − ρ b v b ∗ ⋅ v b ∗ m ˙ b ∗ m ˙ b ′ p_b'=-\frac{1}{\rho_b}\frac{\dot m_b^*}{(\bold e_{\bold v}\cdot \bold S_b)^2}\dot m_b'= -\frac{\rho_b\bold v_b^*\cdot\bold v_b^*}{\dot m_b^*}\dot m_b' pb=ρb1(evSb)2m˙bm˙b=m˙bρbvbvbm˙b
上式代入到 m ˙ b ′ = − ρ b D C ( p b ′ − p C ′ ) \dot m'_b = -\rho_b {\mathcal D_C}(p_b'-p_C') m˙b=ρbDC(pbpC),得质量通量修正为
m ˙ b ′ = − ρ b D C ( p b ′ − p C ′ ) ⇒ m ˙ b ′ = m ˙ b ∗ ρ b D C m ˙ b ∗ − D C ( ρ b v b ∗ ⋅ ρ b v b ∗ ) p C ′ \dot m'_b = -\rho_b {\mathcal D_C}(p_b'-p_C')\Rightarrow \\ \dot m'_b=\frac{\dot m_b^*\rho_b\mathcal D_C}{\dot m_b^*-\mathcal D_C(\rho_b \bold v_b^* \cdot \rho_b \bold v_b^*)}p_C' m˙b=ρbDC(pbpC)m˙b=m˙bDC(ρbvbρbvb)m˙bρbDCpC
m ˙ b ′ \dot m'_b m˙b的上述展开形式代入到连续方程 ∑ f ∼ n b ( C ) ( m ˙ f ∗ + m ˙ f ′ ) + ( m ˙ b ∗ + m ˙ b ′ ) ⏟ b o u n d a r y   f a c e = 0 \displaystyle\sum_{f\sim nb(C)}(\dot m_f^*+\dot m_f') + \underbrace{(\dot m_b^*+\dot m_b')}_{boundary~face}=0 fnb(C)(m˙f+m˙f)+boundary face (m˙b+m˙b)=0中,可得边界单元的系数 a C p ′ a_C^{p'} aCp修改为
a C p ′ = ∑ f ∼ n b ( C ) ρ f D f ⏟ 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 D C m ˙ b ∗ − D C ( ρ b v b ∗ ⋅ ρ b v 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 a_C^{p'}=\underbrace{\sum_{f\sim nb(C)}\rho_f\mathcal D_f}_{interior~faces~contribution} +\underbrace{\frac{\dot m_b^*\rho_b\mathcal D_C}{\dot m_b^*-\mathcal D_C(\rho_b \bold v_b^* \cdot \rho_b \bold v_b^*)}}_{boundary~face~contribution} aCp=interior faces contribution fnb(C)ρfDf+boundary face contribution m˙bDC(ρbvbρbvb)m˙bρbDC

6.2.3 出口边界条件

给定压力 p b = p s p e c i f i e d ;   m ˙ b ? ;   v b ? p_{b}=p_{specified};~\dot m_b?;~\bold v_b? pb=pspecified; m˙b?; vb?

对于指定出口压力的情况,把 p b ′ p_b' pb设为零。另一方面, m ˙ b ′ \dot m_b' m˙b的计算为
m ˙ b ′ = − ρ b D C ( p b ′ − p C ′ ) \dot m'_b = -\rho_b {\mathcal D_C}(p_b'-p_C') m˙b=ρbDC(pbpC)
需要知道速度方向,通常把速度 v b \bold v_b vb的方向取成迎风速度 v C \bold v_C vC的方向。压力修正方程中的系数 a C p ′ a_C^{p'} aCp修改为
a C p ′ = ∑ f ∼ n b ( C ) ρ f D f ⏟ 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 D C ⏟ b o u n d a r y   f a c e   c o n t r i b u t i o n a_C^{p'}=\underbrace{\sum_{f\sim nb(C)}\rho_f\mathcal D_f}_{interior~faces~contribution} +\underbrace{\rho_b\mathcal D_C}_{boundary~face~contribution} aCp=interior faces contribution fnb(C)ρfDf+boundary face contribution ρbDC

给定质量流量 m ˙ b = m ˙ s p e c i f i e d ;   p b ? ;   v b ? \dot m_{b}=\dot m_{specified};~p_b?;~\bold v_b? m˙b=m˙specified; pb?; vb?

对于给定质量流量的出口, m ˙ b ′ \dot m_b' m˙b为零,直接把它从压力修正方程中扔掉就好,无需对边界单元的系数做任何修改。通过把 m ˙ b ′ \dot m_b' m˙b设置为零,从 m ˙ b ′ = − ρ b D C ( p b ′ − p C ′ ) \dot m'_b = -\rho_b {\mathcal D_C}(p_b'-p_C') m˙b=ρbDC(pbpC)式中可知,边界处的压力修正(或压力)是和边界单元形心处的压力修正(或压力)相等的。

完全发展出口流动

对于完全发展流动,出口速度假设是已知的,且可通过零法向梯度算出来。这意味着出口的 m ˙ b \dot m_b m˙b是已知的,因此不需要修正,即 m ˙ b ′ \dot m_b' m˙b设为零。然而,边界压力是未知的,它是由内部压力场外插得到的。由于速度场是迭代更新的,所以上述处理方式并不能保证整体上的守恒,除非是在收敛情况下。通常在不可压缩流动中克服该问题并保证每次迭代的整体质量守恒的方法是,通过修改边界处的 m ˙ b \dot m_b m˙b来让其满足整体质量守恒。通过计算流过区域的整体质量流量 ∑ m ˙ i n \sum \dot m_{in} m˙in,然后基于算得的出口边界质量流量,算出离开区域的整体质量流量 ∑ m ˙ o u t \sum \dot m_{out} m˙out,把出口质量流量调整为
m ˙ o u t ← m ˙ o u t ∑ m ˙ i n ∑ m ˙ o u t \dot m_{out} \leftarrow \dot m_{out} \frac{\sum \dot m_{in}}{\sum \dot m_{out}} m˙outm˙outm˙outm˙in
为了能够应用上述处理,出口应该布置在远离回流的区域。

6.2.4 对称边界条件

穿过对称线的质量流量是零,所以其修正量也是零,即, m ˙ b ′ = 0 \dot m_b'=0 m˙b=0。这样,与壁面边界条件类似,把质量流量修正项从压力修正方程中刨掉就可以了。边界处的压力是从内部压力场外插算出的,可使用多种方法来获得,见式(15.160)。

6.2.5 压力的相对性(The Relative Nature of Pressure)

对于不可压缩流动问题,即便是所有边界都施加了法向速度,依旧会出现压力的相对性难题。此时,因为只有压力梯度项出现在了动量方程中,所以无法确定压力的绝对值大小,只有压力差值才具有物理意义(绝对值并没有什么意义)。该压力值的不确定性导致了系数矩阵 A \bold A A的奇异性,以及 A ϕ = b \bold A \phi=\bold b Aϕ=b无法直接求解。该奇异性很好解决,非常简单地,把在区域中某个点处的压力设置为一个给定值即可,其余的压力都是参考该值来计算的。

(这个是所有不可压缩流动问题都会碰到的,即一定要指定某个点为参考压力点,且给定其具体的值 p r e f p_{ref} pref才能展开计算的。)

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要用 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 做导热问题的数值计算的基本步骤,具体实现可以根据具体问题进行调整。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值