こんにちは(@t_kun_kamakiri)
本記事ではParaViewの自動化の方法を解説します。
ParaViewはデータの可視化ソフトであるので、CAE解析などの結果を決まったフォームで処理したい場合などには、本記事のようなParaView操作を記録したPythonスクリプトを実行するだけで処理が終わる自動化をご活用ください。
OpenFOAMのチュートリアルのpitzDailyの結果をParaViewを使って画像ファイルにする
本記事をきっかけにParaViewの自動化をはじめてみてください。
参考になる記事は以下となります。
ParaView 5.11.0
OpenFOAM v2306
WSL2 ubuntu20.04
今回はWSL2でParaViewを動かします。
OpenFOAMのチュートリアルをコピー
まずは適当にOpenFOAMのチュートリアルをコピーします。
1 | cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily 018_paraviewAuto |
「$FOAM_TUTORIALS」の部分はバージョンによって変わる環境変数の部分ですので、以下のようにどこのフォルダを指しているのかは確認してみると良いです。
1 2 | echo $FOAM_TUTORIALS /usr/lib/openfoam/openfoam2306/tutorials |
適当なチュートリアルを持ってきたので、本番ではご自身の解析を使ってください。
ParaViewの実行ファイルを確認
ParaViewのインストールしたフォルダに行き「bin」の中を覗いてみます。
いくつか重要な実行ファイルがありますが、ParaView ユーザーズガイドから抜粋すると・・・
ParaView には、目的の異なる複数の実行ファイルが付属しています。
1.3.1. paraview
これは、メインの ParaView グラフィカルユーザーインターフェイス(GUI)です。ほとんどの場合、ParaView を参照するときには、このアプリケーションについて説明しています。QtベースのクロスプラットフォームUIで、ParaView コンピューティング機能にアクセスできます。このガイドの主要部分は、このアプリケーションの理解と使用方法に特化しています。1.3.2. pvpython
pvpython
は、Pythonスクリプトを実行するPythonインタプリタです。これはスクリプトを実行するためのparaview
に相当するものと考えることができます。1.3.3. pvbatch
pvpython
と同様に、pvbatch
は ParaView のPythonスクリプトを実行するPythonインタプリタでもあります。1つの違いは、pvpython
は対話型スクリプトを実行するためのものですが、pvbatch
はバッチ処理用に設計されていることです。また、MPI機能を使用してコンピュータリソース上で実行する場合は、pvbatch
を並列で実行できます。これについては、7.10 章 で詳しく説明します。1.3.4. pvserver
リモート可視化では、この実行可能ファイルはすべてのデータ処理を実行するサーバを表し、場合によってはレンダリングも実行します。paraview
を、HPCリソース上でリモートで実行されているpvserver
に接続できます。これにより、あたかもデスクトップ上でローカルに処理しているかのように、デスクトップからHPCリソースの可視化と分析を構築および制御できます
どうやら、要約すると
- paraview.exe:paraviewを起動できる
- pvpython:pythonが起動
- pvbatch:pythonのバッチ処理
コマンドでParaViewを起動させる
paraview.exeでWSL2でもParaViewが起動できるというこということで起動してみましょう。
1 | /mnt/c/work/ParaView-5.11.0-Windows-Python3.9-msvc2017-AMD64/bin/paraview.exe |
絶対パスで指定していますが、Pathを通せばparaviewのコマンドでParaViewソフトを起動できるでしょう。
ここでは、Pathを設定するということはせず上記のように絶対パスをべた書きして試してみます。
上記のコマンドにより無事ParaViewが起動できました。
こんな感じでコマンド操作でソフトを操作できれば、自動化ができそうですね。
計算を実行
では、OpenFOAMのチュートリアルを計算させておきます。
1 2 3 4 | cd 018_paraviewAuto/ touch post.foam blockMesh simpleFoam |
計算が終了すれば、いよいよParaViewの自動化です。
ParaViewの操作の記録
まずは、先ほどのコマンドでも良いですし、手動でも良いのでParaViewを起動します。
操作を記録するためのマクロをスタートさせます。
②で操作した部分だけを記録するマクロ設定にします。では、操作の記録が開始されたので、できるだけ余計な操作をさせないように注意しながら、操作を進めていきます。
※失敗してやり直したり、画面を操作したりと余計な操作を行うとマクロとして記録されていくので操作は慎重に!
モデルを読み込んで・・・ ParaViewの画像を「img」フォルダに入れたいので、「img」フォルダを作成しています。画像を出力して・・・・画像が出力されているのを確認出来たら、マクロをストップします。
ストップすると今までの操作がPythonスクリプトとして表示されますので、それを適当なファイルにコピペします。
今回はparaviewpython.pyという名前でファイルを作成し、上で表示されたPythonをコピーしました。
Pythonスクリプトにする
Pythonスクリプトを確認してみましょう。
細かい中身はparaviewのライブラリなので、ドキュメントを参考にするしかありません。
paraviewpython.py
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | # trace generated using paraview version 5.11.0 #import paraview #paraview.compatibility.major = 5 #paraview.compatibility.minor = 11 #### import the simple module from the paraview from paraview.simple import * #### disable automatic camera reset on 'Show' paraview.simple._DisableFirstRenderCameraReset() # create a new 'OpenFOAMReader' postfoam = OpenFOAMReader(registrationName='post.foam', FileName='D:\\openfoam\\20230107_OpenFOAM_traning\\018_paraviewAuto\\post.foam') # get animation scene animationScene1 = GetAnimationScene() # get the time-keeper timeKeeper1 = GetTimeKeeper() # update animation scene based on data timesteps animationScene1.UpdateAnimationUsingDataTimeSteps() # get active view renderView1 = GetActiveViewOrCreate('RenderView') # show data in view postfoamDisplay = Show(postfoam, renderView1, 'UnstructuredGridRepresentation') # trace defaults for the display properties. postfoamDisplay.Representation = 'Surface' # reset view to fit data renderView1.ResetCamera(False) # get the material library materialLibrary1 = GetMaterialLibrary() # show color bar/color legend postfoamDisplay.SetScalarBarVisibility(renderView1, True) # update the view to ensure updated data information renderView1.Update() # get color transfer function/color map for 'p' pLUT = GetColorTransferFunction('p') # get opacity transfer function/opacity map for 'p' pPWF = GetOpacityTransferFunction('p') # get 2D transfer function for 'p' pTF2D = GetTransferFunction2D('p') # get layout layout1 = GetLayout() # layout/tab size in pixels layout1.SetSize(1510, 754) # current camera placement for renderView1 renderView1.CameraPosition = [0.13469999562948942, 0.0, 0.6080086693737206] renderView1.CameraFocalPoint = [0.13469999562948942, 0.0, 0.0] renderView1.CameraParallelScale = 0.1573642232213606 # save animation SaveAnimation('D:/openfoam/20230107_OpenFOAM_traning/018_paraviewAuto/img/animete.png', renderView1, ImageResolution=[1510, 754], FrameWindow=[0, 2]) #================================================================ # addendum: following script captures some of the application # state to faithfully reproduce the visualization during playback #================================================================ #-------------------------------- # saving layout sizes for layouts # layout/tab size in pixels layout1.SetSize(1510, 754) #----------------------------------- # saving camera placements for views # current camera placement for renderView1 renderView1.CameraPosition = [0.13469999562948942, 0.0, 0.6080086693737206] renderView1.CameraFocalPoint = [0.13469999562948942, 0.0, 0.0] renderView1.CameraParallelScale = 0.1573642232213606 #-------------------------------------------- # uncomment the following to render all views # RenderAllViews() # alternatively, if you want to write images, you can use SaveScreenshot(...). |
中身はPythonなので編集して使うこともできます。
「FileName=’D:\\openfoam\\20230107_OpenFOAM_tranin・・・」は自身の解析フォルダなので人によって変わります。
1 2 3 | import os PWD = os.getcwd() |
などのように現在のフォルダをosで取得するのと少し汎用的になります。
今回は無編集で動作するか確認するだけですので、そのまま使います。
Pythonスクリプトの動作確認
では、先ほどのParaViewなども閉じて、何も起動させていない状態からさきほどのPythonスクリプトを動かして、画像出力できるか確認します。
pvpython.exeを使って実行します。
1 | /mnt/c/work/ParaView-5.11.0-Windows-Python3.9-msvc2017-AMD64/bin/pvpython.exe paraviewpython.py |
もしくは、バッチ処理に適したpvbatch.exeを使っても良いです。
1 | /mnt/c/work/ParaView-5.11.0-Windows-Python3.9-msvc2017-AMD64/bin/pvbatch.exe paraviewpython.py |
どちらで行っても良いですがpvbatch.exeはバッチ処理に適しているようなので普段はこちらを使います。
以下のように無事画像が出力されていればOKです。
まとめ
簡単ですがParaView操作の自動化の入門を解説しました。
今回はただ画像を出力しただけですが、以下のような操作を行って画像出力するのも良いでしょう。
- 断面を切って流速分布を表示
- 流れ表示
- Timeを表示
画像の出力までほとんどプログラミング的なことをしていないので、誰でも使うことができると思います。
参考書
ParaViewの日本語の書籍はこれしかないですね。
ParaViewはバージョンとともにコロコロと仕様が変わるので、紙の本で勉強するのはお勧めできませんが、古いバージョンでも肝になる部分はとても勉強になるので、手元に置いておくのも良いでしょう。
ユーザーガイドが最新の情報になるので、そちらのチェックも合わせて行うと安心です。