Weitere ähnliche Inhalte Mehr von takuyayamamoto1800 (11) OpenFOAMによる混相流シミュレーション入門2. 本日の内容
2.1. OpenFOAMにおける混相流解析
2.1.1 気液混相流
2.1.2 気液混相流+相変化
2.1.3 固液相変化
2.1.4 流体+粒子運動
5
2.2. OpenFOAMにおける気液混相流
2.2.1 interFoam
2.2.2 interIsoFoam
2.2.3 VOF法における問題点
2.3. 気液混相流を用いたtutorialの実行
2.3.1 interFoamを利用したdambreakの実行
2.3.2 interIsoFoamを利用したdambreakの実行
3. OpenFOAMの歴史
~2003 Imperial college Londonで開発、商用ソフト(FOAM)として販売
2004~ OpenCFD社がOpenFOAMをオープンソースとして公開
2011 OpenFOAM Foundation Inc.が設立し、OpenCFD社をSGI社が買収
2012 OpenCFD社がESI社が買収
2016 OpenFOAM Foundation版とESI-OpenCFD社版に分裂
OpenFOAM Foundation版
OpenFOAM ESI-OpenCFD版
OpenFOAM-v3.0+, OpenFOAM-v1606+, OpenFOAM-v1612+, OpenFOAM-v1706, …
現在の最新VersionはOpenFOAM-v2206
年2度更新(6月、12月)
2020年6月更新はv2006、2018年12月更新はv1812という命名方法
OpenFOAM-4.0, OpenFOAM-4.1, OpenFOAM-5, OpenFOAM-6, …
現在の最新VersionはOpenFOAM-9
年1度更新(7月)
OpenFOAM-devとして開発版も存在する
6
4. 本日の内容
2.1. OpenFOAMにおける混相流解析
2.1.1 気液混相流
2.1.2 気液混相流+相変化
2.1.3 固液相変化
2.1.4 流体+粒子運動
7
2.2. OpenFOAMにおける気液混相流
2.2.1 interFoam
2.2.2 interIsoFoam
2.2.3 VOF法における問題点
2.3. 気液混相流を用いたtutorialの実行
2.3.1 interFoamを利用したdambreakの実行
2.3.2 interIsoFoamを利用したdambreakの実行
11. 本日の内容
2.1. OpenFOAMにおける混相流解析
2.1.1 気液混相流
2.1.2 気液混相流+相変化
2.1.3 固液相変化
2.1.4 流体+粒子運動
14
2.2. OpenFOAMにおける気液混相流
2.2.1 interFoam
2.2.2 interIsoFoam
2.2.3 VOF法における問題点
2.3. 気液混相流を用いたtutorialの実行
2.3.1 interFoamを利用したdambreakの実行
2.3.2 interIsoFoamを利用したdambreakの実行
12. 手法の分類
15
気液混相流
一流体モデル 二(多)流体モデル Lagrangian-Eulerian 粒子法
• MPS (Moving
Particle Semi-
implicit)法
• SPH (Smoothed
Particle
Hydrodynamics)
法
OpenFOAMには
実装されていな
い
• VOF (Volume of
Fluid)法
• LS (Level Set)法
• DIM (Diffuse
Interface
Method)法
…
OpenFOAMには
VOF法が実装さ
れている
• Euler-Eulerモデ
ル (Eulerian-
Eulerianモデル)
OpenFOAMには
Euler-Euler法が
実装されている
• Lagrangian-
Eulerianモデル
OpenFOAMには
一部実装されて
いる
14. 一流体モデル
17
to write one set of governing equations for the whole flow domain occupied by the
various phase, without resorting jump condition
G. Tryggvason et al., Direct Numerical Simulations of Gas-Liquid Multiphase Flows (2011, Cambridge Press)
多数の相に関わらず1セットの支配方程式で書き下すことのできるモデル
• Volume of Fluid (VOF)法
• Level Set法
• Phase Field法 (Diffuse Interface法)
…
18. 本日の内容
2.1. OpenFOAMにおける混相流解析
2.1.1 気液混相流
2.1.2 気液混相流+相変化
2.1.3 固液相変化
2.1.4 流体+粒子運動
21
2.2. OpenFOAMにおける気液混相流
2.2.1 interFoam
2.2.2 interIsoFoam
2.2.3 VOF法における問題点
2.3. 気液混相流を用いたtutorialの実行
2.3.1 interFoamを利用したdambreakの実行
2.3.2 interIsoFoamを利用したdambreakの実行
21. 本日の内容
2.1. OpenFOAMにおける混相流解析
2.1.1 気液混相流
2.1.2 気液混相流+相変化
2.1.3 固液相変化
2.1.4 流体+粒子運動
24
2.2. OpenFOAMにおける気液混相流
2.2.1 interFoam
2.2.2 interIsoFoam
2.2.3 VOF法における問題点
2.3. 気液混相流を用いたtutorialの実行
2.3.1 interFoamを利用したdambreakの実行
2.3.2 interIsoFoamを利用したdambreakの実行
23. Enthalpy収支式からのモデル導出
Enthalpy収支式
26
h: エンタルピー
𝜌: 密度
𝑡: 時間
𝒖: 速度
𝑘: 熱伝導率
𝑐!: 比熱
エンタルピーを潜熱Δ𝐻、顕熱𝑐!𝑇で表現する
ℎ = 𝑐!𝑇 + Δ𝐻
代入
𝜕 𝜌ℎ
𝜕𝑡
+ ∇ ⋅ 𝜌𝒖ℎ = ∇ ⋅ 𝑘∇𝑇
𝜕 𝜌𝑐!𝑇
𝜕𝑡
+ ∇ ⋅ 𝜌𝑐!𝒖𝑇 = ∇ ⋅ 𝑘∇𝑇 −
𝜕 𝜌Δ𝐻
𝜕𝑡
− ∇ ⋅ 𝜌𝒖Δ𝐻
Energy式
(通常の熱対流用solver)
追加項
(fvOptions)
V. R. Voller and C. Prakash, Int. J. Heat Mass Transfer 30 (1987) 1709-1719
24. porosity項のモデル
27
p: 圧力
𝐶′: 抵抗係数
𝛼": 液体体積分率
𝑞: 安定化係数
Carman-Koseny式
∇𝑝 = −𝐶′
1 − 𝛼!
"
𝛼!
#
+ 𝑞
C:抵抗係数は晶出物形態によって変化
(例えば、晶出物径小で抵抗係数大へ変化)
q: 安定化するためなので、小さい方が原理的には正確
Carman-Koseny式は元々
充填層や濾過時の圧力抵抗を説明する
固液共存(Mushy)領域における
流体抵抗に応用
V. R. Voller and C. Prakash, Int. J. Heat Mass Transfer 30 (1987) 1709-1719
25. porosity項のモデル
28
p: 圧力
𝐾: 透過率
𝜇: 粘度
𝒖: 速度
Darcy則
𝒖 = −
𝐾
𝜇
∇𝑝
多孔体における圧力損失と速度の関係性に関する経験則
Navier-Stokes式への追加項
Carman-Koseny式とDarcy則を利用する
𝑺 = −𝐴𝒖 𝐴 = −𝐶
1 − 𝛼"
#
𝛼"
$
+ 𝑞
S: 追加項
A: 係数
𝐶: 抵抗係数
𝒖: 速度
𝛼": 液体体積分率
𝑞: 安定化係数
V. R. Voller and C. Prakash, Int. J. Heat Mass Transfer 30 (1987) 1709-1719
27. 本日の内容
2.1. OpenFOAMにおける混相流解析
2.1.1 気液混相流
2.1.2 気液混相流+相変化
2.1.3 固液相変化
2.1.4 流体+粒子運動
30
2.2. OpenFOAMにおける気液混相流
2.2.1 interFoam
2.2.2 interIsoFoam
2.2.3 VOF法における問題点
2.3. 気液混相流を用いたtutorialの実行
2.3.1 interFoamを利用したdambreakの実行
2.3.2 interIsoFoamを利用したdambreakの実行
31. DEMにおける流体抵抗のモデル化
34
単純な球体の抵抗
Re <1000
else.
F = Cd Ap
ρf u2
2
小文字
f: 流体
s: 固体
変数
Ap: 投影面積
Cd: 抵抗係数
r: 密度
u: 速度差(=|uf-us|)
V: 体積
d: 粒子直径
Cd =
24
Re
1+
1
6
Re
2
3
!
"
#
$
%
&
Cd = 0.424
粒子の割合が大きい場合
(Wen-Yuモデル)
nRe <1000
else.
β =
3
4
Cd
ρf 1− n
( )
ds
uf −us n−2.65
Cd =
24
nRe
1+ 0.15 nRe
( )
0.687
( )
Cd = 0.44
Ff =
β
1− n
uf −us
( )Vs
変数
b: 相関係数
n: 空隙率
その他多数のモデルがあり、対象に応じて変更
32. 本日の内容
2.1. OpenFOAMにおける混相流解析
2.1.1 気液混相流
2.1.2 気液混相流+相変化
2.1.3 固液相変化
2.1.4 流体+粒子運動
35
2.2. OpenFOAMにおける気液混相流
2.2.1 interFoam
2.2.2 interIsoFoam
2.2.3 VOF法における問題点
2.3. 気液混相流を用いたtutorialの実行
2.3.1 interFoamを利用したdambreakの実行
2.3.2 interIsoFoamを利用したdambreakの実行
34. VOF法
Hirt and Nichols (1981)によって開発された手法
C.W. Hirt and B. D. Nichols, J. Comput. Phys. 39 (1981) 201-226.
1. 体積分率a(VOF関数とも呼ばれる)に対する保存方程式を解く
𝜕𝛼
𝜕𝑡
+ ∇ , 𝒖𝛼 = 0
2. 体積分率aが拡散するのを防ぐため、
各計算格子セル内に体積分率が1までたまるまで移動させない
a = 1: 液体
a = 0: 気体
0 < a < 1: 界面
VOF法は体積分率の数値拡散との戦い
37
35. VOF関数の数値拡散
0 0 0 0 0
0 0 0 0.1 0.3
0 0 0.5 0.95 1.0
0 0.4 1.0 1.0 1.0
0 0.7 1.0 1.0 1.0
界面がなまる
数値的に拡散する
実際の形状 数値上での表現
G. Tryggvason et al., Direct Numerical Simulation of Gas-Liquid Multiphase Flow (Cambridge University Press, 2011)
38
36. 界面再構築方法
• Geometrical reconstruction (幾何学的な再構築)
SLIC, PLIC, ELVIRA, isoAdvector等の方法
計算精度良好、アルゴリズム実装複雑
計算が不安定
• Algebraic reconstruction (代数学的な再構築)
HRIC, CICSAM等の方法
計算精度そこまで高くない、アルゴリズム実装容易
計算が安定
代数学的に修正
幾何学的に
修正
39
37. OpenFOAMにおけるVOF法
• interFoam
Algebraic VOF法
MULES (Multi-Dimensional Universal Limiter with Explicit Solution)を利用
全てのOpenFOAMで利用可能
• interIsoFoam
Geometric VOF法
IsoAdvectorを利用
ESI版OpenFOAMで利用可能
(OpenFOAM v1706以降, v1806以降でdynamic mesh利用可能)
• interFoam
Algebraic VOF法+PLIC (MPLIC)
MULES (Multi-Dimensional Universal Limiter with Explicit Solution)を利用
PLIC (MPLIC)は補間に利用
OpenFOAM-dev(OpenFOAM Foundation版)で利用可能(2020年夏以降) 40
38. 本日の内容
2.1. OpenFOAMにおける混相流解析
2.1.1 気液混相流
2.1.2 気液混相流+相変化
2.1.3 固液相変化
2.1.4 流体+粒子運動
41
2.2. OpenFOAMにおける気液混相流
2.2.1 interFoam
2.2.2 interIsoFoam
2.2.3 VOF法における問題点
2.3. 気液混相流を用いたtutorialの実行
2.3.1 interFoamを利用したdambreakの実行
2.3.2 interIsoFoamを利用したdambreakの実行
40. interFoamにおける支配方程式
解いている方程式
H. Rusche, Ph.D. Thesis of Imperial College London (2002).
• Navier-Stokes式(表面張力項が追加)
@ A𝒖
@B
+ ∇ ⋅ 𝜌𝒖𝒖 = −∇𝑝 + 𝜇∇9𝒖 + 𝜌𝒈 + 𝑭C
• 連続式
@A
@B
+ ∇ ⋅ 𝜌𝒖 = 0
• VOF関数の保存方程式
@D
@B
+ ∇ ⋅ 𝛼𝒖 + ∇ ⋅ 𝛼 1 − 𝛼 𝒖E = 0
流れ
気液
界面
位置
𝜌: 密度
u: 速度
t:時間
p: 圧力
𝜇 : 粘度
g: 重力加速度
𝑭%: 表面張力項
a: VOF関数
ur: 相対速度
界面圧縮項としてモデル化
43
41. 𝜕𝛼
𝜕𝑡
+ ∇ ⋅ 𝛼𝒖 + ∇ ⋅ 𝛼 1 − 𝛼 𝒖& = 0
VOF関数の保存方程式
VOF関数の保存方程式
Algebraic reconstruction (代数的再構築)の1種
支配方程式を変更することで代数的にVOF関数を修正
界面圧縮
44
42. 𝜕𝛼
𝜕𝑡
+ ∇ ⋅ 𝛼𝒖 + ∇ ⋅ 𝛼 1 − 𝛼 𝒖& = 0
VOF法における物性値更新
VOF関数の保存方程式
𝜌 = 𝜌'𝛼 + 𝜌# 1 − 𝛼
𝜇 = 𝜇'𝛼 + 𝜇# 1 − 𝛼
𝜌: 密度
𝜇: 粘度
物性値の補間には一般には調和平均が利用されるが、
VOF法では線形補間でも大差がないため線形補間がよく利用される 45
43. 𝜕𝛼
𝜕𝑡
+ ∇ ⋅ 𝛼𝒖 + ∇ ⋅ 𝛼 1 − 𝛼 𝒖& = 0
VOF関数の保存方程式の離散化
VOF関数の保存方程式
H
(
∇ ⋅ 𝛼𝒖 + ∇ ⋅ 𝛼 1 − 𝛼 𝒖& 𝑑Ω
ガウスの発散定理
H
(
∇ ⋅ 𝑨 𝑑Ω = H
)
𝑨 𝑑S
Ω: 体積
S: 面積
f: 体積流量
Sf: 面積ベクトル
f: 格子セル表面
H
(
∇ ⋅ 𝛼𝒖 + ∇ ⋅ 𝛼 1 − 𝛼 𝒖& 𝑑Ω = Σ 𝛼𝒖 * + 1 − 𝛼 𝛼𝒖& *
⋅ 𝑺*
= Σ 𝛼𝜙 * + 1 − 𝛼 𝛼𝜙& *
有限体積法なので
相対体積流量のモデル化が必要 46
44. 界面圧縮モデル
相対体積流量(圧縮体積流量としてモデル化)
𝜙& * = min 𝐶+
𝜙*
𝑺*
, max
𝜙*
𝑺*
V
𝑛*
f: 体積流量
𝐶+: 圧縮パラメータ
𝑺*: 面積ベクトル
V
𝑛*: 界面に対する法線面積フラックス
𝒏*: 界面に対する法線単位ベクトル
𝛿,: 安定化パラメータ
𝑉-."": 計算格子セル体積
V
𝑛* = 𝒏* ⋅ 𝑺* 𝒏* =
∇𝛼 *
∇𝛼 * + 𝛿,
𝐶+
/!
𝑺!
とmax
/!
𝑺!
の小さい方を選択
注:古いOpenFOAMの場合
𝐶+ = 0とおくと圧縮流量ゼロに
𝐶+が大きいほど圧縮流量大に
𝛿, =
1×1012
𝑉
3455
'/$
𝜙& * = 𝐶+
𝜙*
𝑺*
V
𝑛*
注:新しいversionのOpenFOAMの場合
注: 論文中では上側の表記が殆ど
a
Ñ
47
45. 界面圧縮モデル
相対体積流量(圧縮体積流量としてモデル化)
f: 体積流量
𝐶+: 圧縮パラメータ
𝑺*: 面積ベクトル
V
𝑛*: 界面に対する法線面積フラックス
𝒏*: 界面に対する法線単位ベクトル
𝛿, : 安定化パラメータ
𝐶+ = 0とおくと圧縮流量ゼロに
𝐶+が大きいほど圧縮流量大に
nf
1 − 𝛼 𝛼𝜙&
界面圧縮体積流量
1 − 𝛼 𝛼 界面領域のみに働く
右側に圧縮する速度を自動的に加えている
注:nfの計算が正確でなければ変な方向に
圧縮を加えてしまう
𝜙& * = 𝐶+
𝜙*
𝑺*
V
𝑛*
48
𝒏* =
∇𝛼 *
∇𝛼 * + 𝛿,
46. 界面圧縮モデル(追加オプション,icAlpha)
相対体積流量(圧縮体積流量としてモデル化)
𝐶+ = 0とおくと圧縮流量ゼロに
𝐶+が大きいほど圧縮流量大に
𝜙& * = 𝐶+
𝜙*
𝑺*
1 − 𝑖37 + 𝐶+𝑖37|𝒖|* V
𝑛*
ESI版追加オプションicAlpha (isotropic compression)
𝜙& * = 𝐶+
𝜙*
𝑺*
V
𝑛*
元々
/!
𝑺!
を利用するか|𝒖|*を利用するかを𝑖37で割合を決定
𝑖37 = 0とおくと従来のinterFoamと同様
𝑖37を1に近づけるほど等方的成分増加 𝜙*
𝑺*
=
𝒖* ⋅ 𝑺*
𝑺*
計算格子セル面垂直成分
計算格子セル面垂直成分で圧縮 or セル面速度の大きさで圧縮
理論上はセル面に平行な流れ成分が支配的な場合は𝑖37が大きい方が圧縮される
(後述のspurious currentの影響もあるので、何とも言えない) 49
47. 界面圧縮モデル(追加オプション,scAlpha)
相対体積流量(圧縮体積流量としてモデル化)
𝜙& * = 𝐶+
𝜙*
𝑺*
+ 𝑠37 𝜹 ⋅
1
2
∇𝒖 + ∇𝒖8
*
V
𝑛*
ESI版追加オプションscAlpha (shear compression)
追加項
剪断成分を追加
𝐶+ = 0とおくと圧縮流量ゼロに
𝐶+が大きいほど圧縮流量大に
𝑠37 = 0とおくと従来のinterFoamと同様
𝑠37を大きくするほど剪断成分増加
理論上は界面付近でセル面で剪断流が支配的な場合は𝑠-+が大きい方が圧縮される
(後述のspurious currentの影響もあるので、何とも言えない)
𝜹: 隣接セル中心との
位置ベクトル
50
48. interFoamにおける支配方程式
解いている方程式
H. Rusche, Ph.D. Thesis of Imperial College London (2002).
• Navier-Stokes式(表面張力項が追加)
@ A𝒖
@B
+ ∇ ⋅ 𝜌𝒖𝒖 = −∇𝑝 + 𝜇∇9𝒖 + 𝜌𝒈 + 𝑭C
• 連続式
@A
@B
+ ∇ ⋅ 𝜌𝒖 = 0
• VOF関数の保存方程式
@D
@B
+ ∇ ⋅ 𝛼𝒖 + ∇ ⋅ 𝛼 1 − 𝛼 𝒖E = 0
流れ
気液
界面
位置
𝜌: 密度
𝒖: 速度
𝑡:時間
𝑝: 圧力
𝜇 : 粘度
𝒈: 重力加速度
𝑭%: 表面張力項
a: VOF関数
𝒖&: 相対速度
51
49. 表面張力モデル
J.U. Brackbill et al., J. Comput. Phys. 100 (1992) 335-354.
Continuum Surface Tension (CSF) model
表面張力は面積力であるが、
数値的に解くために体積力によってモデル化
𝑭! = 𝜎𝑘𝒏𝛿 = 𝜎𝑘∇𝛼
𝜎: 表面張力
𝑘: 界面曲率
𝒏: 界面に対する法線単位ベクトル
𝛿: デルタ関数(界面でのみのデルタ関数)
𝛼 : 体積分率
𝒏 =
∇𝛼
|∇𝛼|
, 𝛿 = ∇𝛼 ,
𝑘 = ∇ ⋅ 𝒏
表面張力項の計算では、𝛻𝛼がかなり重要となる
この計算の誤差が後に説明するspurious currentの原因に
52
52. 本日の内容
2.1. OpenFOAMにおける混相流解析
2.1.1 気液混相流
2.1.2 気液混相流+相変化
2.1.3 固液相変化
2.1.4 流体+粒子運動
55
2.2. OpenFOAMにおける気液混相流
2.2.1 interFoam
2.2.2 interIsoFoam
2.2.3 VOF法における問題点
2.3. 気液混相流を用いたtutorialの実行
2.3.1 interFoamを利用したdambreakの実行
2.3.2 interIsoFoamを利用したdambreakの実行
53. 界面再構築方法
• Geometrical reconstruction (幾何学的な再構築)
SLIC, PLIC, ELVIRA, isoAdvector等の方法
計算精度良好、アルゴリズム実装複雑
計算が不安定
• Algebraic reconstruction (代数学的な再構築)
HRIC, CICSAM等の方法
計算精度そこまで高くない、アルゴリズム実装容易
計算が安定
代数学的に修正
幾何学的に
修正
56
56. isoAdvectorの数値モデル導出
体積分率aの他にHという指標を導入
𝐻 𝒙, 𝑡 =
𝜌 𝒙, 𝑡 − 𝜌d
𝜌e − 𝜌d
Aなら𝐻 = 1
Bなら𝐻 = 0
連続式を考える
59
𝑑𝜌 𝒙, 𝑡
𝑑𝑡
+ ∇ ⋅ 𝜌 𝒙, 𝑡 𝒖 𝒙, 𝑡 = 0
𝑑
𝑑𝑡
<
f
𝜌 𝒙, 𝑡 𝑑Ω = − <
g
𝜌 𝒙, 𝑡 𝒖 𝒙, 𝑡 𝑑𝑺
有限体積法 (ガウスの発散定理利用)
𝜌: 密度
𝑡: 時間
𝒖: 速度
𝒙: 座標
Ω: 体積
𝑺: 面積ベクトル
Hで表現
𝑑
𝑑𝑡
<
f
𝐻 𝒙, 𝑡 𝑑Ω = − <
g
𝐻 𝒙, 𝑡 𝒖 𝒙, 𝑡 𝑑𝑺
57. isoAdvectorの数値モデル導出
計算格子セルにおける体積分率aは
60
𝑑
𝑑𝑡
<
f
𝐻 𝒙, 𝑡 𝑑Ω = − <
g
𝐻 𝒙, 𝑡 𝒖 𝒙, 𝑡 𝑑𝑺
𝛼 =
1
Ωhijj
<
f%&''
𝐻 𝒙, 𝑡 𝑑Ω
𝛼で表現し時間に対して計算格子に対して離散化すると
𝛼 𝑡 + Δ𝑡 = 𝛼 𝑡 −
1
Ωhijj
Σ𝑠k <
B
BlmB
<
g(
𝐻 𝒙, 𝑡 𝒖 𝒙, 𝑡 𝑑𝑺 𝑑𝑡
Dtの間に計算セル面jにおける計算格子セルに流入する流体Aの体積をDVj(t,Dt)とおくと
Δ𝑉
< 𝑡, Δ𝑡 = H
=
=>?=
H
@"
𝐻 𝒙, 𝑡 𝒖 𝒙, 𝑡 𝑑𝑺𝑑𝑡
𝜌: 密度
𝑡: 時間
𝒖: 速度
𝒙: 座標
Ω: 体積
𝑺: 面積ベクトル
𝑠: 符号関数
58. isoAdvectorの数値モデル導出
61
𝛼 𝑡 + Δ𝑡 = 𝛼 𝑡 −
1
Ω:noo
Σk𝑠kΔ𝑉
k 𝑡, Δ𝑡
最終的に式変形すると
これをisoAdvectorで求めれば良い
Δ𝑉
< 𝑡, Δ𝑡 = H
=
=>?=
H
@"
𝐻 𝒙, 𝑡 𝒖 𝒙, 𝑡 𝑑𝑺𝑑𝑡
=
𝜙< 𝑡
𝑺<
H
=
=>?=
H
@"
𝐻 𝒙, 𝑡 𝑑𝑺𝑑𝑡 =
𝜙< 𝑡
𝑺<
H
=
=>?=
𝐴< 𝑡 𝑑𝑡
f: 体積流量
𝐴< 𝑡 = H
@"
𝐻 𝒙, 𝑡 𝑑𝑺 とおく
Ajは計算格子セル面における流体Aの埋め込み面積
このAjを逐次幾何学的に求めて計算する
60. VOF関数移動の計算精度
J. Roenby, H. Bredmose, H. Jasak, R. Soc. Open Sci. 3 (2016) 160405.
interIsoFoam(IsoAdvector)で計算する方が精度良く計算可能
interIsoFoam interFoam
63
62. 本日の内容
2.1. OpenFOAMにおける混相流解析
2.1.1 気液混相流
2.1.2 気液混相流+相変化
2.1.3 固液相変化
2.1.4 流体+粒子運動
65
2.2. OpenFOAMにおける気液混相流
2.2.1 interFoam
2.2.2 interIsoFoam
2.2.3 VOF法における問題点
2.3. 気液混相流を用いたtutorialの実行
2.3.1 interFoamを利用したdambreakの実行
2.3.2 interIsoFoamを利用したdambreakの実行
69. VOF関数の数値拡散の低減方法
AMR (Adaptive Mesh Refinement)
局所的に計算格子を切り直す方法
VOF法と一緒に利用することで、VOF関数の拡散を低減
interFoam, interIsoFoamで実行可能
八分木で計算格子を計算時間毎に分割
局所的に計算格子を細かくするので、
計算負荷があまり大きくならずに計算精度をあげることができる
72
72. VOF関数の数値拡散の低減方法(interFoam)
Caの変更
Ca = 1が標準値
Ca 大: 界面圧縮が強い
界面が圧縮されすぎて格子形状に沿ってガタガタする
Ca 小: 界面圧縮が弱い
VOF関数が拡散する
非物理的な気泡、液滴の分裂が発生しうる
後述のspurious currentが強くなり、誤差が大きくなる
流れが激しく、界面が拡散しやすく、
spurious currentの影響が小さい条件
流れが緩やかで、界面が拡散しにくく、
spurious currentの影響が大きい条件
75
77. Spurious (Parasitic) current
界面張力項(CSFモデル)
J. U. Brackbill et al., J. Comp. Phys., 100, 335-354 (1992).
界面張力項はNavier-Stokes式に直接外力として加えるので、界
面上で界面張力のアンバランスな場所で速度が発生する
∇𝛼, 𝑘の計算で誤差大(界面張力のバランスが取れない)
spurious (parasitic) current 80
𝛿, =
1×1012
𝑉
3455
'/$
𝑭! = 𝜎𝑘𝒏𝛿 = 𝜎𝑘∇𝛼
𝒏 =
∇𝛼
|∇𝛼 + 𝛿p|
, 𝛿 = ∇𝛼 , 𝑘 = ∇ ⋅ 𝒏
78. Spurious (Parasitic) current
Spurious currentのスケーリング
Lafaurie et al., J. Comput. Phys. 113 (1994) 134-147.
𝑅𝑒p8 ∝ 𝐿𝑎 Re: Reynolds数
La: Laplace数
usp: Spurious currentの速度
D: 代表長さ
𝜈: 動粘度
𝜌: 密度
𝜎: 表面張力
𝜇: 粘度
𝑅𝑒A! =
𝑢A!𝐷
𝜈
𝐿𝑎 =
𝜎𝜌𝐷
𝜇#
𝑢p8 ∝
𝜎
𝜇
表面張力が大きく、粘度が小さい系ではspurious currentが大きくなる
大きさスケールによらないので、マイクロバブル等の小さい気泡を対象とする場合、
Spurious currentによって気泡が動いたりする
solverの改造をしなければまともに計算できないことも
81
79. Spurious current低減法
• スムーズ化したalpha分布より曲率等を計算する。
D. A. Hoang et al., Comput. Fluids, 86, 28-36 (2013).
!
α =
αf Sf
f =1
n
∑
Sf
f =1
n
∑
• S-CLSVOF法を使い、Level-Set法と組み合わせる。
A. Albadawi et al., Int. J. Multiphase Flow, 53, 11-28 (2013).
• Caの値を解こうとする問題に合わせて調整する。
solverの改良が必要なものがほとんど
• その他多数の誤差低減方法が論文で報告されている
ので、それを自分で実装する。
82
82. Laplace圧の誤差
85
• 計算条件
Δp = p0
in
− p∞
out
p0
in
p∞
out
気泡中心部の圧力
壁境界での圧力
等間隔格子
DX = 0.001 m (Fine)
0.05 m
0.05
m
0.01 m
理論値のラプラス圧
物性値
𝜎 0.01 N/m
計算によるラプラス圧
rg 1 kg/m3
µg 10-5 kg/(ms)
rl 1000 kg/m3
µl 10-3 kg/(ms)
gas
liquid
無重力条件
(静置条件)
計算時間
0.1 sec.
(Dt = 1x10-5 sec. (Coarse))
(Dt = 5x10-6 sec. (Fine))
相対圧力誤差E0
E0 =
Δp− Δpexact
Δpexact
∆𝑝 = 𝜎
1
𝑅
+
1
𝑅′
= 2
84. 本日の内容
2.1. OpenFOAMにおける混相流解析
2.1.1 気液混相流
2.1.2 気液混相流+相変化
2.1.3 固液相変化
2.1.4 流体+粒子運動
87
2.2. OpenFOAMにおける気液混相流
2.2.1 interFoam
2.2.2 interIsoFoam
2.2.3 VOF法における問題点
2.3. 気液混相流を用いたtutorialの実行
2.3.1 interFoamを利用したdambreakの実行
2.3.2 interIsoFoamを利用したdambreakの実行
86. OpenFOAMのtutorialの場所
89
$ foam
$ cd tutorials
OpenFOAMのproject directoryに移動
OpenFOAMのproject directory内のtutorialが格納されている
ディレクトリに移動
もしくは
$ tut OpenFOAMのtutorialが格納されているディレクトリに移動
$WM_PROJECT_DIR/tutorials
格納されている場所
87. OpenFOAMのtutorialの種類
90
$ ls 今いるディレクトリ内のファイル、ディレクトリを表示
Allclean Alltest Allcollect AutoTest Allrun
IO compressible financial incompressible modules resources
basic discreteMethods finiteArea lagrangian multiphase stressAnalysis
DNS combustion electromagnetics heatTransfer mesh preProcessing
verificationAndValidation
All*** tutorialを実行するスクリプト
その他 tutorial
実行するsolverの種類に応じてディレクトリが異なる
今回はmultiphaseのtutorialを使います
$ cd multiphase multiphaseの中に移動
88. multiphaseのtutorial
91
$ ls 今いるディレクトリ内のファイル、ディレクトリを表示
MPPICInterFoam compressibleMultiphaseInterFoam interIsoFoam
multiphaseInterFoam reactingTwoPhaseEulerFoam cavitatingFoam driftFluxFoam
interMixingFoam overInterDyMFoam twoLiquidMixingFoam
compressibleInterDyMFoam icoReactingMultiPhaseInterFoam
interPhaseChangeDyMFoam potentialFreeSurfaceDyMFoam twoPhaseEulerFoam
compressibleInterFoam interCondensatingEvaporatingFoam interPhaseChangeFoam
potentialFreeSurfaceFoam compressibleInterIsoFoam interFoam
multiphaseEulerFoam reactingMultiphaseEulerFoam
各種solverの名前のディレクトリ
solverごとにtutorialが格納されている
今回はinterFoamとinterIsoFoamのtutorialを使います
$ cd interFoam interFoamの中に移動
90. interFoam/laminarのtutorial
93
$ ls 今いるディレクトリ内のファイル、ディレクトリを表示
capillaryRise damBreakWithObstacle sloshingCylinder sloshingTank2D3DoF
sloshingTank3D3DoF testTubeMixer waves damBreak mixerVessel2D
sloshingTank2D sloshingTank3D sloshingTank3D6DoF vofToLagrangian
各種tutorialが格納されている
今回はdamBreakのtutorialを使います
$ cp -r damBreak $FOAM_RUN $FOAM_RUN(計算実行用ディレクトリ)
の中にdamBreakをコピー
$ run runの中に移動
94. ファイルの中身の見方
97
$ cat 0.orig/U 0.origディレクトリ内のUの中身を出力
$ gedit 0.orig/U geditと呼ばれるエディタを利用して中身を確認、編集
$ vi 0.orig/U vimと呼ばれるエディタを利用して中身を確認、編集
$ emacs 0.orig/U emacsと呼ばれるエディタを利用して中身を確認、編集
$ less 0.orig/U 0.origディレクトリ内のUの中身を確認
各自やりすいやり方で中身を見てください
95. 境界条件
boundaryName
{
type fixedValue;
value uniform (*x *y *z);
}
• fixedValue 固定値(Dirichlet境界条件)
(x成分 y成分 z成分)
• zeroGradient
boundaryName
{
type zeroGradient;
}
境界条件指定
• empty
境界の法線方向に勾配ゼロ
boundaryName
{
type empty;
}
境界条件指定
二次元計算をする場合に、
使用しない方向に対する境界条件
98
96. 境界条件
• inletOutlet
boundaryName
{
type inletOutlet;
value uniform (0 0 0);
inletValue uniform (0 0 0);
}
境界条件指定
外に出て行くときは勾配ゼロ
流入する場合は流入値を設定
計算値(初期条件は流入値と同じ)
流入するときの流入値
• fixedFluxPressure
boundaryName
{
type fixedFluxPressure;
value uniform 0;
}
境界条件指定
速度境界で指定した流束になるよう
圧力修正する境界条件
初期値
99
100. 境界条件
境界 圧力 速度 VOF関数
壁面 fixedFluxPressure fixedValue
noSlip
zeroGradient
constantAlphaContactAngle
dynamicAlphaContactAngle
自由流入出
(大気解放)
totalPressure pressureInletOutlet
Velocity
inletOutlet
2次元面 empty empty empty
対称面 symmetry symmetry symmetry
103
106. controlDict
application interFoam;
startFrom startTime;
startTime 0;
stopAt endTime;
endTime 1;
deltaT 0.001;
writeControl adjustable;
writeInterval 0.05;
purgeWrite 0;
writeFormat ascii;
writePrecision 6;
writeCompression off;
timeFormat general;
timePrecision 6;
runTimeModifiable yes;
maxCo 1;
maxAlphaCo 1;
maxDeltaT 1;
#sinclude "sampling"
solver名
計算開始設定方法
計算開始時刻
計算終了設定方法
計算終了時刻
時間刻み幅
出力設定方法
出力間隔
計算結果を保存する数
出力フォーマット
出力桁数
出力ファイル圧縮の可否
時間の出力フォーマット設定
時間桁数
計算途中に計算条件を変えられるかどうかの可否
最大Courant数 (adjustableの場合有効)
最大Alpha Courant数 (adjustableの場合有効)
最大時間刻み (adjustableの場合有効)
samplingの読み込み 109
107. controlDict
application interFoam;
startFrom startTime;
startTime 0;
stopAt endTime;
endTime 1;
deltaT 0.001;
writeControl adjustable;
writeInterval 0.05;
solver名(必須ではなく、書かれなくても実行する)
計算開始設定方法(firstTime: 最初の(最も古い)時間ステップから/
startTime startTime:で設定した時刻から/latestTime: 最新データから開始)
計算開始時刻
計算終了設定方法(endTime/writeNow/noWriteNow/nextWrite)
計算終了時刻
時間刻み幅
出力設定方法(timeStep: 時間刻み数指定/runTime: 解析上の時間指定
/adjustable: maxCoに調整/cpuTime: cpu時間指定/clockTime: 現時刻指定)
出力間隔(writeControlに合わせた出力間隔を入力)
110
110. fvSchemes
laplacianSchemes
{
default Gauss linear corrected;
}
interpolationScheme
{
default linear;
}
snGradSchemes
{
default corrected;
}
ラプラシアンスキーム(粘性項、拡散項)
補間スキーム
セル面の法線方向勾配スキーム
スキームの選択
スキームの選択
スキームの選択
離散スキームの種類については下記参照
OpenFOAMユーザーガイド4章
OpenCAE学会 OpenFOAMによる熱移動と流れの数値解析 (森北出版) 113
111. fvSolution
solvers
{
"alpha.water.*"
{
nAlphaCorr 2;
nAlphaSubCycles 1;
cAlpha 1;
MULESCorr yes;
nLimiterIter 5;
solver smoothSolver;
smoother symGaussSeidel;
tolerance 1e-8;
relTol 0;
}
…
各変数の代数方程式の解法、残差の決定
代数方程式の解法
スムーザー
残差(打ち切りの条件1)
初期残差に対する比(打ち切りの条件2)
(relTol = 0と置くとtolelanceのみで決まる)
VOF関数の保存方程式の修正回数
時間刻みを変更するサブサイクル回数
圧縮を決定するca値
(ESI版の場合icAlpha,scAlphaをここに加えれば
オプション利用可能)
MULESの修正
制限回数
114
113. blockMeshDict
116
scale 0.146;
vertices
(
(0 0 0)
(2 0 0)
(2.16438 0 0)
(4 0 0)
…
);
blocks
(
hex (0 1 5 4 12 13 17 16) (23 8 1) simpleGrading (1 1 1)
…
);
スケールを変更(今回はmmスケールに)
計算領域の頂点を設定
計算領域の大きさに応じて変更
順に0,1,2と名付けられる
頂点を取り囲むブロックを設定
上で名付けた頂点を選択し、分割数を記入
121. 本日の内容
2.1. OpenFOAMにおける混相流解析
2.1.1 気液混相流
2.1.2 気液混相流+相変化
2.1.3 固液相変化
2.1.4 流体+粒子運動
124
2.2. OpenFOAMにおける気液混相流
2.2.1 interFoam
2.2.2 interIsoFoam
2.2.3 VOF法における問題点
2.3. 気液混相流を用いたtutorialの実行
2.3.1 interFoamを利用したdambreakの実行
2.3.2 interIsoFoamを利用したdambreakの実行
122. OpenFOAMのtutorialの場所
125
$ foam
$ cd tutorials
OpenFOAMのproject directoryに移動
OpenFOAMのproject directory内のtutorialが格納されている
ディレクトリに移動
もしくは
$ tut OpenFOAMのtutorialが格納されているディレクトリに移動
$WM_PROJECT_DIR/tutorials
格納されている場所
123. OpenFOAMのtutorialの種類
126
$ ls 今いるディレクトリ内のファイル、ディレクトリを表示
Allclean Alltest Allcollect AutoTest Allrun
IO compressible financial incompressible modules resources
basic discreteMethods finiteArea lagrangian multiphase stressAnalysis
DNS combustion electromagnetics heatTransfer mesh preProcessing
verificationAndValidation
All*** tutorialを実行するスクリプト
その他 tutorial
実行するsolverの種類に応じてディレクトリが異なる
今回はmultiphaseのtutorialを使います
$ cd multiphase multiphaseの中に移動
124. multiphaseのtutorial
127
$ ls 今いるディレクトリ内のファイル、ディレクトリを表示
MPPICInterFoam compressibleMultiphaseInterFoam interIsoFoam
multiphaseInterFoam reactingTwoPhaseEulerFoam cavitatingFoam driftFluxFoam
interMixingFoam overInterDyMFoam twoLiquidMixingFoam
compressibleInterDyMFoam icoReactingMultiPhaseInterFoam
interPhaseChangeDyMFoam potentialFreeSurfaceDyMFoam twoPhaseEulerFoam
compressibleInterFoam interCondensatingEvaporatingFoam interPhaseChangeFoam
potentialFreeSurfaceFoam compressibleInterIsoFoam interFoam
multiphaseEulerFoam reactingMultiphaseEulerFoam
各種solverの名前のディレクトリ
solverごとにtutorialが格納されている
今回はinterFoamとinterIsoFoamのtutorialを使います
$ cd interIsoFoam interFoamの中に移動
126. damBreakのtutorial (interIsoFoam)
129
$ ls 今いるディレクトリ内のファイル、ディレクトリを表示
damBreak
damBreakIso
$ cd damBreakIso
前回利用したtutorial
今回利用するtutorial
damBreakIsoの中に移動
$ ls 今いるディレクトリ内のファイル、ディレクトリを表示
0.orig Allclean Allrun Allrun-parallel constant system
Allrunは前処理からプログラム実行まで全てを実行するスクリプト
Allrun-parallelは前処理からプログラム実行までを行うスクリプトで、並列計算を行う
Allcleanは計算データを消去するスクリプト
127. ファイルの中身の見方(復習)
130
$ cat 0.orig/U 0.origディレクトリ内のUの中身を出力
$ gedit 0.orig/U geditと呼ばれるエディタを利用して中身を確認、編集
$ vi 0.orig/U vimと呼ばれるエディタを利用して中身を確認、編集
$ emacs 0.orig/U emacsと呼ばれるエディタを利用して中身を確認、編集
$ less 0.orig/U 0.origディレクトリ内のUの中身を確認
各自やりすいやり方で中身を見てください
133. 136
• Copyright © 2022 The Open CAE Society of Japan
• This work is licensed under a Creative Commons
• Attribution-NonCommercial 4.0 International License.
• http://creativecommons.org/licenses/by-nc/4.0/