こんにちは(@t_kun_kamakiri)
今回は3次元ダムブレイクの実験と同じ状況を再現するためOpenFOAMユーティリティであるsetFieldsコマンドについて解説をします。
メッシュ作成は前回までの記事で終わっているので下記をご参考ください。
setFieldsコマンドは物理量の初期状態の分布を作るときに便利なOpenFOAMのユーティリティです。
setFieldsコマンドコマンドを使って空気と水の初期状態を作る。
OpenFOAM初心者でチュートリアルを動かしたことがある方を対象にしています。
DEXCS2020
OpenFOAM v2006
解くべき方程式
OpenFOAMの2相流のソルバ”interFoam”を用いて3次元ダムブレイクの解析を行います。
ツール
- OpenFOAM:v2006
- ソルバ:inerFoam
解くべき方程式
- 運動方程式(2次元)
- 体積分率の保存
- 表面張力
※VOFによる界面の表現
今回使っている「interFoam」のソルバはVolume Of Fluid(VOF)法による、二相流ソルバーです。
相の区別を各相の体積分率(0~1)で行い、密度や粘性を体積分率をかけて、ナビエストークス方程式を解いています。
ナビエストークス方程式
密度
粘性
表面張力
非圧縮の条件
体積分率の移流方程式
※\(\alpha_{2}=1-\alpha_{2}\)
※\(\kappa\):界面の曲率
※\(\gamma\):界面張力
setFieldsコマンド
空気と水の領域をVOF法で設定する場合はsetFieldsDictによって設定を行います。
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 27 28 29 30 31 32 33 34 35 36 37 | /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: v2006 | | \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "system"; object setFieldsDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // defaultFieldValues ( volScalarFieldValue alpha.water 0 volVectorFieldValue U (0 0 0) ); regions ( boxToCell { box (1.992 -1 0) (3.22 1 0.55); fieldValues ( volScalarFieldValue alpha.water 1 ); } ); // ************************************************************************* // |
setFieldsのオプションは以下があります。
- -case dir
Specify case directory to use (instead of cwd) - -decomposeParDict file
Use specified file for decomposePar dictionary - -dict file
Alternative setFieldsDict - -parallel
Run in parallel [Parallel option] - -region name
Specify alternative mesh region - -doc
Display documentation in browser - -help
Display short help and exit - -help-full
Display full help and exit
defaultFieldValuesでデフォルトの各相の体積分率と速度を設定することができます。
- volScalarFieldValue alpha.water 0
- volVectorFieldValue U (0 0 0)
boxToCellでどの領域にどのような設定を行うかを指定します。
- box (1.992 -1 0) (3.22 1 0.55)
- volScalarFieldValue alpha.water 1
boxはメッシュからはみ出た部分でもエラーは出ないので、境界ギリギリの寸法にせず大きめに設定しても良いです。
ではsetFieldsコマンドを実行して空気と水の体積分率を作成しましょう。
1 | setFields |
paraviewで結果を確認しましょう。
(おまけ)ケルビンヘルムホルツ不安定性
setFieldsは体積分率だけではなく初期の速度分布も作ることができます。
例えば下記の記事でやったようにsetFieldsにすると初期の速度分布も作ることができます。
setFieldsDictだけ設定を載せておきます。
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 27 28 29 30 31 32 33 34 35 36 37 38 | /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 4.x | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "system"; object setFieldsDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // defaultFieldValues ( volScalarFieldValue alpha.water 0 volVectorFieldValue U (1.0 0 0) ); regions ( boxToCell { box (0 0 0) (1.2 0.2 0.1); fieldValues ( volScalarFieldValue alpha.water 1 volVectorFieldValue U (1.5 0 0) ); } ); // ************************************************************************* // |
このような設定を行うことでケルビンヘルムホルツ不安定性の解析も行うことができます。
このままケルビンヘルムホルツ不安定性により雲を表現。#OpenFOAM https://t.co/T9KzPyDn0H pic.twitter.com/Tj8NP9urXo
— カマキリ🐲Python頑張る昆虫 (@t_kun_kamakiri) March 3, 2022
setFieldsは今回のような混相流だけではなく速度分布だけを変えたい場合にも使うことができます。
まとめ
今回はsetFieldsコマンドを使って空気と水の初期状態を作りました。
次回、3次元ダムブレイクの計算を実行してみましょう。
以下のように赤色の水が障害物にぶつかって飛び跳ねる様が見られます。
このような計算結果と実験データとの比較を行う予定ですので乞うご期待!
参考書
PENGUINさんサイトを体系的に学べる書籍となっています。ネット記事でも十分勉強できるのですが、OpenFOAMの初学者でOpenFOAMをインストール済みであれば一冊持って置き、体系的に学ぶのが良いでしょう。
あとは初心者向けに丁寧に解説がされているこちらの書籍もお勧めです。最後の章にはオーバーセットメッシュ(重合メッシュ)の機能を使った解析を最後まで丁寧に解説しているので挫折することはないでしょう。