こんにちは(@t_kun_kamakiri)
本記事はOpenFOAMを使って3次元ダムブレイクのメッシュ作成・解析設定と実験データとの比較までをまとめたOpenFOAMの初級者の記事です。
以前にOpenFOAMのユーティリティのみを使ってメッシュ作成から3次元ダムブレイクの実験データとの比較までを行いましたが、今回はOpenFOAMのメッシュ作成としては比較的わかりやすい「blockMeshとsnappyHexMesh」を使って解析までを行います。
- 【topoSetコマンド(OpenFOAM)】3次元ダムブレイクモデル作成(1)
- 【subsetMeshコマンド(OpenFOAM)】3次元ダムブレイクモデル作成(2)
- 【setFieldsコマンド(OpenFOAM)】3次元ダムブレイクモデル作成(3)
- 【interFoam(OpenFOAM)】3次元ダムブレイクモデル解析実行(4)
- 【probes(OpenFOAM)】指定した座標点での値を出力(5)
- 【refineMesh(OpenFOAM)】メッシュの再分割(6)
- 【gnuplot実験の圧力データ比較(OpenFOAM)】3次元ダムブレイクの解析(7)
- 【gnuplot実験の水面高さデータ比較(OpenFOAM)】3次元ダムブレイクの解析(8)
OpenFOAM初心者でチュートリアルを動かしたことがある方を対象にしています。
DEXCS2020
OpenFOAM v2006
3Ddambreakモデル
※本記事ではDEXCS2020(OpenFOAM v2006)を元に作成していますが、「CAEモデルと資料」はDEXCS2021(OpenFOAM v2106)で解説しています。
解析には問題ありませんが、ParaViewバージョンが異なるのでpvpythonを使う場合はバージョンを合わせてください。
混相流に関する理論はこちらで詳しく解説されております。
半年程度経ったのでオープンCAEサマースクール2022の資料を公開しましたhttps://t.co/UEKMoJIApS
— nunuma (@takuya_Yamamo) January 8, 2023
対象の実験データ
実験データの入手
今後、3次元ダムブレイクの実験との比較を行うため実験データを入手します。
OpenFOAMで作成する寸法も実験に合わせて作成します。
実験では初期状態で青斜線で囲まれた領域に水をセットし、時刻0秒で開放します。
その後水はBoxと書かれた障害物に当たり、水しぶきをあげます。
この時に実験データとして、
- p1~P8の座標で圧力の時刻歴
- H1~H4の座標での水面の高さの時刻歴
という時刻歴データを測定しています。
本記事ではこちらの時刻歴データをOpenFOAMでも計測し、実験データとOpenFOAMを使ったCAE解析の比較を行いたいと思います。
3次元ダムブレイクの実験データとOpenFOAM比較。
ちょっと理解できた。 pic.twitter.com/GpFELWtwWj— カマキリ🐲Python頑張る昆虫 (@t_kun_kamakiri) May 27, 2022
最終的にはツイートであげたような結果となります。
実務では、実験データとCAE解析の結果に対して精度良く再現できているかどうかを確認して使用することがあり「実験検証 コリレーション」と呼ばれています。
最後に実験とのコリレーションについても言及します。
ケースファイルの入手
実験の寸法に近しいケースファイルのチュートリアルから入手します。
以下のコマンドを打って解析実行したいフォルダにコピーしてきます。
1 | cp -r $FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreakWithObstacle/ . |
ファイル構成は以下のようになっています。
treeコマンドを打って確かみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | kamakiri@kamakiri-VirtualBox /opt/OpenFOAM/OpenFOAM-v2006/tutorials/multiphase/interFoam/laminar/damBreakWithObstacle $ tree . ├── 0.orig │ ├── U │ ├── alpha.water │ ├── k │ ├── nut │ ├── omega │ └── p_rgh ├── Allclean ├── Allrun ├── constant │ ├── dynamicMeshDict │ ├── g │ ├── transportProperties │ └── turbulenceProperties └── system ├── blockMeshDict ├── controlDict ├── decomposeParDict ├── fvSchemes ├── fvSolution ├── setFieldsDict └── topoSetDict 3 directories, 19 files |
使わないファイルもありますが、今回の解析に一番近いチュートリアルを持ってきました。
全体の流れ
CAE解析には「プリ処理」→「ソルバ」→「ポスト処理」という流れがあります。
全て無償のソフトを使うため、解析実行まで様々なソフトを使います。
FreeCAD 障害物のモデル作成
障害物のモデル作成はFreeCADで行います。
モデルの作成
資料の作成手順に従って障害物のモデル(stlファイル)を作成してください。
最終アウトプットは「walls.stl」という名前のstlファイルを出力することです。
作成したモデルは「constant/triSurface」に保存します。
※triSurfaceフォルダがなければ新規で作成しましょう。
今回作成した「walls.stl」は大きさも位置も実験のレイアウトと合っていないので、以下の操作で正しい大きさと位置関係に修正します。
FreeCADで大きさと位置を正しく行っても良かったのですが、できるだけOpenFOAMのユーティリティを使ってみたかったのであえて修正が必要なモデルのままFreeCADで作成しました。
障害物モデルの縮小と平行移動
※こちらの操作はblockMeshをした後に行っても良いです。
先ほど作成したモデルの寸法を確認しておきましょう。
Paraviewを起動してwalls.stlファイルを読み込みます。
先ほどFreeCADで作成したさいの寸法がそのまま値として入っています。
この後行う流体解析での単位系は(m-kg-sec)で行うため 、今のままでは「161m×403m×161m」で解析を行うことになっているため修正が必要です。
※単位系は解析者が任意に選ぶことができるので、例えば(mm-kg-ms)や(mm-ton-sec)など自身が行う解析のスケールに合わせて単位系を自由に選べばよいです。
その際に全ての物理量の単位も変更する必要があるため注意が必要です。
例えば(mm-kg-ms)の単位系なら圧力はPaではなくGPaとなります。
さらに障害物の位置も原点を基準に作られているため、実験の位置に合わせるため平行移動させる必要があります。
よって以下の2点を修正します。
- モデルを1/1000倍にして縮小→mmの単位になる
- (x,y,z)=(0.6635mm -0.2015mm 0mm)だけ平行移動する
モデルを1/1000倍にして縮小→mmの単位になる
1 | surfaceConvert -scale 0.001 constant/triSurface/walls.stl constant/triSurface/walls_mm.stl |
モデルを縮小して新たにwalls_mm.stlファイルを作成しました。
Paraviewでのベースメッシュとの位置関係はこんな感じです。
続いて障害物の平行移動を行います。
(x,y,z)=(0.6635mm -0.2015mm 0mm)だけ平行移動する
1 | surfaceTransformPoints -translate "(0.6635 -0.2015 0)" constant/triSurface/walls_mm.stl constant/triSurface/walls_mm_tr.stl |
平行移動を行い、新たにwalls_mm_tr.stlファイルを作成します。
大変貴重な記事ありがとうございます。