第46章 reactingTwoPhaseEulerFoam (2)
46.2 相建模
相建模庫的代碼庫是封裝、抽象和通用編程原理的一個很好的例子。
46.2.1 相模型類
有許多相模型模板類,每個模板類都實現了多相建模的不同方面,例如動量傳遞、傳熱等。因此,對于特定的模型,必須以類似于拉格朗日粒子模型的方式嵌套這些模板,因為拉格朗日粒子模型是通過將模板類相互插入來構建的。
提供某個方面建模的類模板也可以有相反的雙重實現。這允許通過在編譯時選擇一組特定的模板來構建包含或不包含特定方面的相模型。這種雙重實現的一個例子是反應。相可以是反應相,也可以是惰性相。因此,有兩個處理反應的模板類:模板InertPhaseModel和ReactionPhaseModel。模板類的名稱明顯的暗示了每個類如何實現反應。
*phaseModel
這是所有相模型的基類,它定義了相的行為。這個類本身是從類volScalarField派生而來的。因此,相模型是其自身的體積分數場。除了相的索引、名稱和指向相直徑模型的指針之外,這個類只包含很少的數據。
然而,這個類定義了大量的抽象方法,各種模板類都需要實現這些方法。
*MovingPhaseModel
該類模板提供了移動相的功能和數據,即它包含速度場和通量場。這個類還提供了相的動量方程。這個類還擁有一個指向湍流模型的指針。
1 template < class BasePhaseModel >
2 Foam :: tmp < Foam :: fvVectorMatrix >
3 Foam :: MovingPhaseModel < BasePhaseModel >:: UEqn ()
4 {
5 const volScalarField & alpha = * this ;
6 const volScalarField & rho = this - > thermo () . rho () ;
7
8 return
9 (
10 fvm :: ddt ( alpha , rho , U_ )
11 + fvm :: div ( alphaRhoPhi_ , U_ )
12 + fvm :: SuSp (- this - > continuityError () , U_ )
13 + this -> fluid () . MRF () . DDt ( alpha * rho , U_ )
14 + turbulence_ -> divDevRhoReff ( U_ )
15 );
16 }
清單305:在類MovingPhaseModel中構造運動相的動量方程
該類模板提供的動量方程與可壓縮求解器的動量方程驚人地相似。如果我們比較清單305和306,我們會發現清單305中的五項中的四項和清單306動量方程相似。唯一的區別是,多相動量方程的項包含體積分數場α,其在單相求解器中取統一值1。
1 tmp < fvVectorMatrix > tUEqn
2 (
3 fvm :: ddt ( rho , U)
4 + fvm :: div ( phi , U)
5 + MRF . DDt ( rho , U)
6 + turbulence -> divDevRhoReff (U)
7 ==
8 fvOptions ( rho , U)
9 );
清單306:以rhoPimpleFoam為例,構造可壓縮單相求解器的動量方程
當求解器讀取并創建選項列表時,相模型會忽略任何選項的存在。因此,在相模型中沒有對fvOptions框架的調用。這是求解器處理fvOptions框架中選項的任務。
*AnisothermalPhaseModel
該類模板提供了實現能量傳遞所需的數據和方法,即能量方程。
*IsothermalPhaseModel
該類和AniothermalPhaseModel基本對等,它以瑣碎的方式實現了與熱能傳輸相關的所有抽象方法。
*MultiComponentPhaseModel
該模板類提供了與一個相中的物質遷移相關的數據和方法,例如由幾種氣體組成的氣相。
*PurePhaseModel
該模板類用于由單種物質組成的相。因此,不需要求解物質遷移方程。這個類模板以一種繁瑣的方式實現了基類phaseModel中定義的所有抽象方法,例如,當調用方法phaseModel::Y()時,它返回一個空的質量分數列表,該列表旨在返回物質質量分數。
*InertPhaseModel
這個模板類用于非反應階段,因此,對于熱釋放速率和質量傳遞速率,它返回零。
*ReactingPhaseModel
該模板類用于反應相。因此,熱釋放速率和傳質速率通過后面的反應模型計算并返回。
未完待續~~
文章來源:OpenFOAM
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















