PowerPoint プレゼンテーション

OpenFOAM勉強会 for beginner
進捗報告
2011年10月22日
髙橋
1
本日のお題:空気齢
部屋の空気
窓から流入してから
何秒経っているか?
空気齢=1秒:
新鮮な空気
空気齢=20秒:
よどんだ空気
3m/s
流速(m/s)
空気齢(秒)
2
空気齢の算出
•パッシブスカラー方程式を使用
•部屋内に一様な汚染質生成項を与えて汚染質の濃度分布を計算
•汚染質濃度から空気齢を算出
汚染質の算出方程式
  ( C )
   ( vC )    ( DC )  q

 t

C:汚染質濃度
  C
3/s)
q:一様汚染質発生(kg/m

q

τ:空気齢(s)
S.Kato, S.Murakami, H.Kobayashi
NEW SCALES FOR EVALUATING VENTILATION EFFICIENCY AS
AFFECTED BY SUPPLY AND EXHAUST OPENINGS BASED ON SPATIAL
DISTRIBUTION OF CONTAMINANT,
3
International Symosium on Room Air Convection and Ventilation Effectiveness
今回の実施内容
simpleFOAMをベースにして空気齢を算出するソルバ
“simpleAgeFoam”を作成
【作成手順】
(I)simpleFoamにパッシブスカラーの方程式を追加
(II)ソース項を追加
(III)空気齢の算出式を追加
(*)これまでの勉強会 for beginnnerや講習会の
情報を活用させていただきました
4
元の方程式の書き換え
OpenFOAMのsimpleFoamソルバの記述に合わせて
元の方程式の記述形式を修正
質量保存の
記述
  ( C )
   ( vC )    ( DC )  q

 t

  C
q:汚染質発生量(kg/m3/s)

q

ρで割る
体積保存の
記述
 C
 t    ( vC )    ( DC )  q'

  C
q’=q/ρ:汚染質発生量(1/s)

q'
5
createFields.H (1)
・・・
Info<< “Reading field C\n” << endl;
volScalarField C
//汚染質濃度CのFieldを定義
(
IOobject
(
"C",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
【パッシブスカラーの追加 参考資料】
);
OpenFOAM非圧縮性流体解析
・・・
演習シリーズ 第8回(中級講習)
6
createFields.H (2)
・・・
singlePhaseTransportModel laminarTransport(U, phi);
dimensionedScalar Sc(laminarTransport.lookup(“Sc”));
dimensionedScalar Sct(laminarTransport.lookup(“Sct”));
dimensionedScalar q(laminarTransport.lookup("q"));
//新規追加した変数の読み込み
・・・
7
createFields.H (3)
・・・
dimensionedScalar q(laminarTransport.lookup("q"));
volScalarField tau //空気齢τのFieldを定義
(
IOobject
(
"tau",
runTime.timeName(),
mesh,
IOobject::NO_READ,
//τは汚染質濃度Cから算出
IOobject::AUTO_WRITE //するのでNO_READでOK
),
C/q //τの計算式
);
8
・・・
simpleAgeFoam.C (simpleFoam.Cをリネーム・追記)
・・・
Info<< "\nStarting time loop\n" << endl;
while (simple.loop())
{
Info<< "Time = " << runTime.timeName() << nl << endl;
p.storePrevIter();
// --- Pressure-velocity SIMPLE corrector
{
#include "UEqn.H"
#include "pEqn.H“
#include "CEqn.H“
// CEqn.Hの行を追加
}
・・・
【パッシブスカラーの追加 参考資料】
9
OpenFOAM非圧縮性流体解析演習シリーズ 第8回(中級講習)
CEqn.H
{
volScalarField diffEff("diffEff",
turbulence->nu()/Sc + turbulence->nut()/Sct);
fvScalarMatrix CEqn
(
fvm::div(phi, C)
- fvm::laplacian(diffEff, C) //汚染質濃度Cの輸送方程式
== q
//一様な汚染質生成項
);
CEqn.relax();
CEqn.solve();
tau=C/q;
//空気齢の算出式
}
【ソース項の追加 参考資料】
OpenFOAM勉強会 for beginner 第9回
実践ソルバー改良 scalarTransportFoamの改良事例(柴田)
10
Make/files
simpleAgeFoam.C
EXE = $(FOAM_USER_APPBIN)/simpleAgeFoam
【パッシブスカラーの追加 参考資料】
OpenFOAM非圧縮性流体解析演習シリーズ 第8回(中級講習)
ソースの書き換えは以上で終わり
11
解析対象
玄関ドア
風
5m/s
南窓
北窓
例題:集合住宅3LDK(髙橋家)
部屋の換気挙動を解析
12
メッシュ作成
google sketchupで
モデル作成
STLエクスポート
snappyHexMesh
71058メッシュ
【google sketchupによるモデリング&STL変換 参考資料】
OpenFOAM勉強会 for beginner 第5回、題6回
テーマ進捗報告(小縣)
13
境界条件
南側
inlet(5m/s)
北側
outlet(0Pa)
window_nw_room
window_sw_room
door_room
window_se_room
window_ne_room
(*)door_roomは
開と閉の2条件
14
境界条件&設定ファイルの準備
【手順】
•とりあえずsimpleAgeFoamを実行
•エラーメッセージを見て、不足しているファイル/記述を特定
•よく似た前後の記述を真似して書く
15
0/C (境界条件)
--> FOAM FATAL IO ERROR:
cannot find file
file: /home/k-takahashi/OpenFOAM/k-takahashi-2.0.1/run/
test/0/C at line 0.
boundaryField
・・・
“window_n.*” //流出の窓(2箇所)
{
type
zeroGradient; //ゼロ勾配
}
“window_s.*” //流入の窓(2箇所)
{
type
fixedValue;
value
uniform 0;
//流入窓は汚染質濃度=0
}
・・・
16
(参考)境界条件の正規表現表示
boundaryField
{
window_ne_room
{
type
zeroGradient;
}
window_nw_room
{
type
zeroGradient;
}
}
boundaryField
{
“window_n.*”
//*.(ドットコメ)は任意の文字列
{
type
zeroGradient;
}
}
複数の境界条件を
まとめて記述
正規表現の他の書き方例 (よく使いそうなもの)
“window_ne_room|window_nw_room” (縦棒:もしくは)
“window_n._room”
(ドット:任意の一文字)
17
constant/transportProperties
--> FOAM FATAL IO ERROR:
keyword Sc is undefined in dictionary "/home/k-takahashi/
OpenFOAM/k-takahashi-2.0.1/run/test/constant/
transportProperties"FOAM exiting
transportModel Newtonian;
nu
nu [ 0 2 -1 0 0 0 0 ] 1e-05;
Sc
Sct
q
Sc [ 0 0 0 0 0 0 0 ] 1;
Sct [ 0 0 0 0 0 0 0 ] 1;
q [ 0 0 -1 0 0 0 0 ] 1;
//シュミット数
//乱流シュミット数
//汚染質発生量
(*)汚染質発生量にはどの値を入れてもよい
空気齢はqの値に無関係
18
system/fvScheme (1)
--> FOAM FATAL IO ERROR:
keyword laplacian(diffEff,C) is undefined in dictionary "/home/
k-takahashi/OpenFOAM/k-takahashi-2.0.1/
run/test/system/fvSchemes::laplacianSchemes"
laplacianSchemes
{
default
none;
laplacian(nuEff,U) Gauss linear corrected;
laplacian((1|A(U)),p) Gauss linear corrected;
laplacian(DkEff,k) Gauss linear corrected;
laplacian(DepsilonEff,epsilon) Gauss linear corrected;
laplacian(DREff,R) Gauss linear corrected;
laplacian(DnuTildaEff,nuTilda) Gauss linear corrected;
laplacian(diffEff,C) Gauss linear corrected;
}
19
system/fvScheme (2)
--> FOAM FATAL IO ERROR:
keyword div(phi,C) is undefined in dictionary "/home/k-takahashi/
OpenFOAM/
k-takahashi-2.0.1/run/test/system/fvSchemes::divSchemes"
divSchemes
{
default
none;
div(phi,U) Gauss upwind;
div(phi,k) Gauss upwind;
div(phi,epsilon) Gauss upwind;
div(phi,R) Gauss upwind;
div(R)
Gauss linear;
div(phi,nuTilda) Gauss upwind;
div((nuEff*dev(T(grad(U))))) Gauss linear;
div(phi,C) Gauss upwind;
}
20
system/fvSolution (1)
--> FOAM FATAL IO ERROR:
keyword C is undefined in dictionary "/home/k-takahashi/OpenFOAM/
k-takahashi-2.0.1/run/test/system/fvSolution::solvers"
solvers
{
・・・
C //kやepsilonと同じ記述
{
solver
PBiCG;
preconditioner DILU;
tolerance
1e-05;
relTol
0.1;
}
}
21
system/fvSolution (2)
エラー出ないが、下記も追記 (なくても実行できます)
SIMPLE
{
nNonOrthogonalCorrectors 0;
residualControl
{
p
1e-2;
U
1e-3;
"(k|epsilon|omega)" 1e-3;
C
1e-5;
//残差がこの値以下になると
//計算が終了する
}
}
relaxationFactors
{
p
0.3;
U
0.7;
k
0.7;
epsilon
0.7;
R
0.7;
nuTilda
0.7;
C
1.0;
//緩和係数
}
22
空気齢の計算結果(玄関ドア:閉)
空気齢 (s)
空気齢小
(新鮮な空気)
×閉
空気齢大
(空気がよどんでいる)
風上の部屋のほうが換気しにくい!!
23
空気齢の計算結果(玄関ドア:開)
空気齢 (s)
開
空気齢大
玄関ドアを開けると、風下の部屋が換気しにくくなる
24
まとめ
• 過去の勉強会情報等を活用して、空気齢を計算する
カスタムソルバを作成できた
• 部屋の換気挙動が明らかになった。
⇒今夏、我が家の節電に貢献
その他進捗
• swak4Foamの練習
– OpenFOAM-2.0.1にインストール成功
– 使い方勉強中 funky・・・, Groovy・・・、simplefunction・・・、
いろいろありすぎて混乱中
• blenderの練習
– やはりGoogle SketchUpのほうが手軽か??
• chtMultiRetionSimpleFoam挑戦
– 今のところ手も足も出ず・・・
25