はじめに

これは、ParaView コードベースにある C++ example の使用方法に関する簡単な紹介です。このコードは Catalyst API を利用した簡単なシミュレーションを表しています。

Tip

example ディレクトリ だけをダウンロードすることで、ParaView のソースコード全体をクローンする手順を省略できます。

CxxFullExample ディレクトリの内容:

  • FEDriver.cxx: シミュレーションのメインループ

  • FEDataStructure.[h,cxx]: ドライバのデータ構造を記述するシミュレーション用ファイル。

  • CatalystAdaptor.h: Catalyst ライブラリへのインターフェース。ここでデータ記述と Catalyst のセットアップが行われます。この例を別のシミュレーションに適用する際に編集する主要なファイルです。

  • catalyst_pipeline.py: 実行時に呼び出されるスクリプト

  • catalyst_pipeline_with_rendering.py: 実行時に呼び出す代替スクリプトで、レンダリングおよび(任意で)ライブビジュアライゼーションを有効にします。

  • CMakeLists.txt: プロジェクトを構成してビルドするための CMake コード。Catalyst ライブラリを検出し、それにリンクする方法を示しています。

前提条件

例のビルド

mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=<libcatalyst-install-dir> ../CxxFullExample
cmake --build .

シンプルな実行

生成された実行ファイル ./bin/CxxFullExampleV2 を、catalyst_script.py をパラメータとして実行します。

実行ファイルはランタイム時に ParaViewCatalyst ライブラリへリンクする必要があります。そのために、CATALYST_IMPLEMENTATION_PATHSCATALYST_IMPLEMENTATION_NAME を ParaViewCatalyst ライブラリのパスおよび Catalyst ライブラリ実装名に設定します。最後に、catalyst_script.py をスクリプト引数として渡します。

export CATALYST_IMPLEMENTATION_PATHS="<paraview-install-dir>/lib/catalyst"
export CATALYST_IMPLEMENTATION_NAME=paraview
./bin/CxxFullExample catalyst_pipeline.py

想定される出力:

executing catalyst_pipeline
-----------------------------------
executing (cycle=0, time=0.0)
bounds: (0.0, 69.0, 0.0, 64.9, 0.0, 55.9)
velocity-magnitude-range: (0.0, 0.0)
pressure-range: (1.0, 1.0)
-----------------------------------
executing (cycle=1, time=0.1)
bounds: (0.0, 69.0, 0.0, 64.9, 0.0, 55.9)
velocity-magnitude-range: (0.0, 6.490000000000001)
pressure-range: (1.0, 1.0)
-----------------------------------
...

注釈

シミュレーションをビルドする際に使用する MPI のバージョンは、ParaView が使用する MPI と同じである必要があることに注意してください。ParaView の MPI バージョンを確認するには、ParaView に同梱されている mpiexec 実行ファイルを使って mpiexec --version を実行します。

エラーが発生する場合、ParaView(または mpich)を自分でビルドし、ParaView とシミュレーションが同じバージョンの MPI を共有するようにする必要があるかもしれません。

このチュートリアルでは、例のソースコード内の MPI 関連の行を削除しても構いません。

Catalyst スクリプトの生成

Catalyst がトリガーされるたびに実行されるパイプラインを指定するには、catalyst_script.py を直接編集するか、ParaView の UI を通じて対話的に生成することができます。

Catalyst スクリプトを生成するには、通常どおりパイプラインを組み立て、各パイプラインの最後にエクストラクタを追加します。エクストラクタは Extractors メニューから作成でき、メッシュ、画像、さらにはテーブルとしてデータを抽出して保存できます。パイプラインが準備できたら、File > Save Catalyst State を使用して状態を Python スクリプトとしてエクスポートし、それを ./bin/CxxFullExampleV2 に渡します。エクストラクタの詳細については、ユーザーガイドの Extractors セクションを参照してください。

Live Visualization

Catalyst State を保存する際、エクスポートウィザードで Live Visualization を有効にするオプションがあります。

独自のスクリプトを作成するには、ParaView でパイプラインを作成することから始めます。結果を出力するには Extractors を使用します(スクリーンショットやメッシュなど)。その後、File > Save Catalyst State を使用して Python スクリプトをエクスポートします。Live Visualization はエクスポートウィザードで有効にできるオプションです。

例として、スクリーンショットを取得する実験には catalyst_pipeline_with_rendering.py を試してみてください。スクリプトに --enable-live を渡すことで、Live Visualization を有効にして実行できます。また、State File として読み込み、その内容を確認することも可能です。

ParaView で Catalyst > Connect メニューを使用すると、ParaView が Catalyst 入力を待機するようになります。その後、前述の手順に従ってシミュレーションを実行します。設定されたパイプラインが ParaView セッションに表示されます。

Tip

シミュレーションを開始する前に Catalyst > Pause Simulation を使用すると、最初のタイムステップでシミュレーションを一時停止できます。これにより、実行前にパイプラインを確認することができます。また、タイムステップの更新が速すぎて確認できない例に対しても有用です。

注釈

シミュレーションが終了すると、ParaView アプリケーションとの接続が切れるため、次のようなエラーメッセージが表示されることがあります。

ERROR: In <paraview_source_dir>/VTK/Parallel/Core/vtkSocketCommunicator.cxx, line 781
vtkSocketCommunicator (0x563b4cb9b5b0): Could not receive tag. 1

ERROR: In <paraview_source_dir>/Remoting/Core/vtkTCPNetworkAccessManager.cxx, line 296
vtkTCPNetworkAccessManager (0x563b457d9000): Some error in socket processing.

シミュレーションでの ParaViewCatalyst の使用

シミュレーションコードで ParaViewCatalyst を使用できるようにするには、CatalystAdaptor.h ファイルを確認してください。ここでは、主要な Catalyst 関数 catalyst_* をラップし、想定される引数を提供しています。各呼び出しで使用されるプロトコルについては here を参照してください。