こんにちは(@t_kun_kamakiri)
今回は3次元ダムブレイクの実験データと比較を行うため、指定した座標点での圧力値を出力方法について解説します。
使用しているベースとなるチュートリアルは「$FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreakWithObstacle/」よりコピーして使っています。
指定した座標点での圧力値を出力方法の解説
※今回の設定ではうまく指定した座標での圧力値を拾うことができませんでした。理由は指定した座標にメッシュの節点が存在しないためです。これについて、次回の記事で修正を行っていますので、今回はこのような失敗もあるのだという認識を持ってもらうためにあえて失敗した内容で記事を書いています。
OpenFOAM初心者でチュートリアルを動かしたことがある方を対象にしています。
DEXCS2020
OpenFOAM v2006
指定した座標位置で値を出力
今回はこちらの実験データの圧力計測点と同じ位置の圧力データを取得する設定を行います。
system/probesというファイルを作成し以下のように記述します。
system/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」はセル値による線形重み付け補間スキーム
「#includeEtc “caseDicts/postProcessing/probes/probes.cfg” 」の#includeEtcは短縮形のインクルードです。
「$FOAM_ETC/caseDicts/postProcessing/probes/probes.cfg」をインクルードするようにしている宣言文です。
ファイルの中に身は以下となっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /*--------------------------------*- C++ -*----------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Version: v2006 \\ / A nd | Website: www.openfoam.com \\/ M anipulation | \*---------------------------------------------------------------------------*/ type probes; libs ("libsampling.so"); writeControl timeStep; writeInterval 1; // ************************************************************************* // |
- writeControlで出力設定
- writeIntervalで書き出す時間間隔(sec)
定型文として変更をする必要がないのでインクルードで読み込んでいるということですね。
controlDictでprobesの読み込み
system/probesで記述した内容をsystem/controlDictでインクルードする必要があります。
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 | /*--------------------------------*- 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 probes; // 壁面での圧力時系列モニター用のプローブ } // ************************************************************************* // |
設定が終わったので以下のコマンドで解析を実行しましょう。
1 2 3 | decomposePar mpirun -np 4 interFoam -parallel reconstructPar |
計算が終わったらparaviewで結果を確認しましょう。
計算結果におかしな点はなさそうです。
指定した座標の圧力を確認
「postProcessing/probes/0/p」ファイルを確認してみましょう。
Probes0~3の4点がNot Foundになっています。
これは出力したい座標位置に節点がないためであると考えられます。
なぜ上手くいかなかったのかParaviewで確認
Paraviewは以下のコマンドで起動することができます。
1 | paraFoam |
起動したら「Apply」通してデータを読み込み、y軸断面を見てみましょう。
さらに指定した座標付近の節点の座標を表示してみます。
確認するとやはり指定した座標位置に節点がないことがわかりました。
原因は、メッシュ作成の障害物部分をtopoSetで作成したときのメッシュが粗すぎて、大きめに障害物が作成されたことによると考えられます。
以下の手順で修正することを考えます。
- 障害物近辺をメッシュ再分割する(refineMesh)
- 再度、topoSetとsebsetMeshでメッシュ作成
次回の記事で修正したものを解説します。
まとめ
指定した座標の物理量の出力設定を解説しました。
今回のメッシュではメッシュが粗すぎるため、指定した座標位置の圧力を出力することができませんでした。次回は障害物近辺だけメッシュを再分割して、再度解析を行いたいと思います。
参考書
PENGUINさんサイトを体系的に学べる書籍となっています。ネット記事でも十分勉強できるのですが、OpenFOAMの初学者でOpenFOAMをインストール済みであれば一冊持って置き、体系的に学ぶのが良いでしょう。
あとは初心者向けに丁寧に解説がされているこちらの書籍もお勧めです。最後の章にはオーバーセットメッシュ(重合メッシュ)の機能を使った解析を最後まで丁寧に解説しているので挫折することはないでしょう。