ゼロからはじめるParaView — [01]ParaViewで何ができるのか?
ゼロからはじめるParaViewーー[01]ParaViewで何ができるのか?
本サイトは、基本的には本研究室関連の情報交換用の情報を記事にしています。ただ、癖はあるものの、一般の方に少しお役に立つかもしれない、ということで公開されています。内容に齟齬があることがありますので、あらかじめご了承ください。
参考サイト案内
PENGUINITTSのParaView解説コーナー 一般社団法人 オープンCAE学会ほか日本国内可視化関連学会等の解説書など ParaView OpenFOAM財団 リソース(日本語ユーザーガイド2.2.0)
ParaViewは、可視化ツール、と聞いて、きっとなんか曖昧に、あんなことや、そんなことが、マウスをすすすーっと動かすだけで、、、という妄想があって、調べ始めている人も多いことでしょう。
本記事では、そんな人への期待に応えられるよう、ちょっとだけ暇を見つけられたときに、できる範囲で、頑張ってみたいと思います。
まず、ParaViewは、何ができるのか。
そもそも可視化ツールとは何か。
その疑問に答えるには何を説明したら良いのか。
まずはそこからです。
手取り早いのは、fileメニューで開けられるfile形式を示す、というのは一つの合理的回答かもしれません。
まずは私たち初心者の置かれた現実を見てみましょう。
fileメニューの開く、を選択してください。見慣れたファイルオープンダイアログが開きます。現実を直視するとともに、ParaViewの汎用性を垣間見てみましょう。
# 見慣れた、とは書きましたが、実際は、画面左側にはフォルダー表示が上下に箇所あります。上側はウインドウズのシステム上のフォルダ構成、下側が仮想linuxファイルシステムのビューアーになっているようです。後者は、Windows上のファイルエクスプローラーではすぐにはアクセスできない場所です。
ウインドウ下方のファイルタイプの選択のセレクターリストを開いてみてください。
いかがですか。これがParaViewの対応力です。本研究室では無縁ですが、高価な市販解析ソフトの名称もいくつもみられたことでしょう。もっとも、普通は私たちが関連するのはこの中のほんの一つ、二つだけですが。。。
で、チープでプアーな本研究室での注目は、もちろん汎用性のあるオープンでフリーな環境についてです。
デフォルトの supported files の中には、.txt や .csv のように見慣れた拡張子もあります。選択肢の中にはOpenFOAM という項目も見られます。ちょっと光明が見えそうです。
さて、
データーファイル
vtm、vtmb、vthb、vth、vtp、vtt、vtu、vti、vtk、vts、vtr、pvtp、pvtu、pvtt、pvti、pvts、pvtr、pvtk、ply、stl
まず、本記事の対象者であらせられる、何ができるか、をあいまいに調べているゼロベースの立場の人であれば、この羅列を見た時点で問題山積、かもしれません。機械系で3Dプロッターを使っている人なら、STLファイルはなんとなく想像がつきます。それ以外は、チンプンカンプンでしょう。だって、機械工学系に直接関連するCAD系はSTLくらいですから。。。
“それ以外”は、3次元コンピューターグラフィクス、可視化、画像処理で使用される構造、非構造等々の主要なデーター形式、VTKの形式です。STLが形状データーだけなのに比べて、それ以外は、三次元座標に関連づけられた、何か意味のあるデーター、つまり、例えば、数値計算ツールで言えば分布する物理量などを格納するファイル形式、と、ざっくり理解しておけば良いでしょう。あるいは、Adobeなどの特定アプリケーションのグラフィックなファイルと思っておいてください。
例
vtm : Adobe ColdFusion Visual Tool Markup Language Crie File のどう略したらそうなるのかと突っ込みたくなる略称です
vtk : 1993年発祥で今世紀に入って台頭した三次元コンピューターグラフィクス業界のオープンソースソフトVisualization Toolkit のファイル形式 https://vtk.org//omu-content/uploads/2015/04/file-formats.pdf ティックルティーケーやパイソン、ジャバをサポートし、科学的可視化業界の標準。最新は Ver.8。
vtu :VTK 非構造時系列データ
vtp : VTK非構造ポリゴン用時系列データ
等々、以下、VTK File Format 解説書からの引用。
• ImageData(.vti)—SerialvtkImageData(structured).
• PolyData(.vtp)—SerialvtkPolyData(unstructured).
• RectilinearGrid(.vtr)—SerialvtkRectilinearGrid(structured).
• StructuredGrid(.vts)—SerialvtkStructuredGrid(structured).
• UnstructuredGrid(.vtu)—SerialvtkUnstructuredGrid(unstructured).
• PImageData(.pvti)—ParallelvtkImageData(structured).
• PPolyData(.pvtp)—ParallelvtkPolyData(unstructured).
• PRectilinearGrid(.pvtr)—ParallelvtkRectilinearGrid(structured).
• PStructuredGrid(.pvts)—ParallelvtkStructuredGrid(structured).
• PUnstructuredGrid(.pvtu)—ParallelvtkUnstructuredGrid(unstructured).
pvd : 時間ステップ※を記述したParaView Dataネイティブファイル
※この時間ステップを記述、というところですが、OpenFOAMの時間ステップ出力がフォルダ別にバラバラなところを見れば、ちょっと気になるところですね。でも、ツールがOpenFOAMで提供されています。
生真面目に考えれば、各形式のフォーマットが気になりますが、自分が使うものだけ気にかけておけば良いでしょう。そしてそれは。
いずれにせよ、非構造データーも簡単に可視化できるようになるので、実験屋にとっては大変いいツール、ということです。
さらに“それ以外”に、CSVファイルも読み込めます。というか、テキストデーターであれば、読み込んだ後にいろいろ指定もできます。バイナリも大丈夫です。読み込んだのちに、filterメニューからどのようにデーターを扱うか指定します。
ただ、あまりに多様性があるので、メニューから選択するだけでもちょっと手間です。もちろんフィルター名がわかれば絞り込めます。試しにFilter メニューのプルダウンメニュー一番下のアルファベット順の項目をポイントしてみてください。
フィルターの一例
table to points : データーを点座標に
warp to Scalar : データーを値でスライドさせて立体図に
ParaViewがコアに使用しているVTKは、超多量データーの可視化に利用されるため、科学界あるいは工学界の標準ツールとなりつつあるそうです。
つまり、以上のことから、コンバーターさえ組み込めば簡単にいろんな形式に対応できてしまうため、例えば各種地形データーや衛星等の気象その他センシング形式、などなど、様々な科学ツールの形式にも対応しています。
そう、ということは、実験データーであれ数値計算データーであれ、プログラミングするときの出力ファイルは自己流の出力ファイルではなく、下流処理で無駄な時間を食わないきちんと標準化されたデーターファイル形式にしておく、というのが現代流、というわけです。機械設計製図をすでに体得した本過程の学生さんなら、納得の行動ですね。
さて、ついでにプログラミングの情報もありましたが、今回はParaViewの入力ファイルのざっくりした紹介だけでしたが、これだけでもなんとなくParaViewが何かという妄想が、少し骨のある想像に変わったでしょうか。
そうであれば幸いです。
で、これですぐにOpenFOAMの結果をすぐに利用できるか、というと、実はファイルを開くのにあまりにオートなParaView と、ファイルを吐くのに非常にシンプルな 複数ファイルを吐くOpen FOAM との間では、効率よく作業を進めるにはちょっとした手順、拡張子にまつわる整理が必要です。それはOpenFOAM で提供されているparafoamというコマンドで提供され、実行するだけで済むんですが、その話はまた次の機会に、、、今回はこれまで。
[参考]
出力ファイルも概説します。
- データーセットタイプ
- データー型
- 出力ファイル形式
1.ここで登場した VTKには、5つのデーターセットのフォーマットがあります。それらは、以下の5つです。
構造点 構造格子 直線格子 非構造格子 ポリゴンデーター
構造型ファイルではその座標データーは、暗黙的に、x、y、zの順に大きくなることになっています。われわれが利用するのは、非構造型です。
• StructuredPoints
構造点タイプでは、1D、2D、および3D構造化ポイントデータセットをサポートしています。データーサイズ nx、ny、nzは1以上である必要があります。データ間隔sx、sy、szは0より大きい必要があります。サイズと間隔の二つのパラメーターで定義されます。実験屋には窮屈ですね。
DATASET STRUCTURED_POINTS DIMENSIONS nx ny nz
ORIGIN x y z
SPACING sx sy sz
• StructuredGrid
上と同様、1D、2D、および3D構造化グリッドデータセットをサポートしています。サイズ nx、ny、nzは1以上でなければなりません。ポイント座標は、POINTSセクションの各ポイントのx-y-zデータ値で構成されます。
DATASET STRUCTURED_GRID DIMENSIONS nx ny nz
POINTS n dataType
p0x p0y p0z
p1x p1y p1z
…
p(n-1)x p(n-1)y p(n-1)z
• RectilinearGrid
直線グリッドは、座標値を省いたデーターの羅列で表されたデーターです。通常のトポロジと、x-y-z座標軸に沿って配置された半正則ジオメトリを持つデータセットを定義します。ジオメトリは、単調に増加する座標値の3つのリスト(x-y-z座標軸ごとに1つのリスト)によって定義されます。トポロジーは、1以上のグリッド次元を行末で指定することで定義されます。形はシンプルですが、ズラーっと長いみにくい形式になるので、緊急時用、ですね。
DATASET RECTILINEAR_GRID DIMENSIONS nx ny nz X_COORDINATES nx dataType
x0 x1 … x(nx-1) Y_COORDINATES ny dataType
y0 y1 … y(ny-1) Z_COORDINATES nz dataType
z0 z1 … z(nz-1)
• PolygonalData
ポリゴンデータセットは、数値計算のモデルチェック用ですね。サーフェスグラフィックスプリミティブの頂点(およびポリ頂点)、ライン(およびポリライン)、ポリゴン(さまざまなタイプ)、および三角形のストリップの任意の組み合わせで構成されます。多角形データは、POINTS VERTICES、LINES、POLYGONS、またはTRIANGLE_STRIPSセクションによって定義されます。 POINTSの定義は、構造化グリッドデータセットと同じです。 VERTICES、LINES、POLYGONS、またはTRIANGLE_STRIPSキーワードは、ポリゴンデータセットトポロジを定義します。これらの各キーワードには、セル数nとセルリストサイズのサイズの2つのパラメーターが必要です。セルリストのサイズは、リストを表すために必要な整数値の合計数です(つまり、numPointsと各セルの接続性インデックスの合計)。キーワードVERTICES、LINES、POLYGONS、またはTRIANGLE_STRIPSはいずれも必須ではありません。
DATASET POLYDATA POINTS n dataType p0x p0y p0z
p1x p1y p1z
…
p(n-1)x p(n-1)y p(n-1)z
VERTICES n size
numPoints0, i0, j0, k0, … numPoints1, i1, j1, k1, …
…
numPointsn-1, in-1, jn-1, kn-1, …
LINES n size
numPoints0, i0, j0, k0, … numPoints1, i1, j1, k1, …
…
numPointsn-1, in-1, jn-1, kn-1, …
POLYGONS n size
numPoints0, i0, j0, k0, … numPoints1, i1, j1, k1, …
…
numPointsn-1, in-1, jn-1, kn-1, …
TRIANGLE_STRIPS n size numPoints0, i0, j0, k0, … numPoints1, i1, j1, k1, …
…
numPointsn-1, in-1, jn-1, kn-1, …
• UnstructuredGrid
このデーターセットタイプのポイントデーターが、実験屋には一番有効と思います。非構造化グリッドデータセットは、使用可能なセルタイプの任意の組み合わせで構成されます。非構造化グリッドは、ポイント、セル、およびセルタイプによって定義されます。 CELLSキーワードには、セルの数nとセルリストのサイズの2つのパラメーターが必要です。セルリストのサイズは、リストを表すために必要な整数値の合計数です(つまり、numPointsと各セルの接続性インデックスの合計)。 CELL_TYPESキーワードには、単一のパラメーター(セル数n)が必要です。この値は、CELLSキーワードで指定された値と一致する必要があります。セルタイプデータは、セルタイプを指定したセルごとの単一の整数値です。
DATASET UNSTRUCTURED_GRID POINTS n dataType
p0x p0y p0z
p1x p1y p1z
…
p(n-1)x p(n-1)y p(n-1)z
CELLS n size numPoints0, i, j, k, l, … numPoints1, i, j, k, l, … numPoints2, i, j, k, l, … …
numPointsn-1, i, j, k, l, …
Simple Legacy Formats 5
CELL_TYPES n type0
type1
type2
…
typen-1
• Field
フィールドデータは、トポロジおよび幾何学的構造を持たず、特定の次元を持たない一般的な形式です。通常、フィールドデータはデータセットのポイントまたはセルに関連付けられています。ただし、FIELDタイプがデータセットタイプとして指定されている場合(図1を参照)、一般的なVTKデータオブジェクトが定義されます。次のセクションで説明する形式を使用して、フィールドを定義します。
2.それぞれのデーターセット内で扱えるデーター形式(dataType )は、以下の7種類です。データーセットがポイントでもセルでも利用できます。
カラー(1〜4コンポーネント): つまり、モノカラーでもRGBAでもCMYKでも?
ベクトル: つまり、いろんな物理量、速度が扱える。
法線 : つまり、面データーで形状が表せる。
テクスチャ座標(1D、2D、および3D)、つまり、見かけのプロパティが扱える
3×3テンソル : つまり、いろんな応力群も扱える。
フィールドデータ : 位置情報を持った汎用形式。
スカラーデータに関連付けられたRGBAカラー仕様を使用したルックアップテーブル
以上のデーターを表現するためには、dataNameとよばれるインデックスキーワード(識別子)が利用できます。これを使えば、タイプが同じでも、複数の属性のデーターをごちゃ混ぜにファイルに格納できます。定義(VTKリーダーで指定)しないときは、デフォウルトで、最初のデーターセットだけが使用されることになります。
使いそうなスカラー、ベクトル、テンソル、を掲載しておきます。
• Scalars
スカラー定義では、ルックアップテーブルが利用可能です(任意:デフォルトVTKtableNameは「default 」にする)。numComp変数(1-4)はオプションでデフォルトでは、コンポーネント数は1です。
SCALARS dataName dataType numComp LOOKUP_TABLE tableName
s0
s1
…
sn-1
カラースカラー(つまり、色に直接マップされる符号なしchar値)の定義は、スカラーごとの値(nValue)の数によって異なります。ファイル形式がASCIIの場合、カラースカラーは(0,1)の間のnValues float値を使用して定義されます。ファイル形式がBINARYの場合、データのストリームはスカラー値ごとのnValues符号なしchar値で構成されます。
COLOR_SCALARS dataName nValues c00 c01 … c0(nValues-1)
c10 c11 … c1(nValues-1)
…
c(n-1)0 c(n-1)1 … c(n-1)(nValues-1)
• LookupTable
TableNameフィールドは、VTKリーダーが利用するルックアップテーブル識別のための文字列(埋め込み空白なし)です。ルックアップテーブルの各エントリは、rgba [4](赤-緑-青-アルファ)配列です(アルファは不透明度、アルファ= 0は透明)。ファイル形式がASCIIの場合、各値は(0,1)の間の浮動小数点値、BINARYの場合、データのストリームはテーブルエントリごとに4つの符号なしchar値である必要があります。
r0 g0 b0 a0
r1 g1 b1 a1
…
rsize-1 gsize-1 bsize-1 asize-1
• Vectors
ベクトルの場合は、簡単に以下の通り。
VECTORS dataName dataType v0x v0y v0z
v1x v1y v1z
…
v(n-1)x v(n-1)y v(n-1)z
• Tensors
テンソルは、3×3の実数要素対象テンソルだけがサポート。
TE10NSORS dataName dataType
t0_00 t0_01 t0_02 テンソルを3×3で羅列し、空行で区切る
t0_10 t0_11 t0_12
t0_20 t0_21 t0_22
t1_00 t1_01 t1_02
t1_10 t1_11 t1_12
t1_20 t1_21 t1_22
…
tn-1_00 tn-1_01 tn-1_02
tn-1_10 tn-1_11 tn-1_12
tn-1_20 tn-1_21 tn-1_22
3. 出力ファイル
オリジナルの設定ファイルと結果の保存ファイル形式
●スクリーンショット
スクリーンショットはビットマップ形式でのみ保存化
●3Dデーターの保存
3Dデーターは以下の形式にエクスポートできる。
POV Files *.pov
VRML Files image *.vrml
X3D Files image *.x3d
X3DB Files *.x3d
●アニメーション動画の保存
時系列情報を含んだ記録としての保存方法。AVI形式は(コンテナなんですが、、、)出力時にフレームレート等を指定できる。それ以外の各形式(jpg, tiff, png)では、通し番号の静止画の集合体として保存する。
●作業状態の保存
Stateファイルは作業状態保存ファイルとして使える。XML形式の専用ファイル(*.pvsm)のほか、Pythonで記述されたバッチファイル形式(*.py)でも出力可能である。ParaViewに読み込んだときにカラーバーが再現できない不具合があるので、出会ったら、そうか、これか、と受け入れてください。
●ソースの保存形式
各種データー形式から読み込み、変換したソースデーターを保存するソース用ファイル形式。
フォーマット 拡張子 備考
ParaView Data Files *.pvd ParaViewのオリジナル、ネイティブ形式。要素形状各種データー型および時系列データ情報を記録するこのXMLベースファイル形式でZLibでの圧縮も可能。
CSV File *.csv テキスト形式。桁数、要素・節点・フィールドのいずれを出力するか選択可能。
Exodus II File *.e *.ex2 *.ex2v2 *.exo *.exoII *.exoii *.g *.gen EXODUS II 形式。netCDFに基づく有限要素メッシュおよび結果ファイル形式。
VTK XML Files *.各種 VTK形式。ソースの種別に合わせたファイルフォーマット10種以上が選択可能。
Legacy VTK File *.vtk VTK旧形式。非推奨。アスキー、バイナリいずれで出力するか選択可能。
PLY Polygonal File Format *.ply ポリゴン形式。アスキー、バイナリいずれで出力するか選択可能。
Stereo Lithography File Format *.stl STL形式。アスキー、バイナリいずれで出力するか選択可能。
Xdmf Data File *.xmf XDMF(eXtensible Data Model and Format)形式。データやモデルの幾何形状を保存するデータ形式