3825

チュートリアルフリーの可視化ソフトとして今日広く利用されている ParaView の使い方についてその初歩の初歩を解説します。ParaView に関する予備知識が全く無い人が四面体などの非構造格子を用いた有限要素解析結果を Legacy VTK ファイル形式で書き出して ParaView で表示出来るようになることを目指し、なるべく丁寧に説明します。一般的な ParaView の操作方法についてはあまり深く解説を行いませんので、書籍およびウェブ上にある ParaView の操作方法に関するドキュメント類と併せてお読みください。

ParaView 超入門
大西 有希
1

はじめに有限要素法（FEM）を始めとする数値解析を実施する
場合、私達は大きく分けて「プリ」・「ソルバ」・「ポスト」の3種類のソフトウェアを利用します。「プリ」は空間離散化（メッシュ切り）と解析条件（境界条件、初期条件など）の割り当てを行い、解析条件入力ファイルを作ります。「ソルバ」は解析条件入力ファイルを読み込んでその問題を解き、解析結果出力ファイルに書き出します。「ポスト」は解析結果出力ファイルを読み込んで様々な画像やグラフを表示して可視化します。この記事で取り上げる ParaView というソフトは上記3種類の中の「ポスト」の役割を専門に担うソフトウェアです。
ParaView をご存知無かった方は先ず一度ウェブペー
ジのギャラリー（https://www.paraview.org/gallery/）を覗いてみてください。綺麗な可視化例が幾つも展示されています。しかも、このソフトはフリー（修正 BSD ライセンス）で入手できるのです。ソースコードをダウンロードして読んだり書き換えたりすることも基本的に自由です。
その名に “Para” の文字が入っていることからも分かる通り、ParaView は複数の CPU（あるいはコア）を用いた並列処理に対応しており、大規模な解析モデルの可視化に対応しています。ただし、並列処理を用いない環境でも全く問題なく動作し、「普段使い」にも適したソフトです。例えば数万要素程度のモデルであれば、一般的なノートパソコンでも充分に使うことが出来ます（本稿では並列可視化には触れません）。
本稿では ParaView を用いて自作の FEM ソルバ等の解析結果を可視化する方法に焦点を絞って解説します（ParaView の基本的操作方法については参考文献等をご参照ください）。前半は ParaView が読み込むことのできる最も基本的なファイル形式である Legacy VTK ファイル（拡 張 子 が vtk）で 可 視 化 モ デ ル を 作 り、 そ れ をParaView で可視化するまでの流れを丁寧に説明します。
後半はアニメーションの作成、グループデータの利用、バイナリ出力および VTK XML ファイル出力のためのPython スクリプトについて掻い摘んで説明します。
汎用解析ソフトを触ったことのある人の中には、「プリ」・「ソルバ」・「ポスト」は1つのパッケージソフトとしてまとまっているのが当たり前で、可視化専用ソフトを単独で使う機会など自分には無いと思われるかもしれません。確かに、特定の汎用解析ソフトの1ユーザーとして研究・開発を行うのであればその通りかも知れません。しかし、その汎用ソフトでは解けない問題を自作または非汎用のソルバで解かなければならない時や、数種類のソルバの解析結果を統一的に比較したい時など、ParaView の様なソフトを利用した方が良い状況が今後出てくるかも知れません。この機会に是非ご一読頂けると幸いです。

筆者紹介
おおにし ゆうき
2005年東京工業大学大学院情報理工学研究科博士課程修了、みずほ情報総研株式会社を経て、現在、東京工業大学工学院助教。固体の超大変形解析、腐食や電着塗装などの電気化学解析、熱／光インプリントのプロセス解析などの研究に従事。

Vol.23, No.4 2018（29）

続きは Web で
日本計算工学会誌「計算工学（Vol.23, No.4）」HP:
http://www.jsces.org/activity/journal/

チュートリアル

2

ParaView 超入門

ParaView のインストール

ParaView のウェブページにある “Download” のリンクからダンロードのページに移ることが出来ます。最新のバージョン（2018年8月末時点では v5.5）を選択し、Windows/Linux/macOS のいずれかのバイナリをダウンロードします。最近のバージョンでは64bit 版のみしか配布されていないため、32bit の OS をお使いの場合は注意が必要です（少し古い v5.2であれば32bit の Windows用バイナリが配布されています）。Windows ユーザーでどれをダウンロードすべきか全く見当がつかない方は“ParaView-5.2.0-Qt4-OpenGL2–Windows -32bit.exe” を ダウンロードすると良いでしょう。また、Linux ユーザーであればお使いのディストリビューションが配布している ParaView のパッケージをインストールすれば良いでしょう。
同ページには Documentation としてチュートリアルやガイドの PDF[1-3] が用意されています。英語が不得意な初学者には難解かと思いますが、ある程度使い慣れたら是非目を通しておくべき文書です。

3

VTK ファイルについて

4

4節点四面体1要素モデルの作成と可視化

ParaView は Visualization Toolkit (VTK) と呼ばれるライブラリを用いてモデルの描画を行っています。従って、VTK 純正のファイルフォーマットを使って ParaView にデータを読み込ませるのが最も基本的な使い方となります。ただし、VTK のファイルフォーマットにも様々な種類が存在します。詳細は VTK の解説書 [4] を参照ということで省略しますが、本稿では最も簡単な Legacy
VTK ファイルフォーマット（拡張子 vtk）を利用します。
Legacy VTK ファイルは基本的にはテキストファイルで、改行およびスペース区切りの形式です。浮動小数点 の 実 数 は 単 精 度（ﬂoat）お よ び 倍 精 度（double）を サポートしますが、ParaView で表示する時点で多くの環境では ﬂoat に丸め込まれるため、実数値の与え方はﬂoat を用いることになります。改行コードの指定は無く、ParaView ではどの改行コードでも適切に処理されるようです。

4.1 形状の定義
では、ParaView で可視化するモデルを作っていきます。まずは4節点四面体要素1つだけから成るモデルを作ってみます。お好みのテキストエディタ（Windows のメモ帳でも可）で下記のテキストファイルを作成し、適当なファイル名（ここでは “sample-a.vtk” とします）で保存してください。
-------------------# vtk DataFile Version 4.1
This is a comment line.
ASCII
DATASET UNSTRUCTURED_GRID

0. 0. 0.
1. 0. 0.
0. 1. 0.
0. 0. 1.
CELLS 1 5
4 0 1 2 3
CELL_TYPES 110-------------------1行目は VTK ファイルであることを宣言する「おまじない」です。2行目はコメント行なので、読み飛ばされます。3行目はデータがアスキー（ASCII）形式かバイナリ（BINARY）形式のどちらで記述されているかを指定する行で、ここではアスキー形式を用いています（バイナリ形式については後述）。4行目は形状データの構造を 指 定 す る 行 で、 一 般 的 な FEM で は 非 構 造 格 子（UNSTRUCTURED_GRID）を使用します。
“POINTS” で始まるブロックは節点数、精度、および各節点の座標を宣言しています。“POINTS” に続く “4”は節点が全部で4個あることを意味し、続く “ﬂoat” は座標を単精度の浮動小数点として読み込むよう指示しています。その下の4行は各行とも xyz 座標値を表しており、節点0、1、2、3の座標がそれぞれ (0,0,0)、(1,0,0)、(0,1,0)、(0,0,1) であることを意味しています。ここで、VTK の節点番号は1からではなく0から始まることに注意してください。
“CELLS” で始まるブロックは要素数、要素リストに用いられる数字の個数、および要素リストを表しています。“CELLS” に続く “1” は要素が全部で1個であることを意味し、続く “5” はその下に続く要素リストの定義に用いられる数字の個数が5個であることを意味しています。その下の要素リストの最初の “4” はその要素の節点数が4個であることを意味し、それに続く “0 1 2 3” はその要素の構成節点の番号を表します。
“CELL_TYPES” で始まるブロックは要素数および各要 素 の 要 素 タ イ プ 番 号 を 表 し て い ま す。“CELL_TYPES” に続く “1” は要素が全部で1個であることを意味しています。その下の “10” は要素タイプ番号で、先に“CELLS” で定義した要素が4節点四面体であることを指定しています。
ではこの “sample-a.vtk” を ParaView で可視化してみます。ParaView を起動し、画面左上のアイコン「Open」から “sample-a.vtk” を開いてください。画面左側の “Apply”
ボタンを押して画面上にグレーの四面体が1個表示されれば成功です（図1）。もしファイルフォーマットに誤りがある場合は画面上にエラーメッセージが現れますので見直してください。マウスの左・中・右ボタンをドラッグして動かせば回転・移動・拡大縮小などが出来ると思います。詳細は参考文献 [5, 6] および web 検索をご参照ください。

POINTS 4 float
計算工学（29-2）

Vol.23, No.4 2018

チュートリアル

ParaView 超入門

すが、残念ながら VTK フォーマットで積分点量を定義することは出来ません。
では、ParaView を起動して先程と同じ手順で追記された “sample-a.vtk” を可視化してみてください。画面上側にコンター図として表示する量を選ぶプルダウンのボックスがあるので、追記した “Point_Scalar_Data” と“Cell_Scalar_Data” を 選 ん で そ れ ぞ れ 可 視 化 し て み ます。“Point_Scalar_Data” は節点間で補間された分布が表示される（図2）のに対し、“Cell_Scalar_Data” は要素内でベタ塗りに表示される（図3）ことが確認できると思います。
図1

4節点四面体要素形状の可視化例

4.2 スカラーの節点量および要素量の定義
現状の “sample-a.vtk” は幾何学的な情報しか含まれておらず、グレー一色の物体が表示されているだけでした。そこで次は何かしらの量（例えば温度など）をこの物体上に表示させたいと思います。節点量ならびに要素量としてスカラー値をこの vtk ファイルに追加してみます。先程の “sample-a.vtk” の末尾に下記のテキストを追記して保存してください。
-------------------＜先程の“sample-a.vtk”の末尾への追記分 ＞
POINT_DATA 4SCALARS Point_Scalar_Data float
LOOKUP_TABLE default
0.123
1.234
2.345
3.456
CELL_DATA 1SCALARS Cell_Scalar_Data float
LOOKUP_TABLE default3.14-------------------“POINT_DATA” で始まるブロックは節点量を定義しています。“POINT_DATA” に続く “4” は節点数を表します。“SCALARS” の行は “Point_Scalar_Data” という名前（任意に設定可）で “ﬂoat” の精度を持つデータを定義することを宣言しています。続く “LOOKUP_TABLE” はやや高度なカラーリングをしたい場合に利用される機能 な の で、 本 稿 で は 解 説 を 省 略 し ま す（“LOOKUP_TABLE default” の1行は「おまじない」だと思ってください）。その下の4行は節点0~3の “Point_Scalar_Data” という量のスカラー値を順に並べて指定しています。
“CELL_DATA” で始まるブロックは要素量を定義しています。記述方法は “POINT_DATA” とほとんど同じなので容易に想像がつくかと思いますが、“Cell_Scalar_Data” という名前（任意に設定可）のスカラー量を1個の要素に与えています。FEM に明るい方であれば「要素量ではなく積分点量を定義したい」と考えるかと思いま
計算工学

図2

節点スカラー量の可視化例

図3

要素スカラー量の可視化例

コンターの色使いやカラーバーの表示には様々なオプションが用意されており、Color Map Editor をいじることで変更できます。直感的に分かりやすい仕様です
ので、皆さんの手で試してみてください。
4.3 ベクトルの節点量および要素量の定義
続いて、ベクトル量（例えば変位ベクトル）を表示させたいと思います。節点量ならびに要素量としてベクトル値を vtk ファイルに更に追加してみます。先程の“sample-a.vtk” の末尾に下記のテキストを更に追記して保存してください。
-------------------＜先程の“sample-a.vtk”の末尾への更なる追記分 ＞
POINT_DATA 4（29-3）

Vol.23, No.4 2018

チュートリアル

ParaView 超入門

VECTORS Point_Vector_Data float
0.0 0.1 -0.2
0.1 0.2 0.3
0.2 0.3 0.4
0.3 0.4 0.5
CELL_DATA 1
VECTORS Cell_Vector_Data float
1.2 -2.3 -3.4-------------------スカラーの場合とほとんど同じですが、“SCALARS”の 代 わ り に “VECTORS” に な っ て い る 点、“LOOKUP_TABLE” の行が不要になった点、および各節点／要素に与える数値が1個ずつではなく3個ずつになった点が異なります。
では、ParaView を起動して可視化してみましょう。
先程と同じ手順で可視化すると、ベクトルの各成分あるいはベクトルの大きさ (Magnitude) でコンター表示を行うことが出来ます。節点量でも要素量でも手順は同じです。でもベクトル量ですから、ベクトルで表示したいことも多いかと思います。そんな時は「Glyph」のアイコンをクリックします。画面左側に Glyph1の項目が 現 れ る の で、Active Attributes の Vectors を “Point_Vector_Data” に設定すると節点からのびる4本のベクトルが表示されます（図4）。ベクトルの形・長さ・色などは様々に変えることが出来るので、皆さんでいじって試してみてください。
一方、“Cell_Vector_Data” の可視化には一手間必要です。“Point_Vector_Data” と同様の手順で可視化すると要素量にも関わらずあたかも節点量かの様に4本のベクトルが表示されてしまいます。要素ベクトルを表示する
時は、まず画面左上の “sample-a.vtk” が選択された状態
でメニューバーから Filters → Alphabetical → Cell Centersをクリックします。これで要素中心に仮想的に節点が追加され、そこに定義した CELL_DATA がコピーされた CellCenters1というデータが出来ます。次に、このCelCenters1に対して Glyph を実施します。そうすると要素中心からのびる1本のベクトルが表示出来ます。図5では “simplest-a.vtk” の表示を Wireframe にしてベクト

図4
計算工学

節点ベクトル量の可視化例

図5

要素ベクトル量の可視化例

ルを見やすくしています。
テンソルの節点量および要素量については説明を割愛しますが、ベクトルと同様に定義することが出来ます。ただし、ベクトルの様に矢印等で可視化することは難しく、例えば応力テンソルから Mises 応力や静水圧応力（圧力の逆符号）の様なスカラー値を抜き出して可視化することになります。VTK の解説書 [4] 等を参考にしてみてください。

5

複数要素モデルの作成と可視化

次に、要素が4節点四面体1個ではなく異なるタイプの要素が複数個ある場合のモデルを作ってみます。こ
こでは、4節点四面体、6節点五面体、および8節点六面体が1個ずつ計3個の要素から成るモデルを作ってみます。先程と同様に、下記のテキストファイルを適当なファイル名（ここでは “sample-b.vtk” とします）で保存してください。
-------------------# vtk DataFile Version 4.1
This is a comment line.
ASCIIDATASET UNSTRUCTURED_GRID
POINTS 11 float
0. 0. 0.
1. 0. 0.
0. 1. 0.
0. 0. 1.
-1. 0. 0.
-1. 0. 1.
-1. 1. 0.
0. 2. 1.
-1. 2. 1.
-1. 1. 2.
0. 1. 2.
CELLS 3 21
4 0 1 2 3
6 0 3 2 4 5 6（29-4）

Vol.23, No.4 2018

チュートリアル

ParaView 超入門

8 2 6 5 3 7 8 9 10CELL_TYPES 3101312-------------------節 点 数 が11個 に、 要 素 数 が3個 に 増 え て い ま す。
“CELLS” の下の3行が4節点四面体、6節点五面体、8節点六面体を行毎に定義しており、行頭に構成節点数を、 以 降 行 末 ま で 構 成 節 点 番 号 が 並 ん で い ま す。
“CELLS” の行末の “21” はその下に続く要素リストの定義 に 用 い ら れ る 数 字 の 個 数 を 表 し て い ま す か ら、
(1+4)+(1+6)+(1+8)=21と い う 内 訳 で す。 ま た、“CELL_TYPES” の下の3行の “10”、“13”、“12” はそれぞれ4節点四面体、6節点五面体、8節点六面体の要素タイプ番号を表します。
で は、ParaView で “simplest-b.vtk” を 可 視 化 し て み ます。図6では表示を “Surface With Edges”としています。3つの異なる要素が表示されていることが確認できます。

図6

3要素モデル形状の可視化例

使用できる要素タイプや要素タイプ番号および各要素の構成節点番号の並び順などについては VTK の解説
書 [4] を参照してください。

6

連番ファイルによるアニメーション

例えば時間発展計算を行う動的問題の解析結果であれ ば、 ア ニ メ ー シ ョ ン を 表 示 さ せ た く な り ま す。
ParaView では時相毎の VTK ファイルを連番で用意するだけで簡単にアニメーションを表示させることが出来ます。
例 え ば 時 刻 t=0の デ ー タ を “test-000.vtk” に、t= ⊿ t のデ ー タ を “test-001.vtk” に、t=2⊿ t の デ ー タ を “test-002.
vtk” に、 …… と い っ た 具 合 に 保 存 し ま す。 こ れ を
ParaView で開こうとすると、「test-..vtk」という一塊の連番ファイルとして認識されます。これを開くと全データを1つの時刻歴データとして開くことが出来ます。ビデオプレーヤーにある様なアイコン達をクリックすれば再生したり巻き戻したりの操作が可能です。
各時相の時刻を画面に表示するにはメニューバーから Filters → Temporal → Annotate Time Filter をクリックし計算工学ます。画面左側に現れたウィンドウのパラメータを調
整 す れ ば 望 み の 時 間 が 表 示 で き ま す。 そ の 他 に もFilters → Temporal の下にはアニメーション向けの様々なフィルター（ツール）が用意されているので試してみてください。

7

複数ファイルの同時可視化

8

バ イ ナ リ 形 式 の Legacy VTK と VTK XML
ファイル出力Legacy VTK ファイルの不便な点の1つに、パートやグループという概念が無いことが挙げられます。沢山のパーツから成る物体であれば、指定したパーツのみを表示したいという状況が頻繁に現れますが、単一のvtk ファイルではそれが実現できません。その様な場合にはパーツ毎に独立した複数の vtk ファイルを用いると良いでしょう。
例えば、A,B,C の3つのパーツから成る場合は “A.vtk”と “B.vtk” と “C.vtk” を別々に用意し、ParaView で3つを同時に開きます。そうすれば A,B,C の3つが画面上に同時に表示されます。画面左側の各ファイル名の左にある目玉のマークをクリックすればパーツ毎に表示／非表示を切り替えられます。
この状態で何かの操作（コンター表示する量の変更など）を行うと、A,B,C のいずれか1つのみにその操作が反映されます。多くの場合、この様な操作は全てのパーツに対して同時に行いたい事の方が多いため、このままでは何度も同じ操作をせねばならず面倒です。
そんな時は、画面左側の全ファイル名を選択した状態で「Group Datasets」のアイコンをクリックします。すると一番下に GroupDatasets1という項目が現れます。これを選択した状態で何かの操作をすれば全てのパーツに一括して同じ操作を実行出来ます。

Legacy VTK ファイルの別の不便な点の1つに、ファイルサイズが大きいことが挙げられます。VTK XML
ファイルであれば zlib によるデータ圧縮が可能になるのですが、フォーマットがやや難解で初学者には不向きです。Legacy VTK ファイルのままファイルサイズの低減と読込速度の向上を図るにはバイナリ形式を用いることになります。
まずは先程の “sample-a.vtk” をバイナリ形式に変換したファイルをテキストエディタで開いた場合、どの様に見えるのかを示します。
-------------------# vtk DataFile Version 4.1
This is a comment line.
BINARYDATASET UNSTRUCTURED_GRID
POINTS 4 float

この行は文字化けして見える
CELLS 1 5（29-5）

Vol.23, No.4 2018

チュートリアル

ParaView 超入門

この行は文字化けして見える

writer = vtk.vtkUnstructuredGridWriter()writer.SetFileName(sys.argv[2])writer.SetInputData(reader.GetOutput())
writer.SetFileTypeToBinary()
writer.Write()********************
最後に、おまけとして、非構造格子の Legacy VTK
ファイルを VTK XML の VTU ファイル形式に変換する
Python スクリプトも紹介しておきます。
********************#!/usr/bin/env python2
import sys
import vtk

CELL_TYPES 1

この行は文字化けして見える
POINT_DATA 4SCALARS Point_Scalar_Data float
LOOKUP_TABLE default

この行は文字化けして見える
VECTORS Point_Vector_Data float

この行は文字化けして見える
CELL_DATA 1SCALARS Cell_Scalar_Data float
LOOKUP_TABLE default

この行は文字化けして見える

if len(sys.argv) != 3:
print 'Usage:', sys.argv[0], 'inp.vtk out.vtu'
sys.exit(1)VECTORS Cell_Vector_Data float

この行は文字化けして見える-------------------バイナリ形式と言っても全てがバイナリで記述される訳ではなく、アスキー形式で数字が羅列されていた
行のみがバイナリで記述され、文字化けして見えることになります。注意が必要なのはバイナリのエンディアンが Big endian であるという点です。一般的な PC はLittle endian なので、自作プログラム等でバイナリ部分を出力する際はスワッピングを行ってから出力を行う必要があります。
さて、プログラムの初学者だと自作プログラムではアスキー形式で出すのが精一杯かと思います。その様な場合は一旦アスキー形式で出力した後、別途バイナリ形式に変 換するのが良いでしょう。非 構造 格 子の Legacy
VTK ファイルをバイナリ形式に変換する Python スクリ
プトを紹介しておきます（VTK 7.1.1で動作を確認）。
********************#!/usr/bin/env python2
import sys
import vtk
if len(sys.argv) != 3:
print 'Usage:', sys.argv[0], 'inp.vtk out.vtk'
sys.exit(1)reader = vtk.vtkUnstructuredGridReader()reader.SetFileName(sys.argv[1])reader.ReadAllScalarsOn()reader.ReadAllVectorsOn()reader.ReadAllTensorsOn()reader.Update()

計算工学

reader = vtk.vtkUnstructuredGridReader()reader.SetFileName(sys.argv[1])reader.ReadAllScalarsOn()reader.ReadAllVectorsOn()reader.ReadAllTensorsOn()reader.Update()
writer = vtk.vtkXMLUnstructuredGridWriter()writer.SetFileName(sys.argv[2])writer.SetInputData(reader.GetOutput())
writer.Write()********************
■参考文献
[1]
[2]
[3]
[4]
[5]
[6]
[7]

（29-6）

Utkarsh Ayachit, “The ParaView Guide”, https://www.
paraview.org/download/.
Kenneth Moreland, “The ParaView Tutorial”, https://www.
paraview.org/download/.
“ParaView Getting Started Guide”, https://www.paraview.org/download/.
“VTK File Formats”, http://www.vtk.org/VTK/img/fileformats.pdf.
林真 , “はじめての ParaView 改訂版”, 工学社 .
大嶋拓也 , “ParaView 導入ガイド”, 日本音響学会誌 , 69(8),407-412.
Python Examples, https://lorensen.github.io/VTKExamples/site/Python/.

Vol.23, No.4 2018