FVM in CFD 學習筆記_第15章_流動計算:不可壓縮流動_4_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 Flowshtml

前面幾章講解的關於變量 ϕ \phi 的通常輸運方程的離散和求解流程,均是創建在事先已知速度場的前提下。可是通常狀況下,速度場是未知的,且須要經過求解Navier-Stokes方程組來獲取。對於不可壓縮流動而言,該項工做尤其複雜,由於壓力和速度是強烈耦合在一塊兒的,並且壓力並不以主變量的形式出如今動量或是連續方程中。本章的重點在於展現解決上述兩個問題的方法,以及不可壓縮流動問題的流場計算方法。先講解一維交錯網格,而後是一維同位網格,最後是同位三維非結構網格。除了闡明SIMPLE、SIMPLEC、PRIME和PISO算法的前因後果,還清晰闡明瞭Rhie-Chow插值方法,以及將其擴展到瞬態、鬆弛和體積力項的方法。最後,展示了一些常見邊界條件的添加細節。web

因爲本章內容繁雜,篇幅較長,故分紅了四部分來說解,各部分主要內容分別爲:交錯網格、同位網格、邊界條件、SIMPLE家族算法。redis

這裏是第四部分,主要講解在SIMPLE算法基礎上衍生出的其餘SIMPLE家族算法、最佳欠鬆弛因子、Rhie-Chow插值對不一樣項的處理、代碼講解。算法

7 SIMPLE家族算法

在SIMPLE算法中,速度和壓力是用分離式(順序式)方式來處理的,壓力場是經過壓力修正方程算出的,而壓力修正方程的推導則是利用離散的動量方程,將連續方程中的速度場替換成壓力項來獲得的(即,從離散動量方程推導出速度和壓力的關係,而後把該關係代入到連續方程中,獲得用壓力項而非速度項表示的連續方程,即壓力修正方程)。在推導過程當中,速度修正項, H f [ v ] \overline{\bold H_f} [\bold v'] ,是被忽略掉了的,由於若是保留它的話會使得方程難以處理。架構

拋掉該項並不會影響到最終的解,由於該項在收斂的時候值爲零。只是,這麼作影響了收斂的過程,由於在最初的迭代過程當中該項的值是至關大的。這個很大的值可能會致使發散或是減緩收斂速度,由於高估了壓力修正場。爲了平衡該做用,在SIMPLE算法中,壓力要作欠鬆弛處理,即 p = p + λ p p p=p^*+\lambda^p p' ,其中 λ p \lambda^p 是壓力欠鬆弛因子。爲了得到最佳收斂效果, λ p \lambda^p 一般取成( 1 λ v 1-\lambda^\bold v ),其中 λ v \lambda^\bold v 爲動量欠鬆弛因子,這個後面會詳細探討。app

儘管使用了欠鬆弛處理,SIMPLE算法的收斂速率仍然依據問題的不一樣而不一樣,所以學者們尋求各類替代方法來作更好的改進。他們的努力最終發展了一系列SIMPLE類型的家族算法,例如SIMPLEC、SIMPLER、PISO、SIMPLEX、PRIME、SIMPLEM和SIMPLEST。Moukalled和Darwish統一了針對不可壓縮和可壓縮流動的這些算法的公式,而Darwish等人和Jang等人則評估了它們的性能。這裏並不打算給出這些算法的完整描述,而是,聚焦在兩種最經常使用的算法上,它們是Van Doormal和Raithby的SIMPLEC(SIMPLE Consistent)算法,以及Issa的PISO(Pressure-Implicit Split Operator)算法。這兩種算法展現了對於 H f [ v ] \overline{\bold H_f} [\bold v'] 項的兩種不一樣的處理方法。在SIMPLEC算法中,主網格節點的速度修正近似爲 鄰近位置處速度修正的加權平均,將 H f [ v ] \overline{\bold H_f} [\bold v'] 項轉變爲修正項, H f ~ [ v ] \widetilde{\bold H_f} [\bold v'] ,其幅值更小(比 H f [ v ] \overline{\bold H_f} [\bold v'] 更小),能夠忽略。在PISO算法中, H f [ v ] \overline{\bold H_f} [\bold v'] 項將做爲分裂算子方法中的一部分來考慮。在其它算法中,SIMPLE算法中直接忽略掉的 H f [ v ] \overline{\bold H_f} [\bold v'] 項將進行修改並引入到動量方程或算子 D v \bold D^\bold v 中。由於PISO算法等效於一步SIMPLE算法和一步或多步PRIME算法的結合,因此PRIME算法也將進行介紹。框架

在PRIME算法中,動量方程是顯式求解的。對動量方程的該顯式處理是合適的,由於其對總體流場的收斂貢獻很小。另外一方面,找尋壓力場的正確解則是影響整場收斂的重要因素。ide

在SIMPLEST算法中,動量方程的係數分紅對流部分和擴散部分,對流部分顯式處理,擴散部分隱式處理,這樣影響着 D v \bold D^\bold v H \bold H 。對流部分顯式處理的正當性是基於,在純對流狀況下擾動的傳播是以幅值不變的有限速度進行的,與,顯式迭代方法的單次迭代中從某個特定點到鄰近網格點的偏差的傳播,是類似的。而擴散部分的隱式處理的證實則源自於,在純擴散狀況下擾動的傳播是同時向着各個方向進行的且幅值是快速衰減的,與,隱式求解方法中的單次迭代步內偏差是在整個計算域上衰減的,是類似的。svg

在SIMPLEM(SIMPLE-Modified)算法中,壓力修正方程是先於動量方程求解的,代表壓力場是使用舊的速度場求解的。這樣會比速度修正產生更好的壓力修正,相較於SIMPLE算法,二者的優勢和缺點是互換的。性能

在SIMPLER(SIMPLE-Revised)算法中,提出了一個額外的方程,從中可直接解出壓力,而相似SIMPLE的壓力修正方程則用於更新速度場。採用分離的壓力方程的緣由是,一旦速度場使用預測壓力修正場更新後,其再也不知足動量方程。所以,壓力須要從另外一個知足速度的方程來求解,這樣可同時知足動量方程。

SIMPLEX算法的發展目的是確保收斂速度不會隨着網格的加密而衰減,其與SIMPLE算法的不一樣是 D v \bold D^{\bold v} 場是要計算的。這是使用額外的方程組來求解的,其發展和求解所基於的假設是,壓力差值的空間分佈的影響隨着網格的加密變化很小。所以,若是壓力差值的影響限制在一個單元上,那麼作出下面的假設是合適的,經過外插,主網格節點的壓力差值足夠表明單元面的壓力差值。

儘管全部上述算法最初是用於交錯網格的,然而他們在同位網格框架下依然適用。

7.1 SIMPLEC算法

SIMPLEC(SIMPLE-Consistent)算法是SIMPLE算法的修改變型,其改動在於,簡單地假設在點 C C 處的速度修正是鄰近網格節點的修正值的加權平均。數學上表示爲
v C F N B ( C ) a F v v F F N B ( C ) a F v F N B ( C ) a F v v F v C F N B ( C ) a F v \bold v'_C\approx\frac{\displaystyle\sum_{F\sim NB(C)}a_F^\bold v \bold v'_F}{\displaystyle\sum_{F\sim NB(C)}a_F^\bold v} \Rightarrow \displaystyle\sum_{F\sim NB(C)}a_F^\bold v \bold v'_F \approx \bold v'_C \displaystyle\sum_{F\sim NB(C)}a_F^\bold v
使用 H \bold H 算子,上式可寫爲
F N B ( C ) a F v a C v v F v C F N B ( C ) a F v a C v H C [ v ] v C H C [ 1 ] \sum_{F\sim NB(C)}\frac{a_F^\bold v}{a_C^\bold v} \bold v'_F \approx \bold v'_C \sum_{F\sim NB(C)}\frac{a_F^\bold v}{a_C^\bold v} \Rightarrow \bold H_C[\bold v'] \approx \bold v'_C \bold H_C[1]
所以,並不是像在SIMPLE中那樣忽略掉 H C [ v ] \overline{\bold H_C[\bold v']} 項,把它用上式的近似值來代替。這樣,速度修正方程 v C + H C [ v ] = D C v ( p ) C \bold v_C'+\bold H_C[\bold v'] = -\bold D_C^{\bold v}(\nabla p')_C 變爲了
( 1 + H C [ 1 ] ) v C = D C v ( p ) C v C = D C v ~ ( p ) C (1+\bold H_C[1])\bold v'_C=-\bold D_C^\bold v(\nabla p')_C \Rightarrow \bold v'_C=-\widetilde{\bold D_C^\bold v}(\nabla p')_C
接下來,可用上式推導出壓力修正方程。

經過在動量方程中添加和減去 F N B ( C ) a F v v C \displaystyle\sum_{F\sim NB(C)}a_F^\bold v \bold v_C 項,也可得到一樣的結果,即
( a C v + F N B ( C ) a F v ) v C + F N B ( C ) a F v ( v F + v C ) = v C ( p ) C + b ^ C v \left(a_C^\bold v+\sum_{F\sim NB(C)}a_F^\bold v \right)\bold v_C+ \sum_{F\sim NB(C)}a_F^\bold v(\bold v_F+\bold v_C)= -\bold v_C(\nabla p)_C+\hat{\bold b}_C^\bold v
能夠寫成
v C + H C ~ [ v v C ] = D C v ~ ( p ) C + B ^ C v \bold v_C + \widetilde{\bold H_C}[\bold v - \bold v_C]=-\widetilde{\bold D_C^\bold v}(\nabla p)_C+\hat{\bold B}_C^\bold v
根據上式,速度修正方程變爲
v C = H C ~ [ v v C ] D C v ~ ( p ) C \bold v'_C = -\widetilde{\bold H_C}[\bold v' - \bold v'_C]-\widetilde{\bold D_C^\bold v}(\nabla p')_C
忽略掉 H C ~ [ v v C ] \widetilde{\bold H_C}[\bold v' - \bold v'_C] 項,就和前面推導的近似形式同樣了,一樣用這個修正速度可推導出壓力修正方程。

在SIMPLEC算法中,得益於更好的近似估算(即,忽略的項更小),與SIMPLE算法相比,壓力的鬆弛處理再也不須要了,所得速度也更加符合動量方程。因而乎,可獲得更快的收斂速度。如此看來,忽略掉 H C ~ [ v v C ] \widetilde{\bold H_C}[\bold v' - \bold v'_C] 項,而非 H C [ v ] \bold H_C[\bold v'] 項,而且把 D C v \bold D_C^\bold v 替換成 D C v ~ \widetilde{\bold D_C^\bold v} ,SIMPLEC算法中的步驟和SIMPLE中的步驟是類似的。

7.2 PRIME算法

在PRIME(Pressure Implicit Momentum Explicit)算法中,動量方程是顯式求解的,該顯式處理是恰當的,由於在迭代求解過程當中動量方程對於總體流場的收斂貢獻較小,而另外一方面,壓力場的正確解則對總體收斂的貢獻相當重要。基於該認知,將PRIME算法彙總以下:

動量方程顯式求解,得到新的速度場 v \bold v^*
v C = H C [ v ( n ) ] D C v ( p ( n ) ) C + B C v \bold v_C^*=-\bold H_C[\bold v^{(n)}]-\bold D_C^\bold v(\nabla p^{(n)})_C+\bold B_C^\bold v
該速度場將用於推導壓力修正方程。定義修正場以下
v C = v C + v C p C = p C ( n ) + p C \bold v_C^{**}=\bold v_C^* + \bold v_C' \quad\quad p_C^*=p_C^{(n)}+p_C'
修正場應知足
v C = H C [ v ] D C v ( p ) C + B C v = H C [ v + v ] D C v [ ( p ( n ) + p ) ] C + B C v \begin{aligned} \bold v_C^{**} &= -\bold H_C[\bold v^{**}]-\bold D_C^\bold v(\nabla p^{*})_C+\bold B_C^\bold v \\ &= -\bold H_C[\bold v^* + \bold v']-\bold D_C^\bold v[\nabla (p^{(n)}+p')]_C+\bold B_C^\bold v \end{aligned}
上式減去上上上式,可獲得以下的速度和壓力關係
v C = ( H C [ v v ( n ) ] + H C [ v ] ) D C v p C \bold v_C'=\underline{-\left(\bold H_C[\bold v^*- \bold v^{(n)}]+ \bold H_C[\bold v']\right)} -\bold D_C^\bold v\nabla p'_C
上式再代入到連續方程,得
f n b ( C ) ρ f D f p f S f = f n b ( C ) m ˙ f + f n b ( C ) [ ρ f ( H f [ v v ( n ) ] + H f [ v ] ) S f ] -\sum_{f\sim nb(C)}\rho_f\overline{\bold D_f}\nabla p_f'\cdot\bold S_f= -\sum_{f\sim nb(C)}\dot m_f^*+\underline{\sum_{f\sim nb(C)}\left[ \rho_f\left(\overline{\bold H_f}\left[\bold v^* - \bold v^{(n)}\right]+\overline{\bold H_f}[\bold v']\right)\cdot \bold S_f\right]}
其中的下劃線項能夠忽略。

若是 H C [ v ] \bold H_C[\bold v'] H C [ v v ( n ) ] \bold H_C[\bold v^*- \bold v^{(n)}] 兩項符號相反的話,那麼在PRIME算法中忽略的項 H C [ v v ( n ) ] + H C [ v ] \bold H_C[\bold v^*- \bold v^{(n)}]+ \bold H_C[\bold v'] 是比SIMPLE算法中忽略的項 H C [ v ] \bold H_C[\bold v'] 要來的小的。注意到 H C [ v ] = H C [ v C v C ] \bold H_C[\bold v']=\bold H_C[\bold v_C^{**}-\bold v_C^{*}] 是爲了知足連續方程而帶來的修正,而 H C [ v v ( n ) ] \bold H_C[\bold v^*- \bold v^{(n)}] 是爲了知足動量方程而帶來的修正,一般加到動量方程中的修正與加到連續方程中的修正是符號相反的,所以,PRIME算法中忽略掉的項 H C [ v v ( n ) ] + H C [ v ] \bold H_C[\bold v^*- \bold v^{(n)}]+ \bold H_C[\bold v'] 是較小的。此外,因爲動量方程是顯示求解的,因此不須要欠鬆弛處理,這樣帶來的好處是增長了算法的穩定性。

7.3 PISO算法

在PISO算法中,修正過程由兩步或者更多的步驟構成,而 H C [ v ] \bold H_C[\bold v'] 項則在修正過程的部分步驟中考慮。第一步與SIMPLE算法相似,其中 v \bold v' 是用忽略掉 H C [ v ] \bold H_C[\bold v'] 的方法算出的。知足連續方程的速度 v \bold v^{**} 和壓力 p p^* 場將用於從新計算動量方程的係數,並顯式求解該方程。新的速度場 v \bold v^{***} 將用於計算單元面處的質量流量場 m ˙ \dot m^{***} ,使用Rhie-Chow插值。而後, H C [ v ] \bold H_C[\bold v'] 在第二個修正步中將作部分恢復,其中速度修正寫爲
v C = v C + v C = H C [ v ] ( D C v ) ( p ) C + v C = H C [ v + v ] ( D C v ) ( p ) C + v C = H C [ v ] H C [ v ] ( D C v ) ( p ) C + v C = H C [ v ] ( D C v ) ( p ) C v C H C [ D C v ( p ) C ] + v C v C + v C H C [ D C v ( p ) C ] \begin{aligned} \bold v_C^{****} &= \bold v_C^{***} + \bold v''_C \\ &= -\bold H_C^{**}[\bold v^{**}]-(\bold D_C^\bold v)^{**}(\nabla p^{*})_C+\bold v''_C \\ &= -\bold H_C^{**}[\bold v^{*}+\bold v']-(\bold D_C^\bold v)^{**}(\nabla p^{*})_C+\bold v''_C \\ &= -\bold H_C^{**}[\bold v^{*}]-\bold H_C^{**}[\bold v'] -(\bold D_C^\bold v)^{**}(\nabla p^{*})_C+\bold v''_C \\ &= \underbrace{-\bold H_C^{**}[\bold v^{*}]-(\bold D_C^\bold v)^{**}(\nabla p^{*})_C}_{\approx\bold v_C^{**}} -\bold H_C^{**}[-\bold D_C^\bold v(\nabla p')_C]+\bold v''_C \\ &\approx \bold v_C^{**}+\underline{\bold v''_C -\bold H_C^{**}[-\bold D_C^\bold v(\nabla p')_C]} \end{aligned}
上式中的下劃線部分表明着 H C [ v ] \bold H_C[\bold v'] 的部分,其在第二個修正步中有所恢復。第二個速度修正知足
v C = H C [ v ] ( D C v ) ( p ) C \bold v_C''=-\underline{\bold H_C^{**}[\bold v'']}-(\bold D_C^\bold v)^{**}(\nabla p'')_C
使用上上式,以及 C C F F 節點之間的Rhie-Chow插值,可獲得新的壓力修正方程
f n b ( C ) ρ f D f p f S f = f n b ( C ) m ˙ f + f n b ( C ) ( ρ f H f [ v ] S f ) -\sum_{f\sim nb(C)}\rho_f\overline{\bold D_f}\nabla p''_f\cdot \bold S_f = -\sum_{f\sim nb(C)}\dot m_f^* + \underline{\sum_{f\sim nb(C)}\left(\rho_f\overline{\bold H_f}[\bold v'']\cdot \bold S_f\right)}
其中下劃線項能夠忽略,該修正步能夠想重複多少次就重複多少次,每次恢復 H C [ v ] \bold H_C[\bold v'] 新的部分。

經過對該流程的分析,不難發現,PISO能夠視爲一個SIMPLE步和一個或多個PRIME步的結合,所以結合了SIMPLE算法的隱式特性和PRIME算法的穩定性。同位網格上的PISO算法的流程可彙總以下:

  1. 爲計算時刻 t + Δ t t+\Delta t 的解,用時刻 t t 的壓力、速度和質量流量場 p C t p_C^{t} v C t \bold v_C^{t} m ˙ f t \dot m_f^{t} 做爲初始猜想值 p C ( n ) p_C^{(n)} v C ( n ) \bold v_C^{(n)} m ˙ f ( n ) \dot m_f^{(n)}

SIMPLE 一步

  1. 隱式求解動量方程得到新速度場 v C \bold v_C^*
    v C + H C [ v ] = D C v ( p ( n ) ) C + B C v \bold v_C^*+\bold H_C[\bold v^*] = -\bold D_C^{\bold v}(\nabla p^{(n)})_C + \bold B_C^{\bold v}
  2. 更新單元面處的質量流量,使用Rhie-Chow差值技術得到知足動量方程的質量流量場 m ˙ f \dot m_f^*
    m ˙ f = ρ f v f S f = ρ f v f S f ρ f D f v ( p f ( n ) p f ( n ) ) S f \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
  3. 使用新的質量流量 m ˙ f \dot m_f^* 組裝壓力修正方程,並求解該方程以得到壓力修正場 p C p_C'
    a C p p C + F N B ( C ) a F p p F = b C p a_C^{p'}p'_C+\sum_{F\sim NB(C)}a_F^{p'}p'_F=b_C^{p'}
    其中
    a F p = F l u x F f = ρ f D f a C p = f n b ( c ) F l u x F f = F N B ( C ) a F p b C p = f n b ( C ) F l u x V f + f n b ( C ) ( ρ f H f [ v ] S f ) = f n b ( C ) m ˙ f + f n b ( C ) ( ρ f H f [ v ] S f ) \begin{aligned} a_F^{p'} &= FluxF_f = -\rho_f \mathcal D_f \\ a_C^{p'} &= -\sum_{f\sim nb(c)}FluxF_f=-\sum_{F\sim NB(C)}a_F^{p'} \\ b_C^{p'} &= -\sum_{f\sim nb(C)} FluxV_f+\underline{\sum_{f\sim nb(C)}\left(\rho_f \overline{\bold H_f}[\bold v'] \cdot \bold S_f\right) } \\ &= -\sum_{f\sim nb(C)} \dot m_f^*+\underline{\sum_{f\sim nb(C)}\left(\rho_f \overline{\bold H_f}[\bold v'] \cdot \bold S_f\right) } \end{aligned}
  4. 基於壓力修正場,更新單元形心處的壓力和速度場,以及單元面處的質量流量場,以得到知足連續方程的場,這些場分別用 p C p_C^* v C \bold v_C^{**} m ˙ f \dot m_f^{**} 表示;
    v C = v C + v C v C = D C v ( p ) C m ˙ f = m ˙ f + m ˙ f m ˙ f = ρ f D f v p f S f p C = p C ( n ) + λ p p C \begin{aligned} \bold v_C^{**} &= \bold v_C^* + \bold v'_C & \bold v'_C &= -\bold D_C^{\bold v}(\nabla p')_C \\ \dot m_f^{**} &= \dot m_f^* + \dot m'_f & \dot m'_f &= -\rho_f \overline{\bold D_f^{\bold v}}\nabla p'_f \cdot \bold S_f \\ p_C^* &= p_C^{(n)}+\lambda^p p'_C \end{aligned}

PRIME一步或多步

  1. 使用最新可用的速度和壓力場,計算動量方程的係數並顯式求解該方程;
  2. 使用Rhie-Chow差值技術,更新單元面處的質量流量;
  3. 使用新的質量流量,組裝壓力修正方程,並求解以得到壓力修正場;
    f n b ( C ) ρ f D f p f S f = f n b ( C ) m ˙ f + f n b ( C ) ( ρ f H f [ v ] S f ) -\sum_{f\sim nb(C)}\rho_f\overline{\bold D_f}\nabla p''_f\cdot \bold S_f = -\sum_{f\sim nb(C)}\dot m_f^* + \underline{\sum_{f\sim nb(C)}\left(\rho_f\overline{\bold H_f}[\bold v'']\cdot \bold S_f\right)}
  4. 更新壓力、速度、質量流量場;
  5. 返回第6步,依據想要的修正步數,屢次重複該流程;
  6. 將最新的速度、壓力、質量流量值做爲初值猜想值;
  7. 返回第2步,並重復該流程直到收斂;
  8. 將收斂值設爲 t + Δ t t+\Delta t 時刻的解;
  9. 推動到下一時刻, t t + Δ t t\leftarrow t+\Delta t
  10. 返回第1步並重復該流程直至到達最後時間步。

PISO算法的流程圖以下圖所示

在這裏插入圖片描述

8 v \bold v p p' 的最佳欠鬆弛因子

爲推進SIMPLE算法的收斂,動量和連續方程要作欠鬆弛處理,分別使用欠鬆弛因子 λ v \lambda^\bold v λ p \lambda^p ,那麼找尋能得到最佳收斂速度的欠鬆弛因子值就變得頗有必要了,回想一下,不含欠鬆弛處理的速度修正是這樣子的
v C = D C ( p ) C \bold v'_C=-\bold D_C(\nabla p')_C
此外,在計算壓力場時,壓力修正要作欠鬆弛處理,以便讓速度修正場滿族精確的速度修正方程
v C = H C [ v ] λ p D C ( p ) C \bold v'_C=-\bold H_C[\bold v']-\lambda^p\bold D_C(\nabla p')_C
結合上式和上上式,可得 λ p \lambda^p 的表達式
D C ( p ) C = H C [ v ] λ p D C ( p ) C λ p = 1 + H C [ v ] v C = 1 + F N B ( C ) a F v v F a C v v C \begin{aligned} & -\bold D_C(\nabla p')_C=-\bold H_C[\bold v']-\lambda^p\bold D_C(\nabla p')_C \\ \Rightarrow & \lambda^p=1+\frac{\bold H_C[\bold v']}{\bold v'_C}= 1+\frac{\displaystyle\sum_{F\sim NB(C)}a_F^\bold v \bold v'_F}{a_C^\bold v \bold v'_C} \end{aligned}
SIMPLEC算法無需對壓力修正作欠鬆弛處理,其有着最佳的加速速度。所以,使用SIMPLEC算法中引入的近似,點 C C 處的速度修正能夠寫成鄰近網格節點速度修正的加權平均,即
v C F N B ( C ) a F v v F F N B ( C ) a F v \bold v_C'\approx \frac{\displaystyle\sum_{F\sim NB(C)}a_F^\bold v \bold v'_F}{\displaystyle\sum_{F\sim NB(C)}a_F^\bold v }
在前面的推導中,係數 a C v a_C^\bold v 可展開爲
a C v = 1 λ v ( a C v F N B ( C ) a F v + f n b ( C ) m ˙ f ) a_C^\bold v=\frac{1}{\lambda^\bold v}\left( a_C^\bold v- \sum_{F\sim NB(C)}a_F^\bold v + \sum_{f\sim nb(C)}\dot m_f\right)
其在穩態解的限制下,簡化爲
a C v = 1 λ v F N B ( C ) a F v a_C^\bold v=-\frac{1}{\lambda^\bold v}\sum_{F\sim NB(C)}a_F^\bold v
上式代入到上上上式,速度修正可近似爲
v C F N B ( C ) a F v v F λ v a C v a C v v C F N B ( C ) a F v v F λ v \bold v_C'\approx -\frac{\displaystyle\sum_{F\sim NB(C)}a_F^\bold v \bold v'_F}{\lambda^\bold v a_C^\bold v} \Rightarrow a_C^\bold v\bold v_C'\approx -\frac{\displaystyle\sum_{F\sim NB(C)}a_F^\bold v \bold v'_F}{\lambda^\bold v }
結合前面的式子 λ p = 1 + F N B ( C ) a F v v F a C v v C \lambda^p=1+\dfrac{\displaystyle\sum_{F\sim NB(C)}a_F^\bold v \bold v'_F}{a_C^\bold v \bold v'_C} ,得
λ p 1 λ v \lambda^p\approx 1-\lambda^\bold v
經驗代表使用知足上式的欠鬆弛因子的SIMPLE算法的性能,與SIMPLEC算法,是類似的。

9 Rhie-Chow插值對各類項的處理

9.1 欠鬆弛項的處理

基於Rhie-Chow插值,使用同位網格所獲得的解是依賴於動量方程中的欠鬆弛因子的。爲了消除該依賴性,須要對Rhie-Chow插值作修改,欠鬆弛動量方程爲
1 λ v a C v v C = F N B ( C ) a F v v F + b C v V C p C + ( 1 λ v λ v ) a C v v C ( n ) \frac{1}{\lambda^\bold v}a_C^\bold v \bold v_C = -\sum_{F\sim NB(C)}a_F^\bold v \bold v_F + \bold b_C^\bold v-V_C\nabla p_C+\left(\frac{1-\lambda^\bold v}{\lambda^\bold v}\right)a_C^\bold v\bold v_C^{(n)}
其中 b C v \bold b_C^\bold v 是動量方程中的源項,從中可提取出壓力和欠鬆弛源項, v C ( n ) \bold v_C^{(n)} 是單元形心 C C 處速度的前次迭代值。對應的欠鬆弛動量方程,使用交錯網格形式,爲
1 λ v a f v v f = n b N B ( C ) a n b v v n b + b f v V f p f + ( 1 λ v λ v ) a f v v f ( n ) \frac{1}{\lambda^\bold v}a_f^\bold v \bold v_f = -\sum_{nb\sim NB(C)}a_{nb}^\bold v \bold v_{nb} + \bold b_f^\bold v-V_f\nabla p_f+\left(\frac{1-\lambda^\bold v}{\lambda^\bold v}\right)a_f^\bold v\bold v_f^{(n)}
經過構建單元面上的僞動量方程,Rhie-Chow插值方法模仿了交錯網格方程。正是因爲該特性,Rhie-Chow才能成功應用。所以做爲指導準則,對Rhie-Chow插值的任何改動的衡量標準應該是,改動方程是否和交錯網格方程形式相似。所以,使用Rhie-Chow插值的欠鬆弛方程的形式應該是
1 λ v a f v v f = n b N B ( C ) a n b v v n b + b f v V f p f + ( 1 λ v λ v ) a f v v f ( n ) \frac{1}{\lambda^\bold v}\overline{a_f^\bold v} \bold v_f = -\overline{\sum_{nb\sim NB(C)}a_{nb}^\bold v \bold v_{nb} + \bold b_f^\bold v}-\overline{V_f}\nabla p_f+\left(\frac{1-\lambda^\bold v}{\lambda^\bold v}\right)\overline{a_f^\bold v}\bold v_f^{(n)}
右端項的第一項平均的獲取方法爲
n b N B ( C ) a n b v v n b + b f v = g C ( F N B ( C ) a F v v F + b C v ) g F ( N N B ( C ) a N v v N + b F v ) = g C [ 1 λ v a C v v C + V C p C ( 1 λ v λ v ) a C v v C ( n ) ] + g F [ 1 λ v a F v v F + V F p F ( 1 λ v λ v ) a F v v F ( n ) ] = 1 λ v a f v v f + V f p f ( 1 λ v λ v ) a f v v f ( n ) \begin{aligned} -\overline{\sum_{nb\sim NB(C)}a_{nb}^\bold v \bold v_{nb} + \bold b_f^\bold v} =& -g_C\left(\sum_{F\sim NB(C)}a_{F}^\bold v \bold v_{F} + \bold b_C^\bold v\right) -g_F\left(\sum_{N\sim NB(C)}a_{N}^\bold v \bold v_{N} + \bold b_F^\bold v\right) \\ =&g_C\left[\frac{1}{\lambda^\bold v}a_C^\bold v \bold v_C +V_C\nabla p_C-\left(\frac{1-\lambda^\bold v}{\lambda^\bold v}\right)a_C^\bold v\bold v_C^{(n)}\right] + \\ &g_F\left[\frac{1}{\lambda^\bold v}a_F^\bold v \bold v_F +V_F\nabla p_F-\left(\frac{1-\lambda^\bold v}{\lambda^\bold v}\right)a_F^\bold v\bold v_F^{(n)}\right] \\ =&\frac{1}{\lambda^\bold v}\overline{a_f^\bold v \bold v_f} +\overline{V_f\nabla p_f}-\left(\frac{1-\lambda^\bold v}{\lambda^\bold v}\right)\overline{a_f^\bold v\bold v_f^{(n)}} \end{aligned}
上式代入到上上式中,可得單元面速度 v f \bold v_f 的擴展Rhie-Chow插值
v f = v f D f v ( p f p f ) + ( 1 λ v ) ( v f ( n ) v f ( n ) ) \bold v_f=\overline{\bold v_f}-\overline{\bold D_f^\bold v}(\nabla p_f-\overline{\nabla p_f})+ (1-\lambda^\bold v)(\bold v_f^{(n)}-\overline{\bold v_f^{(n)}})
沒有計及欠鬆弛效應對面速度的影響,所致使的解對欠鬆弛因子的依賴性。

9.2 瞬態項的處理

當使用後向Euler瞬態格式求解瞬態問題時,離散動量方程爲
a C v v C = F N B ( C ) a F v v F + b C v V C p C + a C v C a_C^\bold v \bold v_C = -\sum_{F\sim NB(C)}a_F^\bold v \bold v_F + \bold b_C^\bold v-V_C\nabla p_C+a_C^\circ\bold v_C^\circ
其中 b C v \bold b_C^\bold v 是動量方程中的源項,從中可提取出壓力和瞬態源項。交錯網格變量構架下的等效方程形式以下
a f v v f = n b N B ( f ) a n b v v n b + b f v V f p f + a f v f a_f^\bold v \bold v_f = -\sum_{nb\sim NB(f)}a_{nb}^\bold v \bold v_{nb} + \bold b_f^\bold v-V_f\nabla p_f+a_f^\circ\bold v_f^\circ
使用Rhie-Chow插值方法,僞單元面方程構建爲
a f v v f = n b N B ( C ) a n b v v n b + b f v V f p f + a f v f \overline{a_f^\bold v} \bold v_f = -\overline{\sum_{nb\sim NB(C)}a_{nb}^\bold v \bold v_{nb} + \bold b_f^\bold v}-\overline{V_f}\nabla p_f+\overline{a_f^\circ}\bold v_f^\circ
右端項的第一項平均的獲取方法爲
n b N B ( C ) a n b v v n b + b f v = g C ( F N B ( C ) a F v v F + b C v ) g F ( N N B ( C ) a N v v N + b F v ) = g C [ a C v v C + V C p C a C v C ] + g F [ a F v v F + V F p F a F v F ] = a f v v f + V f p f a f v f \begin{aligned} -\overline{\sum_{nb\sim NB(C)}a_{nb}^\bold v \bold v_{nb} + \bold b_f^\bold v} =& -g_C\left(\sum_{F\sim NB(C)}a_{F}^\bold v \bold v_{F} + \bold b_C^\bold v\right) -g_F\left(\sum_{N\sim NB(C)}a_{N}^\bold v \bold v_{N} + \bold b_F^\bold v\right) \\ =&g_C\left[a_C^\bold v \bold v_C +V_C\nabla p_C-a_C^\circ\bold v_C^\circ\right] + \\ &g_F\left[a_F^\bold v \bold v_F +V_F\nabla p_F-a_F^\circ\bold v_F^\circ\right] \\ =&\overline{a_f^\bold v \bold v_f} +\overline{V_f\nabla p_f}-\overline{a_f^\circ\bold v_f^\circ} \end{aligned}
可得單元面速度 v f \bold v_f 的擴展Rhie-Chow插值
v f = v f D f v ( p f p f ) + a f D f V f ( v f v f ) \bold v_f=\overline{\bold v_f}-\overline{\bold D_f^\bold v}(\nabla p_f-\overline{\nabla p_f})+ \frac{\overline{a_f^\circ\bold D_f^\circ}}{V_f}(\bold v_f^{\circ}-\overline{\bold v_f^{\circ}})
沒有計及非定常項對面速度的影響,所致使的解對時間步的依賴性,以及小時間步的振盪特性。該修正僅對一階Euler離散格式有效,對於更加精確的時間離散格式,可遵循一樣的原則推導相似的修正。

9.3 體積力項的處理

當在交錯網格上處理體積力的時候,體積力項的架構和壓力梯度項的架構是同樣的。在同位網格狀況下,體積力、速度、動量變量是在相同位置上計算的。這樣,爲了讓體積力的離散保持和壓力一樣的架構,須要把體積力作從新分配。離散動量方程爲
a C v v C = F N B ( C ) a F v v F + b C v V C p C + V C B C v a_C^\bold v \bold v_C = -\sum_{F\sim NB(C)}a_F^\bold v \bold v_F + \bold b_C^\bold v-V_C\nabla p_C+V_C\overline{\overline{\bold B_C^\bold v}}
其中雙上劃線代表兩個平均步驟,第一個平均步驟是計算在單元面處的 B C v \overline{\bold B_C^\bold v}
B f v = g C B C v + ( 1 g C ) B F v \overline{\bold B_f^\bold v}=g_C\bold B_C^\bold v+(1-g_C)\bold B_F^\bold v
以下圖所示
在這裏插入圖片描述

第二步是對這些面值進行平均,算得單元形心值,以下圖所示
在這裏插入圖片描述

單元形心的平均值的推導,最好是經過考慮以下圖所示的一維問題來實現。
在這裏插入圖片描述

對於靜止流體,壓力梯度應該和體積力平衡,推出
0 = p f + B f v 0=-\nabla p_f+\bold B_f^\bold v
展開上述方程,可得在點 C C F F 壓力間的關係
p C = p F + B f δ y p_C=p_F+B_f\delta y
或者更加通有的形式
p C = p F + B f d C F p_C=p_F+\bold B_f\cdot \bold d_{CF}
其中 B f B_f B f \bold B_f 的幅值,好比重力加速度狀況下是
B f = ρ f g B_f=\rho_f g
對於不可壓縮流動,體積力中密度隨溫度的變化是用Boussinesq假設來近似的。

再次對於單元 C C ,壓力梯度應該等於體積力,即
0 = p C + B C v p C = B C v 0=-\nabla p_C+\bold B_C^\bold v \Rightarrow \nabla p_C=\bold B_C^\bold v
然而單元 C C 的壓力梯度是這樣算得的
p C = f p f S f V C = f ( g C p C + ( 1 g C ) p F ) S f V C \begin{aligned} \nabla p_C &= \frac{\displaystyle\sum_f p_f \bold S_f}{V_C} \\ &= \frac{\displaystyle\sum_f (g_Cp_C+(1-g_C)p_F) \bold S_f}{V_C} \end{aligned}
p C = p F + B f d C F p_C=p_F+\bold B_f\cdot \bold d_{CF} 代入,有
p C = f ( g C ( p F + B f v d C F ) + ( 1 g C ) p F ) S f V C = f p F S f V C + f g C ( B f v d C F ) S f V C = p F f S f V C = 0 + f g C ( B f v d f ) S f V C = f g C ( B f v d f ) S f V C = B C v \begin{aligned} \nabla p_C &= \frac{\displaystyle\sum_f (g_C(p_F+\overline{\bold B_f^\bold v}\cdot \bold d_{CF})+(1-g_C)p_F) \bold S_f}{V_C} \\ &=\frac{\displaystyle\sum_f p_F\bold S_f}{V_C}+ \frac{\displaystyle\sum_f g_C(\overline{\bold B_f^\bold v}\cdot \bold d_{CF})\bold S_f}{V_C} \\ &=p_F\underbrace{\frac{\displaystyle\sum_f \bold S_f}{V_C}}_{=0}+ \frac{\displaystyle\sum_f g_C(\overline{\bold B_f^\bold v}\cdot \bold d_{f})\bold S_f}{V_C} \\ &= \frac{\displaystyle\sum_f g_C(\overline{\bold B_f^\bold v}\cdot \bold d_{f})\bold S_f}{V_C} \\ &= \overline{\overline{\bold B_C^\bold v}} \end{aligned}
這代表
B C v = f g C ( B f v d f ) S f V C \overline{\overline{\bold B_C^\bold v}} = \frac{\displaystyle\sum_f g_C(\overline{\bold B_f^\bold v}\cdot \bold d_{f})\bold S_f}{V_C}
第二個要求是單元面速度與交錯網格狀況下的方程相似
a f v v f = n b N B ( C ) a n b v v n b + b f v V f p f + V f B f v \overline{a_f^\bold v} \bold v_f = \overline{-\sum_{nb\sim NB(C)}a_{nb}^\bold v \bold v_{nb} + \bold b_f^\bold v}-\overline{V_f}\nabla p_f+\overline{V_f\bold B_f^\bold v}
其中 b C v \bold b_C^\bold v 是動量方程中的源項,從中可提取出壓力和體積力項。右端項中的第一項爲
n b N B ( C ) a n b v v n b + b f v = g C ( F N B ( C ) a F v v F + b C v ) g F ( N N B ( C ) a N v v N + b F v ) = g C [ a C v v C + V C p C V C B C v ] + g F [ a F v v F + V F p F V F B F v ] = a f v v f + V f p f V f B f v \begin{aligned} -\overline{\sum_{nb\sim NB(C)}a_{nb}^\bold v \bold v_{nb} + \bold b_f^\bold v} =& -g_C\left(\sum_{F\sim NB(C)}a_{F}^\bold v \bold v_{F} + \bold b_C^\bold v\right) -g_F\left(\sum_{N\sim NB(C)}a_{N}^\bold v \bold v_{N} + \bold b_F^\bold v\right) \\ =&g_C\left[a_C^\bold v \bold v_C +V_C\nabla p_C-V_C\overline{\overline{\bold B_C^\bold v}}\right] + \\ &g_F\left[a_F^\bold v \bold v_F +V_F\nabla p_F-V_F\overline{\overline{\bold B_F^\bold v}}\right] \\ =&\overline{a_f^\bold v \bold v_f} +\overline{V_f\nabla p_f}-\overline{V_f\overline{\overline{\bold B_f^\bold v}}} \end{aligned}

相關文章
相關標籤/搜索