Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

OpenFOAMによる混相流シミュレーション入門

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 134 Publicité

Plus De Contenu Connexe

Plus récents (20)

Publicité

OpenFOAMによる混相流シミュレーション入門

  1. 1. 山本卓也 2. OpenFOAMによる 混相流シミュレーション入門 東北大学大学院 工学研究科 金属フロンティア工学専攻 環境科学研究科 先端環境創成学専攻 1
  2. 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. 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. 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の実行
  5. 5. OpenFOAMにおける混相流解析 8 • 気液二相流 • 気液多相流 • 気液混相流+相変化 • 固液相変化 • 流体+粒子運動 多様な現象に対して多様な解析手法が実装されている
  6. 6. 例)気液二相流 9 interFoam, interIsoFoam (VOF法)
  7. 7. 例)気液多相流 10 multiphaseInterFoam (VOF法)
  8. 8. 例)気液混相流+相変化 11 interCondensating EvaporatingFoam interPhaseChangeFoam cavitatingFoam
  9. 9. 例)固液相変化 12 solidificationMeltingSource
  10. 10. 例)流体+粒子運動 13 MPPICInterFoam icoUncoupledKinematicParcelFoam
  11. 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. 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には 一部実装されて いる
  13. 13. 手法の分類 16 S. Mirjalili et al., Center for Turb. Res. Annu. Res. Brief. 117-135 (2017)
  14. 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法) …
  15. 15. OpenFOAMにおける一流体モデル 18 VOF法 ****InterFoam ****InterDyMFoam 等のようにInterが名前についているmultiphase用のsolverは ほぼ一流体モデルのVOF法を利用しているもの マーカーを利用して界面位置を追跡 マーカーが拡散指定しまい、界面位置が なまる誤差あり
  16. 16. 二(多)流体モデル 19 瞬時・局所的な基礎方程式を時間Tの間において一方の相にのみ注目し て平均することによって得られるモデル 日本混相流学会、混相流ハンドブック (2004, 朝倉書店) 流体の個数分だけ多数のセットの支配方程式があり、 それらの方程式群を同時に解くことで解が得られる Euler-Eulerモデル (Eulerian-Eulerianモデル) 1流体モデル 2(多)流体モデル
  17. 17. OpenFOAMにおける二(多)流体モデル 20 Euler-Eulerモデル (Eulerian-Eulerian)モデル ****EulerFoam 等のようにEulerが名前についているmultiphase 用のsolverは 二(多)流体モデルを利用しているもの 気液界面位置を直接追跡するのではなく、 平均化した場として解を得ることができるた め、一流体モデルと比較して空間的に幅広 い範囲での解析が可能
  18. 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の実行
  19. 19. 気液混相流+相変化 22 キャビテーションモデル 動圧によって飽和蒸気圧以下になった際に 相変化し、体積膨張、相変化した気相の移動までを解くモデル OpenFOAMでは、相変化した後にVOF法で追跡するか 単に発生までを予測するかのsolverがある
  20. 20. 気液混相流+相変化 23 凝縮、蒸発モデル 凝縮温度以下になった場合に相変化し、凝縮 蒸発温度以上になった場合に相変化し、蒸発 するよう体積変化するようにモデル化 OpenFOAMでは相変化以外はVOF法でモデル化し、 VOF法に体積変化するようにモデル化されている
  21. 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の実行
  22. 22. 固液相変化 25 Enthalpy-Porosity法 • 固体部分、液体部 分、共存部分をそ の液体率aで表現 • 固体部分、共存部 分で流体抵抗を加 えることで、固体 液体共存系を表現 • 温度に依存して液 体率を変化させ、 液体率の変化に 応じて潜熱の発生 も数式に導入
  23. 23. Enthalpy収支式からのモデル導出 Enthalpy収支式 26 h: エンタルピー 𝜌: 密度 𝑡: 時間 𝒖: 速度 𝑘: 熱伝導率 𝑐!: 比熱 エンタルピーを潜熱Δ𝐻、顕熱𝑐!𝑇で表現する ℎ = 𝑐!𝑇 + Δ𝐻 代入 𝜕 𝜌ℎ 𝜕𝑡 + ∇ ⋅ 𝜌𝒖ℎ = ∇ ⋅ 𝑘∇𝑇 𝜕 𝜌𝑐!𝑇 𝜕𝑡 + ∇ ⋅ 𝜌𝑐!𝒖𝑇 = ∇ ⋅ 𝑘∇𝑇 − 𝜕 𝜌Δ𝐻 𝜕𝑡 − ∇ ⋅ 𝜌𝒖Δ𝐻 Energy式 (通常の熱対流用solver) 追加項 (fvOptions) V. R. Voller and C. Prakash, Int. J. Heat Mass Transfer 30 (1987) 1709-1719
  24. 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. 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
  26. 26. Enthalpy-Porosity法による計算例 29 Galliumの溶解過程
  27. 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の実行
  28. 28. 流体+粒子運動 31 流体場:Computational Fluid Dynamics (CFD) 粒子運動:Discrete Element Method (DEM) CFD-DEM DEM: 個別要素法 離散要素法 粒子に対してNewtonの運動方程式を解く
  29. 29. DEM 32 各粒子に対するNewtonの運動方程式 𝑚8𝒂8 = 𝑭8 𝑚8 𝑑9𝒙8 𝑑𝑡9 = 𝑭: + 𝑭; + 𝑭< + 𝑭𝒆𝒙𝒕 粒子衝突 による力 流体抵抗 による力 重力 その他外力
  30. 30. DEMにおける衝突力のモデル化 33 「粒子個別要素法」 森北出版 著 Catherine O’Sullivan 訳 鈴木輝一 F = Kδ +η ! δ F: 力 K: バネ剛性 d: 変位 h: 減衰 ! δ = dδ dt , ! F = dF dt 線形Kelvin(Voigt)モデル 線形Maxwellモデル ! δ = ! F K + F η バネ ダッシュポット 物性に応じて様々な衝突モデルを利用
  31. 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. 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の実行
  33. 33. VOF法計算例 Dam Break (Tutorial) 界面の拡散(誤差) 36
  34. 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. 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. 36. 界面再構築方法 • Geometrical reconstruction (幾何学的な再構築) SLIC, PLIC, ELVIRA, isoAdvector等の方法 計算精度良好、アルゴリズム実装複雑 計算が不安定 • Algebraic reconstruction (代数学的な再構築) HRIC, CICSAM等の方法 計算精度そこまで高くない、アルゴリズム実装容易 計算が安定 代数学的に修正 幾何学的に 修正 39
  37. 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. 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の実行
  39. 39. interFoamのtutorial Dambreak Dambreak with obstacle 42
  40. 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. 41. 𝜕𝛼 𝜕𝑡 + ∇ ⋅ 𝛼𝒖 + ∇ ⋅ 𝛼 1 − 𝛼 𝒖& = 0 VOF関数の保存方程式 VOF関数の保存方程式 Algebraic reconstruction (代数的再構築)の1種 支配方程式を変更することで代数的にVOF関数を修正 界面圧縮 44
  42. 42. 𝜕𝛼 𝜕𝑡 + ∇ ⋅ 𝛼𝒖 + ∇ ⋅ 𝛼 1 − 𝛼 𝒖& = 0 VOF法における物性値更新 VOF関数の保存方程式 𝜌 = 𝜌'𝛼 + 𝜌# 1 − 𝛼 𝜇 = 𝜇'𝛼 + 𝜇# 1 − 𝛼 𝜌: 密度 𝜇: 粘度 物性値の補間には一般には調和平均が利用されるが、 VOF法では線形補間でも大差がないため線形補間がよく利用される 45
  43. 43. 𝜕𝛼 𝜕𝑡 + ∇ ⋅ 𝛼𝒖 + ∇ ⋅ 𝛼 1 − 𝛼 𝒖& = 0 VOF関数の保存方程式の離散化 VOF関数の保存方程式 H ( ∇ ⋅ 𝛼𝒖 + ∇ ⋅ 𝛼 1 − 𝛼 𝒖& 𝑑Ω ガウスの発散定理 H ( ∇ ⋅ 𝑨 𝑑Ω = H ) 𝑨 𝑑S Ω: 体積 S: 面積 f: 体積流量 Sf: 面積ベクトル f: 格子セル表面 H ( ∇ ⋅ 𝛼𝒖 + ∇ ⋅ 𝛼 1 − 𝛼 𝒖& 𝑑Ω = Σ 𝛼𝒖 * + 1 − 𝛼 𝛼𝒖& * ⋅ 𝑺* = Σ 𝛼𝜙 * + 1 − 𝛼 𝛼𝜙& * 有限体積法なので 相対体積流量のモデル化が必要 46
  44. 44. 界面圧縮モデル 相対体積流量(圧縮体積流量としてモデル化) 𝜙& * = min 𝐶+ 𝜙* 𝑺* , max 𝜙* 𝑺* V 𝑛* f: 体積流量 𝐶+: 圧縮パラメータ 𝑺*: 面積ベクトル V 𝑛*: 界面に対する法線面積フラックス 𝒏*: 界面に対する法線単位ベクトル 𝛿,: 安定化パラメータ 𝑉-."": 計算格子セル体積 V 𝑛* = 𝒏* ⋅ 𝑺* 𝒏* = ∇𝛼 * ∇𝛼 * + 𝛿, 𝐶+ /! 𝑺! とmax /! 𝑺! の小さい方を選択 注:古いOpenFOAMの場合 𝐶+ = 0とおくと圧縮流量ゼロに 𝐶+が大きいほど圧縮流量大に 𝛿, = 1×1012 𝑉 3455 '/$ 𝜙& * = 𝐶+ 𝜙* 𝑺* V 𝑛* 注:新しいversionのOpenFOAMの場合 注: 論文中では上側の表記が殆ど a Ñ 47
  45. 45. 界面圧縮モデル 相対体積流量(圧縮体積流量としてモデル化) f: 体積流量 𝐶+: 圧縮パラメータ 𝑺*: 面積ベクトル V 𝑛*: 界面に対する法線面積フラックス 𝒏*: 界面に対する法線単位ベクトル 𝛿, : 安定化パラメータ 𝐶+ = 0とおくと圧縮流量ゼロに 𝐶+が大きいほど圧縮流量大に nf 1 − 𝛼 𝛼𝜙& 界面圧縮体積流量 1 − 𝛼 𝛼 界面領域のみに働く 右側に圧縮する速度を自動的に加えている 注:nfの計算が正確でなければ変な方向に 圧縮を加えてしまう 𝜙& * = 𝐶+ 𝜙* 𝑺* V 𝑛* 48 𝒏* = ∇𝛼 * ∇𝛼 * + 𝛿,
  46. 46. 界面圧縮モデル(追加オプション,icAlpha) 相対体積流量(圧縮体積流量としてモデル化) 𝐶+ = 0とおくと圧縮流量ゼロに 𝐶+が大きいほど圧縮流量大に 𝜙& * = 𝐶+ 𝜙* 𝑺* 1 − 𝑖37 + 𝐶+𝑖37|𝒖|* V 𝑛* ESI版追加オプションicAlpha (isotropic compression) 𝜙& * = 𝐶+ 𝜙* 𝑺* V 𝑛* 元々 /! 𝑺! を利用するか|𝒖|*を利用するかを𝑖37で割合を決定 𝑖37 = 0とおくと従来のinterFoamと同様 𝑖37を1に近づけるほど等方的成分増加 𝜙* 𝑺* = 𝒖* ⋅ 𝑺* 𝑺* 計算格子セル面垂直成分 計算格子セル面垂直成分で圧縮 or セル面速度の大きさで圧縮 理論上はセル面に平行な流れ成分が支配的な場合は𝑖37が大きい方が圧縮される (後述のspurious currentの影響もあるので、何とも言えない) 49
  47. 47. 界面圧縮モデル(追加オプション,scAlpha) 相対体積流量(圧縮体積流量としてモデル化) 𝜙& * = 𝐶+ 𝜙* 𝑺* + 𝑠37 𝜹 ⋅ 1 2 ∇𝒖 + ∇𝒖8 * V 𝑛* ESI版追加オプションscAlpha (shear compression) 追加項 剪断成分を追加 𝐶+ = 0とおくと圧縮流量ゼロに 𝐶+が大きいほど圧縮流量大に 𝑠37 = 0とおくと従来のinterFoamと同様 𝑠37を大きくするほど剪断成分増加 理論上は界面付近でセル面で剪断流が支配的な場合は𝑠-+が大きい方が圧縮される (後述のspurious currentの影響もあるので、何とも言えない) 𝜹: 隣接セル中心との 位置ベクトル 50
  48. 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. 49. 表面張力モデル J.U. Brackbill et al., J. Comput. Phys. 100 (1992) 335-354. Continuum Surface Tension (CSF) model 表面張力は面積力であるが、 数値的に解くために体積力によってモデル化 𝑭! = 𝜎𝑘𝒏𝛿 = 𝜎𝑘∇𝛼 𝜎: 表面張力 𝑘: 界面曲率 𝒏: 界面に対する法線単位ベクトル 𝛿: デルタ関数(界面でのみのデルタ関数) 𝛼 : 体積分率 𝒏 = ∇𝛼 |∇𝛼| , 𝛿 = ∇𝛼 , 𝑘 = ∇ ⋅ 𝒏 表面張力項の計算では、𝛻𝛼がかなり重要となる この計算の誤差が後に説明するspurious currentの原因に 52
  50. 50. interFoamアルゴリズム VOF関数の保存方程式 Navier-Stokes式による速度予測 圧力ポアソン方程式 PIMPLE ループ 時間発展 Δ𝑡!"# = Δ𝑡 𝑛$,!"# VOF関数の保存方程式更新 𝑛7,,:;回ループ オプションで時間刻みを小さくする サブサイクル fvSolution/nAlphaSubCyclesで回数を設定 界面移動速度が大きい時には多少安定化することも (Comaxが大きいときは多少改善) 53
  51. 51. interFoamによるミルククラウンの実行例 54
  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. 53. 界面再構築方法 • Geometrical reconstruction (幾何学的な再構築) SLIC, PLIC, ELVIRA, isoAdvector等の方法 計算精度良好、アルゴリズム実装複雑 計算が不安定 • Algebraic reconstruction (代数学的な再構築) HRIC, CICSAM等の方法 計算精度そこまで高くない、アルゴリズム実装容易 計算が安定 代数学的に修正 幾何学的に 修正 56
  54. 54. interIsoFoamのtutorial例 Dambreak (interFoam) Dambreak (interIsoFoam) VOF関数の拡散が大きい VOF関数の拡散が小さい 57
  55. 55. interIsoFoamに利用されるisoAdvector isoAdvector 気液界面で構成される球面を計算 格子を横切る単一平面で表現 isoAdvectorの時間発展 青、緑、赤の順に時間発展 計算格子内の界面移動も表現可能 58 J. Roenby, H. Bredmose, H. Jasak, R. Soc. Open Sci. 3 (2016) 160405.
  56. 56. isoAdvectorの数値モデル導出 体積分率aの他にHという指標を導入 𝐻 𝒙, 𝑡 = 𝜌 𝒙, 𝑡 − 𝜌d 𝜌e − 𝜌d Aなら𝐻 = 1 Bなら𝐻 = 0 連続式を考える 59 𝑑𝜌 𝒙, 𝑡 𝑑𝑡 + ∇ ⋅ 𝜌 𝒙, 𝑡 𝒖 𝒙, 𝑡 = 0 𝑑 𝑑𝑡 < f 𝜌 𝒙, 𝑡 𝑑Ω = − < g 𝜌 𝒙, 𝑡 𝒖 𝒙, 𝑡 𝑑𝑺 有限体積法 (ガウスの発散定理利用) 𝜌: 密度 𝑡: 時間 𝒖: 速度 𝒙: 座標 Ω: 体積 𝑺: 面積ベクトル Hで表現 𝑑 𝑑𝑡 < f 𝐻 𝒙, 𝑡 𝑑Ω = − < g 𝐻 𝒙, 𝑡 𝒖 𝒙, 𝑡 𝑑𝑺
  57. 57. isoAdvectorの数値モデル導出 計算格子セルにおける体積分率aは 60 𝑑 𝑑𝑡 < f 𝐻 𝒙, 𝑡 𝑑Ω = − < g 𝐻 𝒙, 𝑡 𝒖 𝒙, 𝑡 𝑑𝑺 𝛼 = 1 Ωhijj < f%&'' 𝐻 𝒙, 𝑡 𝑑Ω 𝛼で表現し時間に対して計算格子に対して離散化すると 𝛼 𝑡 + Δ𝑡 = 𝛼 𝑡 − 1 Ωhijj Σ𝑠k < B BlmB < g( 𝐻 𝒙, 𝑡 𝒖 𝒙, 𝑡 𝑑𝑺 𝑑𝑡 Dtの間に計算セル面jにおける計算格子セルに流入する流体Aの体積をDVj(t,Dt)とおくと Δ𝑉 < 𝑡, Δ𝑡 = H = =>?= H @" 𝐻 𝒙, 𝑡 𝒖 𝒙, 𝑡 𝑑𝑺𝑑𝑡 𝜌: 密度 𝑡: 時間 𝒖: 速度 𝒙: 座標 Ω: 体積 𝑺: 面積ベクトル 𝑠: 符号関数
  58. 58. isoAdvectorの数値モデル導出 61 𝛼 𝑡 + Δ𝑡 = 𝛼 𝑡 − 1 Ω:noo Σk𝑠kΔ𝑉 k 𝑡, Δ𝑡 最終的に式変形すると これをisoAdvectorで求めれば良い Δ𝑉 < 𝑡, Δ𝑡 = H = =>?= H @" 𝐻 𝒙, 𝑡 𝒖 𝒙, 𝑡 𝑑𝑺𝑑𝑡 = 𝜙< 𝑡 𝑺< H = =>?= H @" 𝐻 𝒙, 𝑡 𝑑𝑺𝑑𝑡 = 𝜙< 𝑡 𝑺< H = =>?= 𝐴< 𝑡 𝑑𝑡 f: 体積流量 𝐴< 𝑡 = H @" 𝐻 𝒙, 𝑡 𝑑𝑺 とおく Ajは計算格子セル面における流体Aの埋め込み面積 このAjを逐次幾何学的に求めて計算する
  59. 59. VOF関数移動の計算精度 VOF関数を移動させた際の計算 62 J. Roenby, H. Bredmose, H. Jasak, R. Soc. Open Sci. 3 (2016) 160405.
  60. 60. VOF関数移動の計算精度 J. Roenby, H. Bredmose, H. Jasak, R. Soc. Open Sci. 3 (2016) 160405. interIsoFoam(IsoAdvector)で計算する方が精度良く計算可能 interIsoFoam interFoam 63
  61. 61. interIsoFoamによるミルククラウンの実行例 64
  62. 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の実行
  63. 63. VOF法における代表的な問題点 66 ü VOF関数の数値的な拡散 ü Spurious current (Parasitic current) ü Laplace圧の誤差
  64. 64. VOF法における代表的な問題点 67 ü VOF関数の数値的な拡散 ü Spurious current (Parasitic current) ü Laplace圧の誤差
  65. 65. VOF関数の数値拡散 界面の拡散(誤差) 界面が拡散すると • 表面張力が正確に計算できない • 非物理的な界面形状 どのようにVOF関数の数値拡散を 低減するか? 68
  66. 66. VOF関数の数値拡散の低減方法 • 計算格子解像度 • Adaptive mesh refinement (AMR) • Caの変更 (interFoam) 69
  67. 67. VOF関数の数値拡散の低減方法 計算格子解像度 粗い格子解像度 細かい格子解像度 気液界面を正確に計算するためには計算格子解像度が必要 (特に気液界面付近で) 70
  68. 68. VOF関数の数値拡散の低減方法 • 計算格子解像度 • Adaptive mesh refinement (AMR) • Caの変更 (interFoam) 71
  69. 69. VOF関数の数値拡散の低減方法 AMR (Adaptive Mesh Refinement) 局所的に計算格子を切り直す方法 VOF法と一緒に利用することで、VOF関数の拡散を低減 interFoam, interIsoFoamで実行可能 八分木で計算格子を計算時間毎に分割 局所的に計算格子を細かくするので、 計算負荷があまり大きくならずに計算精度をあげることができる 72
  70. 70. VOF関数の数値拡散の低減方法:解析例 AMR (Adaptive Mesh Refinement) 格子局所分割を行っている 格子分割のおかげで界面の拡 散(誤差)が低下 注: 初期値の設定要注意 条件によっては計算が破綻 73
  71. 71. VOF関数の数値拡散の低減方法 • 計算格子解像度 • Adaptive mesh refinement (AMR) • Caの変更 (interFoam) 74
  72. 72. VOF関数の数値拡散の低減方法(interFoam) Caの変更 Ca = 1が標準値 Ca 大: 界面圧縮が強い 界面が圧縮されすぎて格子形状に沿ってガタガタする Ca 小: 界面圧縮が弱い VOF関数が拡散する 非物理的な気泡、液滴の分裂が発生しうる 後述のspurious currentが強くなり、誤差が大きくなる 流れが激しく、界面が拡散しやすく、 spurious currentの影響が小さい条件 流れが緩やかで、界面が拡散しにくく、 spurious currentの影響が大きい条件 75
  73. 73. VOF関数の数値拡散の低減方法:解析例 Caの変更 Ca = 0 Ca = 1 Ca = 2 Caが大きい方が拡散が低減 問題に応じてこの値を変更する必要あり 一般に、激しい気液界面振動の場合はCa大 (Ca大で非物理的な液面振動や気泡分裂も有り) 76
  74. 74. VOF関数の数値拡散の低減方法:解析例 圧縮オプションの変更 Ca = 1, ica = 0.5 Ca = 1 Ca = 1, sca = 1 等方的圧縮 剪断圧縮 あまり大きな差が見られない 問題に応じて利用する 77
  75. 75. VOF法における代表的な問題点 78 ü VOF関数の数値的な拡散 ü Spurious current (Parasitic current) ü Laplace圧の誤差
  76. 76. Spurious (Parasitic) current 79
  77. 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. 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. 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
  80. 80. VOF法における代表的な問題点 83 ü VOF関数の数値的な拡散 ü Spurious current (Parasitic current) ü Laplace圧の誤差
  81. 81. Laplace圧の誤差 Laplace圧 2種の流体を分ける表面を横切るときに生ずる静水圧のジャンプDp (表面張力の物理学 著 ドゥジェンヌ、ブロシャール−ヴィアール、ケレ 訳 奥村剛) 84 Δp = p0 in − p∞ out p0 in p∞ out 気泡中心部の圧力 壁境界での圧力 数値計算によるLaplace圧と理論値の比較 ∆𝑝 = 𝜎 1 𝑅 + 1 𝑅′
  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
  83. 83. Laplace圧の誤差 86 黒線(alpha = 0.5) E0 = 19 %
  84. 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の実行
  85. 85. OpenFOAMのディレクトリ構成 $HOME/OpenFOAM $WM_PROJECT_DIR $WM_PROJECT_USER_DIR run platforms applications このディレクトリ内で作業する。 (USER_NAME-version) 基本的に書き換えない。 計算実行用ディレクトリ バイナリ(実行)ファイル用ディレクトリ $WM_PROJECT_USER_DIR (USER_NAME-version) 自作solver, utility用ディレクトリ 移動コマンド(alias) run ここに計算するケースディレクトリを置く 88 foam $ mkdir –p $FOAM_RUN runディレクトリを作成
  86. 86. OpenFOAMのtutorialの場所 89 $ foam $ cd tutorials OpenFOAMのproject directoryに移動 OpenFOAMのproject directory内のtutorialが格納されている ディレクトリに移動 もしくは $ tut OpenFOAMのtutorialが格納されているディレクトリに移動 $WM_PROJECT_DIR/tutorials 格納されている場所
  87. 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. 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の中に移動
  89. 89. interFoamのtutorial 92 $ ls 今いるディレクトリ内のファイル、ディレクトリを表示 LES RAS laminar 各種乱流モデルの名前のディレクトリ 乱流モデルごとにtutorialが格納されている laminar 乱流モデルなし LES LESモデル RAS RAS(RANS)モデル 今回はlaminarのtutorialを使います $ cd laminar laminarの中に移動
  90. 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の中に移動
  91. 91. damBreakのtutorial 94 $ ls 今いるディレクトリ内のファイル、ディレクトリを表示 damBreak runの中にコピーしたdamBreakがあることが確認できる $ cd damBreak/damBreak damBreakの中に移動 $ ls 今いるディレクトリ内のファイル、ディレクトリを表示 0.orig Allclean Allrun constant system Allrunは前処理からプログラム実行まで全てを実行するスクリプト Allcleanは計算データを消去するスクリプト
  92. 92. ケースディレクトリの構造 ケースディレクトリ ケース名 (例:damBreak) 0.orig constant system U, alpha.water, p_rgh 各種変数の初期条件、境界条件の設定ディレクトリ 物性値、乱流モデルの設定ディレクトリ 計算スキーム、ユーティリティー等の設定ディレクトリ ケースディレクトリ内で計算を実行する 95
  93. 93. 0.origディレクトリの構造 各種変数の初期条件、境界条件の設定用フォルダ U alpha.water p_rgh 速度 圧力 VOF関数 0.orig 96 $ ls 0.orig 0.origディレクトリ内のファイル、ディレクトリを表示
  94. 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. 95. 境界条件 boundaryName { type fixedValue; value uniform (*x *y *z); } • fixedValue 固定値(Dirichlet境界条件) (x成分 y成分 z成分) • zeroGradient boundaryName { type zeroGradient; } 境界条件指定 • empty 境界の法線方向に勾配ゼロ boundaryName { type empty; } 境界条件指定 二次元計算をする場合に、 使用しない方向に対する境界条件 98
  96. 96. 境界条件 • inletOutlet boundaryName { type inletOutlet; value uniform (0 0 0); inletValue uniform (0 0 0); } 境界条件指定 外に出て行くときは勾配ゼロ 流入する場合は流入値を設定 計算値(初期条件は流入値と同じ) 流入するときの流入値 • fixedFluxPressure boundaryName { type fixedFluxPressure; value uniform 0; } 境界条件指定 速度境界で指定した流束になるよう 圧力修正する境界条件 初期値 99
  97. 97. 境界条件 • totalPressure boundaryName { type totalPressure; p0 uniform 0; } 境界条件指定 全体の圧力を規定 自由流入出条件で利用 計算値(初期条件は流入値と同じ) • pressureInletOutletVelocity boundaryName { type pressureInletOutletVelocity; value uniform (0 0 0); } 境界条件指定 境界面圧力勾配に応じて境界流入、 流出速度を決める自由流入出条件 初期値 100
  98. 98. 境界条件 • noSlip boundaryName { type noSlip; } 境界条件指定 滑りなし(壁面)条件 • constantAlphaContactAngle boundaryName { type constantAlphaContactAngle; theta0 45; limit gradient; value uniform 0; } 境界条件指定 静的接触角を決定 alpha(VOF関数)に利用 初期値 接触角 制限の掛け方 101
  99. 99. 境界条件 • dynamicAlphaContactAngle boundaryName { type dynamicAlphaContactAngle; uTheta 1; theta0 90; thetaA 70; thetaR 110; limit gradient; value uniform 0; } 境界条件指定 動的接触角を決定 alpha(VOF関数)に利用 前進角 速度スケール 平衡接触角 後退角 制限 初期値 • symmetry boundaryName { type symmetry; } 対称境界 境界条件指定 102
  100. 100. 境界条件 境界 圧力 速度 VOF関数 壁面 fixedFluxPressure fixedValue noSlip zeroGradient constantAlphaContactAngle dynamicAlphaContactAngle 自由流入出 (大気解放) totalPressure pressureInletOutlet Velocity inletOutlet 2次元面 empty empty empty 対称面 symmetry symmetry symmetry 103
  101. 101. constantディレクトリの構造 constant turbulenceProperties transportProperties 物性値、乱流モデルの設定用ディレクトリ polyMesh 計算格子データの格納 (計算格子作成後) 乱流モデルの設定 物性値の設定 g 重力加速度の設定 物性値や重力加速度の数値を変更する 104 $ ls constant constantディレクトリ内のファイル、ディレクトリを表示
  102. 102. g(重力加速度)の設定 重力加速度の次元を設定 左から順にkg, m, s, K, mol, A, cd 重力加速度のベクトルを決定 それぞれ、x,y,z方向の値を設定する 重力加速度を条件に応じて変更する 105 dimensions [0 1 -2 0 0 0 0]; value (0 -9.81 0);
  103. 103. turbulenceProperties (乱流モデル) の設定 乱流モデルを指定 laminar, RAS, LES 乱流モデルを設定する場合には設定を記入する 乱流モデルに応じて設定を記入する laminarの場合は乱流モデルを利用しないので特に必要なし 106 simulationType laminar;
  104. 104. transportProperties (物性値等) の設定 相の名前を指定 粘性モデル 動粘度 密度 粘性モデル 動粘度 密度 表面張力 107 phases (water air); water { transportModel Newtonian; nu 1e-06; rho 1000; } air { transportModel Newtonian; nu 1.48e-05; rho 1; } sigma 0.07;
  105. 105. systemディレクトリの構造 system 計算スキーム、条件、ユーティ リティーの設定用ディレクトリ controlDict fvSchemes fvSolution 解析の実行条件の設定 離散スキームの設定 時間解法やマトリックスソルバーの設定 blockMeshDict decomposeParDict setFieldsDict blockMeshの設定 並列計算時の分割設定 初期alphaの空間分布設定 108 $ ls system systemディレクトリ内のファイル、ディレクトリを表示 sampling データのサンプリングの設定
  106. 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. 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
  108. 108. controlDict 計算結果を保存する数(0なら全て保存、1なら現在の最終出力のみ保存、 2なら最終出力とその前の出力を保存) 出力フォーマット(ascii: ASCII形式/binary: Binary形式) 出力桁数(計算データの6桁まで出力) 出力ファイル圧縮の可否(onなら出力データはgzipになる) 時間の出力フォーマット設定(例. fixed: 0.003/scientific: 0.0e-03/ general: fixedとscientificを切り替え) 時間桁数(デフォルトでは6桁) 計算途中に計算条件を変えられるかどうかの可否 Courant数制御する場合の最大Courant数 Courant数制御する場合の最大Alpha Courant数 Courant数制御する場合の最大時間刻み purgeWrite 0; writeFormat ascii; writePrecision 6; writeCompression off; timeFormat general; timePrecision 6; runTimeModifiable yes; maxCo 1; maxAlphaCo 1; maxDeltaT 1; 111
  109. 109. fvSchemes ddtSchemes { default Euler; } gradScheme { default Gauss linear; } divSchemes { div(rhoPhi,U) Gauss linearUpwind grad(U); } 時間進行スキーム スキームの選択 勾配スキーム スキームの選択 発散スキーム(対流項) スキームの選択 112
  110. 110. fvSchemes laplacianSchemes { default Gauss linear corrected; } interpolationScheme { default linear; } snGradSchemes { default corrected; } ラプラシアンスキーム(粘性項、拡散項) 補間スキーム セル面の法線方向勾配スキーム スキームの選択 スキームの選択 スキームの選択 離散スキームの種類については下記参照 OpenFOAMユーザーガイド4章 OpenCAE学会 OpenFOAMによる熱移動と流れの数値解析 (森北出版) 113
  111. 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
  112. 112. fvSolution PIMPLE { momentumPredictor no; nOuterCorrectors 1; nCorrectors 3; nNonOrthogonalCorrectors 0; } relaxationFactors { equations { ".*" 1; } } PIMPLE法の設定 速度予測 外部反復回数 PIMPLE法の反復回数 追加的な反復計算回数設定 (非直交性の大きい計算格子を利用している場合に この係数を大きくすると計算が安定) PIMPLE法に利用する緩和係数 変数毎に記載 (1ならPISO法と同じになる) 0~1の間を設定する 115
  113. 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と名付けられる 頂点を取り囲むブロックを設定 上で名付けた頂点を選択し、分割数を記入
  114. 114. blockMeshDict 117 boundary ( leftWall { type wall; faces ( (0 12 16 4) (4 16 20 8) ); } 境界面を設定 境界名 境界の種類 面を取り囲む4つの頂点を指定 詳細に関してはOpenFOAM user guide参照
  115. 115. decomposeParDict 118 numberOfSubdomains 4; method simple; coeffs { n (2 2 1); } 並列分割数を決定 分割方法を決定 simple, scotch等さまざまなオプションがある simpleを指定した場合には(x y z)方向の それぞれの分割数を指定する 並列分割数と対応するようにする 並列計算を行わない場合は必要なし
  116. 116. setFieldsDict 119 defaultFieldValues ( volScalarFieldValue alpha.water 0 ); regions ( boxToCell { box (0 0 -1) (0.1461 0.292 1); fieldValues ( volScalarFieldValue alpha.water 1 ); } ); 全体のデフォルト値設定 直方体領域指定 値 直方体領域指定のオプション 他にも様々なオプションがある
  117. 117. 計算の実行 120 $ ./Allrun Allrunスクリプトを実行 もしくは、 $ cp –r 0.orig 0 $ blockMesh $ setFields $ interFoam 0.origを0へとコピー blockMeshによって計算格子作成 setFieldsによってaの初期分布を作成 interFoamによって計算実行
  118. 118. 計算結果の可視化 121 $ paraFoam paraviewを起動 ①
  119. 119. 計算結果の可視化 122 ① ①場の変数変更 alpha.water に変更
  120. 120. 計算結果の可視化 123 ① ①時間変更
  121. 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. 122. OpenFOAMのtutorialの場所 125 $ foam $ cd tutorials OpenFOAMのproject directoryに移動 OpenFOAMのproject directory内のtutorialが格納されている ディレクトリに移動 もしくは $ tut OpenFOAMのtutorialが格納されているディレクトリに移動 $WM_PROJECT_DIR/tutorials 格納されている場所
  123. 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. 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の中に移動
  125. 125. interFoam/laminarのtutorial 128 $ ls 今いるディレクトリ内のファイル、ディレクトリを表示 damBreak discInConstantFlowCyclocBCs …. damBreakWithObstacle discInReversedVortexFlow … 各種tutorialが格納されている 今回はdamBreakのtutorialを使います $ cp -r damBreak $FOAM_RUN/damBreakIso $FOAM_RUN(計算実行用ディレクトリ) の中にdamBreakIsoとしてdamBreakをコピー $ run runの中に移動
  126. 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. 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の中身を確認 各自やりすいやり方で中身を見てください
  128. 128. 計算の実行 131 $ ./Allrun Allrunスクリプトを実行 もしくは、 $ cp –r 0.orig 0 $ blockMesh $ setFields $ interIsoFoam 0.origを0へとコピー blockMeshによって計算格子作成 setFieldsによってaの初期分布を作成 interIsoFoamによって計算実行
  129. 129. 計算結果の可視化 132 $ paraFoam paraviewを起動 ①
  130. 130. 計算結果の可視化 133 ① ①場の変数変更 alpha.water に変更
  131. 131. 計算結果の可視化 134 ① ①時間変更
  132. 132. 先に進めて時間の余った方 135 是非以下のことにチャレンジしてみてください • ダムの形を変えて計算してみてください ヒント:system/setFieldsDictを編集し、setFieldsで初期位置を変更 • 堰の形を変えて計算してみてください ヒント:system/blockMeshDictを編集し、blockMeshで形状を変更 • interFoam, interIsoFoamの別のtutorialを試してください ヒント: $FOAM_TUTORIALS/multiphase/interFoam内の tutorialを$FOAM_RUNにコピーし実行 $FOAM_TUTORIALS/multiphase/interIsoFoam内の tutorialを$FOAM_RUNにコピーし実行
  133. 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/
  134. 134. 137

×