こんにちは(@t_kun_kamakiri)
自宅でOpenFOAMを使って流体解析を使用していてふと、境界条件を時間変化させたい場合はどうすれば良いのかなと思ったので調べてみました。
どうやって時刻歴で流入条件を与えれば良いのかな?
しかも質量流を流入条件にしたいのですが・・・
案外すぐに見つかりました。
本記事では以下の1~3の設定を記載しておきたいと思います。
No. | 流入のタイプ | 時刻歴の変化 |
1 | 流速(m/s) | テーブルで指定 |
2 | 流速(m/s) | csvファイルで指定 |
3 | 質量流(kg/s) | csvファイルで指定 |
チュートリアル:IncompressileのpitzDaily
今回は「/tutorials/incompressiblepimpleFoam/laminar/pitzDaily」にあるチュートリアルで試験的に試してみました。
まずはチュートリアルを動かすと・・・・
流入条件はファイル名「U」の中の、流入面の名前inletの部分を編集すれば良いです。
非定常流入条件と質量流の設定はこちらの記事を参考
僕が使っているOpenFOAMのバージョンは
OpenFOAM v6
です。
過去にOpenFOAMの設定方法を詳しく記事にまとめてくださっているものもありますが、バージョンの違いなどもあり動作しない場合があります・・・(._.)
PENGUINITISさんの記事がOpenFOAMの情報として最も整っているのではないかと思います。
バージョンの違いによって混乱しますが、そこは公式サイトで調べれば解説がある場合があります。
【非定常の流入条件】
https://cfd.direct/openfoam/user-guide/v6-boundaries/
しかし、OpenFOAMのバージョンが違うからか(記事はOpenFOAM 2.1.0)、csvファイルから読み込みがうまくいきませんでしたので、↓こちらを参考にしました。
https://cfd.direct/openfoam/user-guide/v6-boundaries/
【流入条件に質量流を指定する方法】
http://penguinitis.g1.xrea.com/study/OpenFOAM/bc_settings.html
No.1:流速m/sをテーブルで指定して時刻歴変化
流速の時刻歴変化を与える場合は、以下のようにtableで指定して、
(時間 (流速x 流速y 流速z))
とすればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | inlet { type uniformFixedValue; uniformValue table ( (0 (0 0 0)) (0.01 (10 0 0)) (0.02 (1 0 0)) (0.03 (5 0 0)) (0.04 (20 0 0)) (0.09 (1 0 0)) ); outOfBounds clamp; } |
“outOfBounds” は、計算時間がリストのデータをはみ出してしまったときにどのように流速を指定するというものです。
- clamp: はみ出たら最後の値をそれ以後使う。←今回はこれを使っています。
- repeat: データを繰り返す。
- error: はみ出たら止まる。
- warn: はみ出たら警告を出す。値は clamp と同じ。
No.2:流速m/sをcsvファイルで指定して時刻歴変化
No.1のようにテーブルで指定する方法は、1行ずつ手打ちで指定しないといけないのでとっても面倒です。
試験データとか理論計算した時刻歴変化を流入条件に与えたい場合は、やっぱりデータとそのまま与えたいです・・・・
ということで、「csvファイル」を流入条件に与えるようにしたいと思います。
↓こちらを参考にします。
https://cfd.direct/openfoam/user-guide/v6-boundaries/
↓解析するディレクトリに「velocity.csv」をおいておきました。
↓「velocity.csv」のファイルはこんな感じ~
↓設定はこのように書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | inlet { type uniformFixedValue; uniformValue { type csvFile; nHeaderLine 1; refColumn 0; componentColumns (1 2 3); separator ","; mergeSeparators no; file "$PWD/velocity.csv"; } } |
- nHeaderLine:ヘッダーは今回1行だけあるので「1」とします。
- refColumn 0:時間は1列目にあるので「0」と書きます。0がはじめの列という意味
- componentColumns (1 2 3):データの列はいくつかを指定。
- separator “,”:データはカンマ区切りですよってことの指定。
- mergeSeparators no:こいつの意味は不明(笑)
- $\$$PWD/velocity.csv:「velocity.csv」がどこにあるかを指定。
今回はカレントディレクトリにcsvファイルをおいたので、環境変数「$\$$PWD」で現在パスを指定しておきました。
No.3:質量流kg/sをcsvファイルで指定して時刻歴変化
No.2で流入条件として流速をcsvファイルで与えることができたのなら、質量流(kg/s)もできるだろうってことでやってみました。
↓解析するディレクトリに「massflow.csv」という名前のcsvファイルをおいておきます。
↓「massflow.csv」の中身はこんなかんじ~
先ほどの流速ベクトルと違って質量流はスカラーで与える必要があります。
↓設定はこのように書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | inlet { type flowRateInletVelocity; massFlowRate { type csvFile; nHeaderLine 1; refColumn 0; componentColumns (1); separator ","; mergeSeparators no; file "$PWD/massflow.csv"; } rhoInlet 1; // [kg/m3] value uniform (0 0 0); } |
typeを「flowRateInletVelocity」として、「massFlowRate」と書いて流入条件を質量流と指定をします。
- componentColumns (1):スカラー量なので「1」と指定します。
- file “$PWD/massflow.csv”:現在パスを指定して「massflow.csv」を読み込みます。
- rhoInlet 1:あくまで流入条件は流速で与えているので、質量流を与えつつ流速に計算しなおす必要があるので密度を指定します。
質量流は、\(\dot{m}=\rho A v\)です。
\(A\)が流入面の面積なので密度\(\rho\)を与えれば流速\(v\)が計算できます。
この場合は、面に垂直に流速ベクトルを与えているのだろうか・・・←わかっていないです(*_*;
どうにか設定ができたので、計算して流入面での流速変化を見てみます。
流速が正しいか計算してみましょう。時刻0.01sだけ計算で見積もってみましょう。「massflow.csv」ファイル内で、時刻0.01sで質量流0.00001kg/sを与えています。
流入面の面積:\(A=0.25*1\)m2で、密度\(\rho=1.0\)kg/m3としています。
だから、流速は\(v=\frac{\dot{m}}{\rho A}=0.4\)m/sとなっているはずです。
確かに、CAE解析の結果も0.01sで流速\(v=0.4\)m/sです。