すっかりOpenFoamにのめり込んでしまっています。
次に行うのは、部屋の自然換気の計算です。
今回はOpenFOAM(v2412)を使って、室内の自然換気と快適性評価(PMV, PPD, 空気齢など)をやってみた。
モデルはSTLで作った「壁と屋根に開口を持つ室内」。窓から空気が入って、天井の開口から抜けていくイメージ。
ソルバーは buoyantSimpleFoam
を使用。定常状態の熱流体解析を目指します。
CFDだけで「空気の流れ」+「温度分布」+「快適かどうか?」まで全部見られるのは面白いです。
使用モデルと条件

- モデル:STLファイル3種(壁・inlet・outlet)
- wall.stl(壁・床・天井)
- inlet.stl(壁の通気口)
- outlet.stl(屋根の排気口)
- 室内サイズ例:5m × 5m × 3m(だいたい)
- 条件設定:真夏の猛暑を想定
- 壁温度:315 K(約42℃)
- 外気温:310 K(約37℃)
- 窓からの流入温度:25℃の冷風
- 重力方向:-Z(g = (0 0 -9.81))
- 乱流モデル:
kOmegaSST
- Boussinesq近似:使用(密度差による浮力だけ考慮)
境界条件の設定メモ
0/T
(温度)- wall:
fixedValue 315;
- inlet:
fixedValue 298;
outlet:type zeroGradient;
- wall:
0/U
(速度)- wall:
noSlip;
- inlet:
fixedValue uniform (0 0.5 0);
- outlet:pressureInletOutletVelocity;
- wall:
0/p_rgh
(静水圧補正圧力)- wall:
fixedFluxPressure;
- outlet:
prghTotalHydrostaticPressure;
- wall:
0/alphat
:calculated
(内部は 1e-5、壁は,compressible::alphatJayatillekeWallFunction
)
数値安定化の工夫
- 速度制限(fvOptions)
velocityDampingConstraint
でUMax 10;
- 数値発散を防止しつつ物理的な上限も保てる
- 温度制限(fvOptions)
limitTemperature
でmin 273; max 330;
- 上昇しすぎや低下しすぎをクランプ(冷えすぎて全体280K固定化 → 起きる)
快適性評価(PMV/PPD/DR)
- OpenFOAMの
comfort
functionObject を使用- 出力される場:
PMV
:-3(寒い)〜 +3(暑い)PPD
:%(不快と感じる人の割合)DR
:ドラフト感度(寒い空気の風当たり)
- 出力される場:
- 条件パラメータ:
- 着衣量(clo):0.6
- 代謝量(met):1.2
- 放射温度:壁温度と同じ
- 湿度:50%

換気効率評価(空気齢)
- がっつりチュートリアルを参考にしています。
age
functionObject を使用(OpenFOAM v2412以降で標準装備)- 年齢0(fresh air)がinletから入り、1秒ごとに「1歳とる」
- 滞留してる空気は「年を取っている」→ 換気効率が悪いエリアがわかる
age
フィールドとして出力(ParaViewで等値面で見やすい)

収束と計算時間短縮テクニック
- スキーム:
div(phi,U)
→ div(phi,U) bounded Gauss upwind;
- ソルバー:
p_rgh
→GAMG
U
,T
→smoothSolver
(relTol 0.01)
- fvSolution:
SIMPLE { consistent yes; }
→ SIMPLEC方式で加速nNonOrthogonalCorrectors 2;
まとめ
- OpenFOAMで自然換気 + 快適性評価が一通りできました。
- STLジオメトリでも functionObject をうまく使えば、空気齢やPMV/PPD/DRまで評価できます。
- 温度や速度が暴走しないように
fvOptions
で制御するのがポイントですね。 - ParaViewでの流線・温度断面・空気齢等値面表示がわかりやすくて超便利です。
- 次は条件を変えて「通風 vs 自然換気の比較」や、「家具あり/なし」の差も見ることが出来そうです。