OpenFOAM は流体シミュレーションのためのオープンソースソフトウェアであり、
非圧縮性流体 と 圧縮性流体 のどちらも計算することができます。
しかし、それぞれのモデルでは設定方法や計算手順が異なるため、正しく設定する必要があります。
本記事では、非圧縮性流体と圧縮性流体の違い、設定ファイルの詳細 について詳しく解説します。
1. 非圧縮性流体と圧縮性流体の違い
OpenFOAM の設定と違い
項目 | 非圧縮性流体(incompressible) | 圧縮性流体(compressible) |
密度と動粘度 | どちらも一定( = const) | 変化する |
密度と動粘度の指定ファイル | constant/transportProperties | 密度constant/thermophysicalProperties 動粘度 constant/transportProperties |
密度と動粘度の計算 | 一定値を設定 | 密度:状態方程式 (例: 理想気体 ρ = p / RT )動粘度:温度依存のモデル (例: Sutherland の式) |
圧力方程式 | p_rgh (動圧)を使用 | p (全圧)を使用 |
熱伝導率 | 基本的に不要。 ※buoyantBoussinesqSimpleFoamは使用する | kを使用 constant/transportPropertiesで設定 |
エネルギー 方程式 | 解かない(速度・圧力のみ) | 必要(温度・エンタルピーを計算) 熱伝導率が必要。 |
ソルバー | icoFoam , pisoFoam , simpleFoam | rhoPimpleFoam , sonicFoam |
設定ファイルの違い | constant/transportProperties のみ使用 | constant/thermophysicalProperties を追加 |
状態方程式 | なし(ρは一定) | perfectGas , PengRobinsonGas など |
2. CFL 数(Co値)と Δt の関係
CFL 数(Courant 数)は、数値計算の安定性を決定する重要な指標です。時間の刻みをコンロトールすることが出来るのです。

C >1・・・不安定(計算が発散するので1以上ににはしない)
C =1・・・ギリギリ安定を保つ
C<<1・・・安定するが、計算コストが増大(計算処理の時間がかかる)
CFL 数を制御するためには、system/controlDict
で maxCo
を設定します。
adjustTimeStep yes;
maxCo 0.5;
圧縮性流体の場合は、エネルギー方程式も考慮するため maxAlphaCo
も設定します。
maxAlphaCo 0.3;
設定ファイルの例:system/controlDict
application simpleFoam;
startFrom latestTime;
startTime 0;
endTime 100;
deltaT 0.01;
writeControl timeStep;
writeInterval 100;
adjustTimeStep yes; // Courant 数に応じて Δt を調整
maxCo 0.5; // 最大 Courant 数
Courant 数との関係
adjustTimeStep yes;
を設定すると、CFL 数に応じて Δt
が自動調整されます。
maxCo 0.5;
にすると、Courant 数が 0.5 を超えないように Δt
が制御されます。
3. 密度と動粘度の計算方法
(1) 非圧縮性流体の密度と動粘度
非圧縮性流体では、密度 ρ
と動粘度νは一定と仮定され、どちらもconstant/transportProperties
に設定します。
水(20℃)の場合
transportModel Newtonian;
nu [0 2 -1 0 0 0 0] 1.0e-6; // 水の動粘性 (m²/s)
rho 1000; // 水の密度 (kg/m³)
空気(20℃)が温度圧力が一定とする場合(本当は圧縮流体ですが、非圧縮流体とする場合)
transportModel Newtonian;
nu [0 2 -1 0 0 0 0] 1.5e-5; // 空気の動粘性 (m²/s)
rho 1.2; // 空気の密度 (kg/m³)
rho
(密度, kg/m³)を 直接指定
nu
(動粘性係数, m²/s)も合わせて指定(ν = μ / ρ
)
(2) 圧縮性流体の密度と動粘度
圧縮性流体では、密度 と 動粘度 は異なるファイルで設定されます。
密度の設定
密度は圧力 p
と温度 T
の関数として計算され、状態方程式によって決まります。
設定するファイルは、constant/thermophysicalProperties
です。
(a) 理想気体の状態方程式

constant/thermophysicalProperties
equationOfState perfectGas;
R 287;
(b) Peng-Robinson 状態方程式(高圧ガス)

constant/thermophysicalProperties
equationOfState PengRobinsonGas;
a 1.36;
b 0.034;
以下補足です。
thermophysicalPropertiesの中にあるmixtureとは何か?
mixture
は、流体の種類を定義するためのパラメータで、単一流体 or 混合気体 を決めます。
単一成分の場合
mixture pureMixture; // 単一成分流体
複数成分の混合流体(例: 燃焼ガス)の場合
mixture multiComponentMixture; // 複数成分の混合流体
動粘度の設定
動粘度 μ
は 温度依存 するため、constant/transportProperties
で設定します。
Sutherland の式
Sutherland の式を用いて動粘度 μ(T)
を計算します。

計算例(20℃ = 293K のときの動粘度)

この設定により、圧縮性流体の動粘度
μ
は温度 T
から計算されます!
constant/transportProperties
transportModel sutherland;
sutherlandCoeffs
{
As 1.458e-06; // Sutherland の粘性係数(kg/(m·s·K^0.5))
Ts 110.4; // Sutherland の基準温度(K)
}
設定の意味
transportModel sutherland;
→ Sutherland の式を使用して動粘度μ(T)
を計算As = 1.458e-06;
→ 空気の基準動粘度係数 [kg/(m·s·K^0.5)]Ts = 110.4;
→ Sutherland の基準温度 [K]
4. エネルギー方程式
非圧縮性流体では密度が一定のため、圧力方程式のみを解きますが、圧縮性流体では密度や温度の影響を考慮するため、エネルギー方程式を解く必要があります。
エネルギー方程式は、圧縮性流体において温度やエンタルピーの計算に使用されます。

OpenFOAM では h
(比エンタルピー)を計算する場合、次のように設定します。
thermoType
{
type hePsiThermo;
mixture pureMixture;
transport sutherland;
thermo hConst;
equationOfState perfectGas;
specie specie;
energy sensibleEnthalpy;
}
equationOfState
{
R 287.0; // 理想気体定数 [J/(kg·K)]
}
thermodynamics
{
Cp 1005; // 定圧比熱 [J/(kg·K)]
Hf 0; // 標準エンタルピー(基準値)
}
エネルギー方程式を解く理由
- 圧縮性流体では温度変化が密度・圧力に影響 するため。
- 高速流れや熱流体の計算にはエンタルピーが必要 だから。
5.熱伝導率の設定
熱伝導率kは、constant/transportPropertiesで設定します。
設定例:constant/transportProperties
transportModel sutherland;
sutherlandCoeffs
{
As 1.458e-06;
Ts 110.4;
}
thermalConductivity
{
k 0.025; // 熱伝導率 [W/(m·K)] k = 0.025; → 空気の熱伝導率
}
6. 圧力の計算と p
vs p_rgh
の違い
(1) 圧力方程式の計算
圧力ポアソン方程式を解くことで、圧力を更新します。
OpenFOAM では次のように実装されます。
fvScalarMatrix pEqn
(
fvm::laplacian(rAU, p) == fvc::div(phi)
);
pEqn.solve();
(2) p
と p_rgh
の違い
圧力変数 | 説明 |
p | 全圧(静圧 + 動圧) |
p_rgh | 動圧(流体の運動エネルギーを考慮した圧力) |
p_rgh
は、重力が支配的な流れ(例: 船舶・海洋工学)で使用されることが多い!