OpenFOAM

【圧力時刻歴データ(OpenFOAM)】ParaViewとPythonを使って自動化する方法(10)

こんにちは(@t_kun_kamakiri

今回は下記の記事で解説した圧力時刻歴データをParaViewとPythonを使って自動化する方法について解説を行います。前回の記事でも圧力の時刻歴データのグラフ化を行いましたが、指定した座標に節点がない場合にデータを出力できないという問題点がありました。

↑こちらの記事で紹介した通り、指定した座標の圧力の時刻歴データはOpenFOAMの設定「system/controlDict」ファイル内でfunctionObjectでprobesを設定することででも出力可能です。

system/probes

こちらの実験データの圧力計測点と同じ位置の圧力データを取得する設定を行います。

  • 「fields (p p_rgh);」で出力する物理量を指定します。
  • probeLocationsで出力したい座標位置を指定します。
  • 「interpolationScheme cellPoint」はセル値による線形重み付け補間スキーム

probesをsystem/controlDictで読み込みます。

system/controlDict

本来はこちらの設定の方が結果処理の手間が省けて良いのですが、計算実行後に設定し忘れて(もしくは後で見たくなった)などの理由で可視化ソフトで表示させたいということは稀にあります。

今回の内容

3次元ダムブレイクの実験の指定した座標位置での圧力をParaViewで表示する方法について解説を行います。

OpenFOAM初心者でチュートリアルを動かしたことがある方を対象にしています。

DEXCS2020
OpenFOAM v2006
gnuplot 5.2

3次元ダムブレイクの実験データと解析モデル

実験データ

こちらの実験データのより以下の時刻歴データを計測しています。

  • 圧力計測点P1~P8←今回OpenFOAMと比較する対象
  • 水面の高さH1~H4

ちなみに「system/controlDict」ファイル内でfunctionObjectのprobeで特定座標の圧力を取得し、実験データと比較したものが下記となります。

そこそこ実験とOpenFOAMの結果が合っていますね。

解析モデル

OpenFOAMでの解析モデルの設定方法は下記の記事に書いています。
※追々ファイルもモデルファイルも公開します。

ParaViewで圧力の時刻歴表示

操作方法はこちらに記載しています。

今回は自動化をさせたいのでPythonスクリプトに操作を記録しています。
ただし、この資料内ではP1の座標のみのデータを取得しています。

最終的には「probe_main_Alltime.py」には以下の記述がされています。

probe_main_Alltime.py

ターミナル上で以下のコマンドを打つことでPythonスクリプトを実行することができます。

今回はP1座標の結果のみを取得しましたが、以下でprobe_main_Alltime.pyの中身を編集してP1~P8の座標のデータを自動で取得するプログラムにします。

Pythonスクリプトの編集

P1~P8の座標の圧力の取得するプログラムに編集したのがこちらです。

probe_main_Alltime.py

まずP1~p8の座標を辞書型で定義しました。

そしてその辞書型をfor文で繰り返しています。
probe_points[point]とすることでpointにキーが格納され(p1~p8)、probe_points[point]がキーに対応する値(座標)になります。
probeLocation1.ProbeType.Center = probeで座標を代入しています。

以下の部分で位置を区別したcsvファイルを出力しています。

pvpythonはバージョン2.7なので、最新のPythonのバージョン3系とは書き方が異なることに注意する必要があります。

これでもう一度はターミナル上で以下のコマンドを打ちます。

このように「p*.csv」がずらっと出ていればOKです。
p1~p8の座標の1~8秒までのステップ(0.1秒刻み)で出力しています。

Pythonでデータを繋げる

「p1.0.csv」の中身を見ると以下のようにp1座標の0ステップ目(0秒)での物理量が入っているだけです。

これをPythonを使って各ステップのデータを繋げる作業が必要です。

jupyter labを使ってデータを繋げます。
※ここでのPythonは3系です。

まとめると以下のようになります。

こちらを実行すると「point.jpg」という画像ファイルが出力されます。
画像の余白など修正が必要ですが、今はあまりこだわらずにいます。

#subprocess.run([‘pvpython’,’probe_main_Alltime.py’])のコメントアウトを外すと、「pvpython probe_main_Alltime.py」が実行されてp1~p8の各ステップの物理量のcsvファイルが出力されます。
はじめてcsvファイルを出力する場合はこちらを使えば良いです。

まとめ

今回は圧力時刻歴データをParaViewとPythonを使って自動化する方法について解説を行いました。計算を実行した後にどうしてもデータが欲しいという場合は、ParaViewとPythonを使うことでデータ処理を行うことができます。

今回はPythonを使いましたが、理由はPythonが簡単で慣れているからであることと、ParaViewのマクロがPythonで記述されているのでその延長でPythonのみを使いました。グラフ化の部分はgnuplotを使ってもいいですし、その他の言語や有料のソフトを使っても良いでしょう。

参考書

PENGUINさんサイトを体系的に学べる書籍となっています。ネット記事でも十分勉強できるのですが、OpenFOAMの初学者でOpenFOAMをインストール済みであれば一冊持って置き、体系的に学ぶのが良いでしょう。

OpenFOAMによる熱移動と流れの数値解析(第2版)

OpenFOAMによる熱移動と流れの数値解析(第2版)

3,520円(11/21 07:56時点)
Amazonの情報を掲載しています

あとは初心者向けに丁寧に解説がされているこちらの書籍もお勧めです。最後の章にはオーバーセットメッシュ(重合メッシュ)の機能を使った解析を最後まで丁寧に解説しているので挫折することはないでしょう。

OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))

OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))

川畑 真一
1,980円(11/21 19:20時点)
発売日: 2021/02/26
Amazonの情報を掲載しています
関連記事もどうぞ

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です