背景

はじめに

ParaViewバージョン5.9以前では、シミュレーションコードでParaViewをストレージ処理に使用するには、シミュレーションデータ構造をVTK Data Objectに変換するアダプタと、ParaViewが提供するクラス(Catalystと総称)を使用して初期化し、各シミュレーションサイクルで解析パイプラインを実行するアダプタの2つを開発する必要がありました。

シミュレーションデータ構造をVTKデータ・オブジェクトに変換するのは簡単なことではなく、VTKがどのように内部配列を格納し、データオブジェクトを構築するかを理解する必要があります。単純なミスは、無効なメモリアクセスやコストのかかるデータコピーを引き起こし、メモリ要件やパフォーマンスに悪影響を及ぼす可能性があります。

Catalyst クラスを介して ParaView をセットアップして呼び出すには、vtkCPProcessorvtkCPPipeline とそのサブクラス、vtkCPInputDataDescriptionvtkCPDataDescription などのクラスを作成して使用する必要があります。

言い換えると、アダプタには ParaView 固有の C++ コードが多く含まれることになり、そのコードは ParaView の各バージョン間で変更される可能性があり、新たに追加された機能に対応するために更新が必要となりました。

シミュレーションは、シミュレーション専用に開発されたカスタムCatalystアダプターと直接リンクしているため、シミュレーションも特定のバージョンのParaViewと緊密にリンクしています。 一度構築されたParaViewのバージョンを切り替えるには、アダプタとシミュレーションを再構築する必要があります。

アダプタを構築するには ParaView SDK が必要です。公式の ParaView バイナリには SDK を構成するヘッダやライブラリが含まれていないため、ParaView をソースからビルドする必要があります。それ自体が困難な作業であり、さらなる複雑さと学習のハードルを加えることになります。

これらの課題をいくつか最小化するために、私たちは関係する各コンポーネントの設計と実装を見直しました。混乱を避けるため、これまでに説明した ParaView 5.9 以前で利用可能な Catalyst および in situ コンポーネントはすべて Legacy と呼ぶことにします。

CatalystとParaView-Catalyst

新しいデザインは、次のような重要な要素に基づいています:

  • シミュレーションコードがデータを記述し、in situ処理パイプラインを呼び出すために使用できる安定したAPI。

  • このAPIを使用する際にシミュレーションを構築するために使用できる、このAPIの軽量な実装です。

  • この API の実装のひとつとして、データ処理に ParaView を使用し、軽量実装と ABI 互換であるものがあります。これにより、シミュレーションを起動する際にロード時に動的に置き換えることが可能になります。

安定版 API は現在 Catalyst API と呼ばれています。これは C のみの API(C++ でのラップや Python および Fortran 用のバインディングも利用可能)であり、データやその他の制御パラメータを記述する仕組み(Conduit API を使用)と in situ 処理を実行する仕組みを含んでいます。これは stub と呼ばれる軽量実装とともに、separate project として提供されています。

Catalyst API と互換性のある ParaView 固有の実装は現在 ParaView-Catalyst と呼ばれており、ParaView ディストリビューションの一部としてビルドおよび配布されています。ParaView-Catalyst Blueprint では、計算格子の読み込みやスクリプトの提供など、この Catalyst 実装でサポートされるパラメータについて説明しています。

この新しいアプローチでは、特定のシミュレーション向けに開発された典型的な Catalyst アダプタは、もはや VTK データオブジェクトを直接構築しません。代わりに、アダプタはサポートされているプロトコルの実装を用いて自らのデータ構造を記述するだけです。ParaView を使用する Catalyst API の標準実装である ParaView-Catalyst は、データを記述するためのいくつかの方法を提供しており、コードで使用される多数のデータ構造やメモリレイアウトを取り込むべく進化を続けています。

それだけでは不十分な場合、開発者は Catalyst API 向けに独自のカスタム実装を開発することができます。そのような実装では、開発者が選択した任意のデータ処理や可視化ライブラリを自由に使用できます。また、vtkInSituInitializationHelpervtkInSituPipeline およびそのサブクラスを利用して、ParaView を in situ 処理エンジンとして使用することも可能です。