こんにちは(@t_kun_kamakiri)
今回は下記の記事で解説した圧力時刻歴データをParaViewで表示する方法について解説を行います。
↑こちらの記事で紹介した通り、指定した圧力の時刻歴データはOpenFOAMの設定「system/controlDict」ファイル内でfunctionObjectでprobesを設定することででも出力可能です。
こちらの実験データの圧力計測点と同じ位置の圧力データを取得する設定を行います。
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 |
/*--------------------------------*- C++ -*----------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Version: v2006 \\ / A nd | Website: www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Description Writes out values of fields from cells nearest to specified locations. \*---------------------------------------------------------------------------*/ #includeEtc "caseDicts/postProcessing/probes/probes.cfg" //probes 設定の挿入 fields (p p_rgh); // プローブする場 probeLocations ( (0.8245001 0 0.0205) // プローブ座標 P1 (0.8245001 0 0.0605) // プローブ座標 P2 (0.8245001 0 0.1005) // プローブ座標 P3 (0.8245001 0 0.1405) // プローブ座標 P4 (0.8040 0 0.161 ) // プローブ座標 P5 (0.7640 0 0.161 ) // プローブ座標 P6 (0.7240 0 0.161 ) // プローブ座標 P7 (0.6840 0 0.161 ) // プローブ座標 P8 ); interpolationScheme cellPoint; // 補間スキーム // ************************************************************************* // |
- 「fields (p p_rgh);」で出力する物理量を指定します。
- probeLocationsで出力したい座標位置を指定します。
- 「interpolationScheme cellPoint」はセル値による線形重み付け補間スキーム
probesをsystem/controlDictで読み込みます。
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
/*--------------------------------*- 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 controlDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // application interFoam; startFrom startTime; startTime 0; stopAt endTime; endTime 8; deltaT 0.001; writeControl adjustable; writeInterval 0.1; purgeWrite 0; writeFormat ascii; writePrecision 6; writeCompression off; timeFormat general; timePrecision 6; runTimeModifiable yes; adjustTimeStep yes; maxCo 0.5; maxAlphaCo 0.5; maxDeltaT 1; functions // 関数定義 { #includeFunc solverInfo(U,p,alpha.water); residuals { type solverInfo; libs ("libutilityFunctionObjects.so"); fields (".*"); } #includeFunc probes; // 壁面での圧力時系列モニター用のプローブ } // ************************************************************************* // |
本来はこちらの設定の方が結果処理の手間が省けて良いのですが、計算実行後に設定し忘れて(もしくは後で見たくなった)などの理由で可視化ソフトで表示させたいということは稀にあります。
3次元ダムブレイクの実験の指定した座標位置での圧力をParaViewで表示する方法について解説を行います。
OpenFOAM初心者でチュートリアルを動かしたことがある方を対象にしています。
DEXCS2020
OpenFOAM v2006
gnuplot 5.2
3次元ダムブレイクの実験データと解析モデル
実験データ
こちらの実験データのより以下の時刻歴データを計測しています。
- 圧力計測点P1~P8←今回OpenFOAMと比較する対象
- 水面の高さH1~H4
そこそこ実験とOpenFOAMの結果が合っていますね。
解析モデル
OpenFOAMでの解析モデルの設定方法は下記の記事に書いています。
※追々ファイルもモデルファイルも公開します。
ParaViewで圧力の時刻歴表示
操作方法はこちらに記載しています。
今回はp2の位置の圧力での比較を行いました。
ただし、OpenFOAMの結果の方は実験での測定箇所と全く同じ位置に節点がないため近しい場所での圧力データを拾ってきています。
まとめ
ParaViewで指定した座標の圧力の時刻歴をグラフ化しました。
ついでに実験のExcelデータも読み込んでOpenFOAMの結果と比較を行いました。
※ただし、OpenFOAMの結果の方は実験での測定箇所と全く同じ位置に節点がないため近しい場所での圧力データを拾ってきています。
本記事で紹介した方法以外にも、以下のように実験データと全く同じ座標での圧力データの取得が可能です。さらにPythonを使うと自動化もできます。
次回はこちらをテーマにします。
ParaViewとPythonだけでも色々できるということがわかった。 pic.twitter.com/ieZIKoQWtD
— カマキリ🐲Python頑張る昆虫 (@t_kun_kamakiri) June 19, 2022
参考書
PENGUINさんサイトを体系的に学べる書籍となっています。ネット記事でも十分勉強できるのですが、OpenFOAMの初学者でOpenFOAMをインストール済みであれば一冊持って置き、体系的に学ぶのが良いでしょう。
あとは初心者向けに丁寧に解説がされているこちらの書籍もお勧めです。最後の章にはオーバーセットメッシュ(重合メッシュ)の機能を使った解析を最後まで丁寧に解説しているので挫折することはないでしょう。