すっかり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の
comfortfunctionObject を使用- 出力される場:
PMV:-3(寒い)〜 +3(暑い)PPD:%(不快と感じる人の割合)DR:ドラフト感度(寒い空気の風当たり)
- 出力される場:
- 条件パラメータ:
- 着衣量(clo):0.6
- 代謝量(met):1.2
- 放射温度:壁温度と同じ
- 湿度:50%

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

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