14. Python & Batch: pvpythonとpvbatch
14.1. はじめに
ParaViewはParaView GUIを開かずに実行でき、Pythonでコントロールできます。Pythonインターフェースは、pvpythonとpvbatchの2つがあります。
14.2. pvpython
pvpython
は、ParaViewのPythonインターフェースです。pvpython
はPythonインターフェースを持ったParaViewと考えることができます。Python Shellでやったように、手動で pvpython
にコマンドを入力することができます。まず最初にすることは、次のようにimport paraview simpleをすることでしょう。
from paraview.simple import *
pvpython
はPythonのコマンドファイルを読むこともできます。引数には pvpython --help とタイプしてください。pvpython
のファイルを実行すると、以下のようになります。
/pathTopvpython/pvpython /pathToPythonCommandFile/commandFile.py
# Example
D:/alan/paraview/pvpython D:/alan/scripts/disk_out_ref-A.py
pvpython
がスクリプトを実行し、終了することに気づくでしょう。スクリプトの出力は、スクリーンショットや他のデータ生成物です。上記のスクリプトの中で編集が必要な箇所には、editMeHere という文字列が表示されます。
データへのパス、出力生成物へのパスを明記する必要があります。
初めて
pvpython
でスクリプトを実行したとき、出力は切手サイズのウィンドウになります。これを変更するには、renderView1.ViewSize という行を見つけてコメントを解除します。自分でスクリプトを作って実行してみてください。あるいは、以下のような例もあります。以下をカットして、greenSphere.pyというファイルに貼り付けてください。
#!/usr/bin/env pvpython from paraview.simple import * # Lets create a sphere sphere=Sphere() Show() Render() # get active view renderView1 = GetActiveViewOrCreate('RenderView') renderView1.ViewSize = [1670, 1091] # get display properties sphere1Display = GetDisplayProperties(sphere, view=renderView1) # change solid color sphere1Display.AmbientColor = [0.0, 1.0, 0.0] sphere1Display.DiffuseColor = [0.0, 1.0, 0.0] # save screenshot SaveScreenshot('greenSphereScreenshot.png', renderView1, ImageResolution=[1670, 1091])
これを次のように実行します。
/pathTopvpython/pvpython greenSphere.py
14.3. pvbatch
pvbatch
は pvpython
に似ていますが、2つの例外があります。pvbatch
は入力スクリプトからしかコマンドを受け付けないことと、MPIを使ってビルドされた場合、pvbatch
は並列で実行されることです。入力は pvpython
と全く同じです。
14.3.1. 一般ユーザー向けセクション
14.3.1.1. ここでは、Windows PCでのpvbatchの使用方法について説明します。
Linuxでトレーニングしている場合、
pvbatch
はbinディレクトリに存在します。OS Xでトレーニングしている場合、ターミナルウィンドウを開き、/Applications/ParaView x.x.x/Contents/bin にcdします。
pvbatch
はここにあります。Windowsでトレーニングする場合、
pvbatch
は存在しません。しかし、今回のトレーニングのような単一プロセスでは、pvpython
で代用可能です。
14.3.1.2. Pythonトレースを作成してみましょう。
Windowを使っているので、pythonのトレースを作成し、pvpython
を使って処理します。
exodusのデータ、スクリーンショット、ムービーを読むことができます。
paraview
を実行します。Tools → Start Trace を選択します。
can.ex2を開きます。
すべての変数をオンにします。
Apply を実行します。
+Y.
1タイムステップ進みます。
Coloring を EQPS に設定します。
File → Save Screenshot を選択します。
File → Save Animation.
Tools → Stop trace.
スクリプトをデスクトップに保存します。
ファイルを編集し、以下を変更します。
入力データへのパスを修正し、スクリーンショットやアニメーションを出力します(トレースを作成したので必要ありません)。
renderView*.ViewSizeの行をアンコメントします。これを適切なサイズに変更します(1920x1080くらい)。
14.3.1.3. Pythonトレースを一括で実行してみよう
上記で作成したスクリーンショットとアニメーションを削除してください。これらを再作成したいと考えています。
CMD ウィンドウを開きます。(スタートボタンにcmdと入力し、「コマンドプロンプト」をクリックします)。
ParaViewのbinディレクトリにcdコマンドを実行する
cd C:/Program Files (x86)/ParaView x.x.x/bin**
トレースを処理するには
pvpython
を使用します。pvpython
はフォワードスラッシュを理解することに注意してください。pvpython.exe C:/Users/myUserName/Desktop/trainingExampleScriptA.py
先ほど作成したスクリーンショットとアニメーションを開いてください。
14.3.1.4. 引数を受け付けるようにトレースを編集してみよう
Pythonトレースを編集します。
ExodusIIReaderのすぐ上に、以下のコードを入力します。
datasetIn = sys.argv[1] directoryOut = sys.argv[2] imageFilesOut = sys.argv[3] print("datasetIn = " + datasetIn) print("directoryOut = " + directoryOut) print("imageFilesOut = " + imageFilesOut)
canex2 = ExodusIIReader の行を以下のように編集してください。
canex2 = ExodusIIReader(FileName=[datasetIn])
SaveScreenshot(...) の行を以下のように編集してください。
SaveScreenshot(directoryOut+imageFilesOut+'.png', renderView1, ImageResolution=[1425, 1324])
SaveAnimation(...) の行を以下のように編集してください。
SaveAnimation(directoryOut+imageFilesOut+'.avi', renderView1, ImageResolution=[1424, 1324], FrameWindow=[0, 43])
ここで、コマンドウィンドウで次のように実行します。
pvpython.exe "c:/Users/myUserName/Desktop/trainingExampleScriptA.py" "C:/Users/myUsername/Desktop" "coolVizA"
14.3.1.5. Linuxでのpvbatchのための汎用Pythonスクリプト
以下は、トレースを作成せずに pvbatch
を実行した例です。
pvpython
の項で説明したように、greenSphere.pyというファイルを作成します。greenSphere.pyをコピーしてredSphere.pyとします。
redSphere.pyを編集します。
AmbientColor と DiffuseColor を [1.0, 0.0, 0.0] に変更します。
出力ファイルをgreenSphereScreenshot.pngからredShpereScreenshot.pngに変更します。
ファイルrunner.shを作成します。
以下のように編集します。
#!/usr/bin/bash /pathTopvbatch/pvbatch greenSphere.py /pathTopvbatch/pvbatch redSphere.py
以下のように実行します。
source runner.sh
14.3.2. Sandia National Labs の特定セクション
このセクションは、Sandia National Laboratoriesのクラスタと環境に特化したものです。
14.3.2.1. クラスタ上のpvbatch
クラスタの1つにsshでログインします。ログインしたノードで pvbatch
を実行すると、魔法のように計算ノードを獲得し、バッチ可視化を並列で実行します。プロジェクト/viz/training/paraviewにテストスクリプトがあります。これらのスクリプトは以下のように実行されます。
/projects/viz/paraview/bin/pvbatch_chama_mesa
This is version x.x.x of |pvbatch|.
Incorrect number of argument supplied. Expecting 4 but have 0
Usage: /projects/viz/paraview/bin/pvbatch_chama_mesa <Nodes> <Minutes> <HERT estimate> batchFileFullPath
一例を挙げると:
/projects/viz/paraview/bin/pvbatch_chama_mesa 1 10 FY123456 /projects/viz/training/paraview/whipple-A.py
14.3.2.2. クラスタ上のpvbatchOnNode
pvbatch
は、シミュレーションと同じノードで実行することができます。この機能の使い方の詳細はParaViewのヘルプを参照してください。
14.3.2.3. スクリプト例
ここでは、4つの例を紹介します。トレースレコーダーを使用してスクリプトを作成し、これらのスクリプトを pvbatch
を使用して実行する予定です。
exodusのデータ、スクリーンショット、ムービーを読むことができます。
paraview
を実行します。Tools → Start Trace.
g1s1.e.16.[0-15]をお読みください。
最後のタイムステップへ移動します。
1つ前のタイムステップに戻ります。
Coloring を EQPS に設定します。
File → Save Screenshot.
File → Save Animation.
Tools → Stop trace.
このスクリプトをクラスタに保存します。
ファイルを編集し、以下を変更します。
入力データのパスを修正し、スクリーンショットやアニメーションを出力します。
renderView*.ViewSize という行をアンコメントします。これを妥当なサイズに変更します(おそらく1920x1080)。
exodusデータ読み込みます、Clip、Slice、スクリーンショット、動画。
paraview
を実行します。Tools → Start Trace.
g1s1.e.16.[0-15]をお読みください。
最後のタイムステップへ移動します。
1つ前のタイムステップに戻ります。
Coloring を EQPS に設定します。
Filters → Common → Clip を選択します。
Y Normal でスライスします。
File → Save Screenshot.
File → Save Animation.
Tools → Stop trace.
このスクリプトをクラスタに保存します。
ファイルを編集し、以下を変更します。
入力データへのパスを修正し、スクリーンショットまたはアニメーションを出力します。
renderView*.ViewSize という行をアンコメントします。これを妥当なサイズに変更します(おそらく1920x1080)。
以下の行を ColorBy(...,('EQPS')) の上に追加してください。
g1s110fpse16Display.SetScalarBarVisibility(renderView1, False)
exodusのデータ読み込み、2Dプロット、スクリーンショット、動画。
paraview
を実行します。Tools → Start Trace.
g1s1.e.16.[0-15]をお読みください。
可能であれば、ポイントを選択します。
プロット選択(必要であればライン上にプロット)。
プロットEQPS。
File → Save Screenshot.
File → Save Animation.
Tools → Stop trace.
ファイルを編集し、以下を変更します。
入力データのパスを修正し、スクリーンショットやアニメーションを出力します。
renderView*.ViewSize という行をアンコメントします。これを妥当なサイズに変更します(おそらく1920x1080)。
cthデータの読み込み、CTHPartの抽出、スクリーンショット、動画。
paraview
を実行します。Tools → Start Trace.
cth-med/spcthを読み出す[0-3]。
ExtractCTHParts - 1。
ExtractCTHParts - 2。
Tools → Stop trace.