OpenFOAM【simpleFoamとrhosimpleFoamの違い】
OpenFoamのsimpleFoamとrhosimpleFoamを見ながら、圧縮性流体と非圧縮性流体について考える回です。
それぞれの違い
- simpleFoam:"incompressible"(=非圧縮性)なソルバ
- rhosimpleFoam:"compressible"(=圧縮性)なソルバ
数値流体力学の観点からの比較(非圧縮性流体とは?)
圧縮性・非圧縮性の違いはこの辺とかで。
一番大切な点は非圧縮の仮定のもとでは速度の発散が0になること。
上式は連続の式で、密度が消えさっています。物理的には密度が一定と等価です。
最終的に、以下の変数群と方程式群を解くことになります。
- 圧縮性流体
- 方程式:連続の式、運動方程式
- 変数:速度u、圧力p
- 非圧縮性流体
- 方程式:連続の式、運動方程式、エネルギー保存式、圧力・密度に関係する式(理想気体の状態方程式とか)
- 変数:速度u、圧力p、エネルギーE(エンタルピーH)、密度ρ
OpenFoamでの違い
それぞれのメインのループはこんな違いです。
simpleFoam
while (simple.loop()) { Info<< "Time = " << runTime.timeName() << nl << endl; // --- Pressure-velocity SIMPLE corrector { #include "UEqn.H" #include "pEqn.H" } laminarTransport.correct(); turbulence->correct(); runTime.write(); runTime.printExecutionTime(Info); }
rhosimpleFoam
while (simple.loop()) { Info<< "Time = " << runTime.timeName() << nl << endl; // Pressure-velocity SIMPLE corrector #include "UEqn.H" #include "EEqn.H" if (simple.consistent()) { #include "pcEqn.H" } else { #include "pEqn.H" } turbulence->correct(); runTime.write(); runTime.printExecutionTime(Info); }
simpleFoamと比較すると、rhosimpleFoamには"EEqn.H"が追加されています。EEqn.Hはエネルギー(エンタルピー)に関しての収支を解いているようで、前述の通り速度の発散が仮定されていないための数学的な要請です(多分)。
- simpleFoam
- 方程式:UEqn、pEqn
- 変数:U,p
- rhosimpleFoam
- 方程式:UEqn、pEqn(pcEqn)、EEqn
- 変数:U,p,he,rho
方程式の数が一つ少ないように見えますが、どっかで計算しているハズです。