3863

チュートリアル

前号に引き続き、フリーの可視化ソフトとして今日広く利用されている ParaView の使い方についてその初歩の初歩を解説します。前号では主として ParaView に読み込ませるためのLegacy VTK のファイル形式を解説し、非構造格子を用いた有限要素解析結果を ParaView で表示させることを目指しました。本号ではより実際的な状況として固体の微小変形解析およびモード解析に際して出力すべき VTK ファイルの内容とそれを ParaView で開いた後の便利な可視化方法について解説を行います。ParaView 関連の書籍およびウェブ上にある ParaViewの操作方法に関するドキュメント類と併せてお読みください。

ParaView 超入門 其の二
大西 有希
1

はじめに2

お勧めの設定本稿はフリーの汎用可視化ソフトである「ParaView」の超入門チュートリアルの第二弾です。前号（Vol. 23，No. 4）の第一弾をご覧になっていない方はまずそちらからご覧になることをお勧めします。
本チュートリアルは主に自分で FEM などのコードを書いている方向けに自作コードの解析結果を ParaViewでとりあえず可視化できるようになることを目指しています。前号では ParaView に読み込ませる Legacy VTKファイル形式の基本的なフォーマットを中心に解説しました。本号ではより実際的な状況を想定し、固体の微小変形解析およびモード解析に際して出力すべきLegacy VTK ファイルの内容とそれを ParaView で効果的に可視化するための手順について解説します。

本題に入る前に、ParaView のお勧め設定を紹介した
い と 思 い ま す。ParaView を 起 動 し て メ ニ ュ ー バ ー のEdit → Settings を 開 く と 様 々 な 環 境 設 定 を 行 え ま す。
Settings ウィンドウの右上に Toggle advanced properties のアイコン（歯車の絵）があるので、これを ON にしておくと細かいカスタマイズが可能となります。以下、現時点の ParaView 最新版である5.6.0におけるお勧めの設定項目を箇条書きで記します（詳細は文献 [1] を参照）。
● General タブ、Show Welcome Dialog をオフ
起動の度に ParaView のロゴが描かれたウィンドウが現れるのを抑制できます。
● General タブ、Override Font をオン
ParaView内のフォントサイズをシステムデフォルト値
筆者紹介
おおにし ゆうき
2005年東京工業大学大学院情報理工学研究科博士課程修了、みずほ情報総研株式会社を経て、現在、東京工業大学工学院助教。固体の超大変形解析、腐食や電着塗装などの電気化学解析、熱／光インプリントのプロセス解析などの研究に従事。

Vol.24, No.1 2019（25）

以外にセット出来ます。Linux環境でqtconﬁgの設定がParaViewに上手く反映されない場合に重宝します。
● General タブ、Auto Apply をオン
操作の度に Apply をクリックする手間が省けます。
大規模モデルを扱う場合に Auto Apply を行うと処理待ち時間が増大するので逆に不便になることがありますが、ParaView の勉強中は Auto Apply をオンにしておくことをお勧めします。
● Genaral タブ、Load All Variables をオンメモリに余裕があれば、これをオンにすることで描画が高速化されます。大規模モデルを扱う場合はオフにしないとメモリ不足に陥る可能性があります。
● General タブ、Auto Convert Properties をオン
セルデータをポイントデータに変換する処理を自動で行ってくれる様になります。
● General タブ、Default Time Step を Go to last timestep
連番のアニメーションファイル群を開いた際、最後のタイムステップの結果をデフォルトで表示してくれるようになります。
● Color Palette タブ、Load Palette を Print Background
印刷に適した配色に変更されます。可視化した画像や動画を論文やスライドに貼り付ける場合、背景は白の方が見易いことが多いです。
続きは Web で
日本計算工学会誌「計算工学（Vol.24, No.1）」HP:
http://www.jsces.org/activity/journal/チュートリアル

3

ParaView 超入門 其の二

微小変形の拡大表示

微小変形解析の可視化では変形前後の形状変化が目に見えないほど小さいことが多いため、変形量を拡大して表示させることがよく行われます。ParaView では「WarpBy Vector」という機能を使ってそれが実現できます。
本号でも入力ファイル形式には Legacy VTK[2] を使用します。まずは、前号のものと似た下記の VTK ファイルを作成してください。
-------------------# vtk DataFile Version 4.1
This is a comment line.
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 4 float
0. 0. 0.
1. 0. 0.
0. 1. 0.
0. 0. 1.

図1

WarpByVector1の Properties を表示させた様子

CELLS 1 54 0 1 2 3
CELL_TYPES 1
10
POINT_DATA 4VECTORS Displacement float
0e-3 0e-3 0e-3-1e-3 +2e-3 -3e-3+2e-3 -1e-3 +2e-3-3e-3 +2e-3 -1e-3-------------------“POINT_DATA 4” より上の部分は前号の最初の VTKファイルと全く同じで、物体の初期位置を定義していると考えてください。それ以降の行は節点データとして変位（Displacement）ベクトルを定義しています。物
体のサイズは1のオーダーであるのに対し、変位は10の-3乗のオーダーとなっています。
で は、 こ れ を ParaView で 可 視 化 し ま す。 作 成 し た
VTK を開いた後、メニューバー下の Warp By Vector のアイコン（片持ち梁が曲がっている絵）またはメニュー
バーの Filters → Common から Warp By Vector をクリック
し ま す。 す る と 画 面 左 の Pipeline Browser に Warp By
Vector1と い う 項 目 が 現 れ ま す。 そ の Properties（図1参照）の最上部を見ると Vectors の所がグレー（変更不可）
で Displacement になっていると思います。またその下の Scale Factor の所にスライドバーと数字があり、拡大率を変更できるようになっています。この値を1よりも大きな値にすることで変形を拡大表示することが出来ま す。 さ ら に そ の 下 の Coloring で Displacement とMagnitude を選択すると変位の大きさに応じたカラーコンター（図2参照）が表示できます。
計算工学

図2

Displacement Magnitude でカラーコンターを表示させた様子

補足ですが、変形を拡大表示させた時刻歴ニメーションを表示させることも可能です。前号に記した様な連番の VTK ファイルを用意して一度に開き Warp ByVector を施すと、任意の変形倍率での時刻歴アニメーションを可視化できます。ただし、初期位置のデータが全ファイルで重複してしまうためファイルサイズが大きくなるのが玉に瑕です。

4

拡大率を変化させるアニメーション

前節の例では拡大率を手動で決めて変形を表示していました。「Animation View」の機能を使うと、この拡大率を変化させたアニメーションを可視化させることが出来ます。固体力学の計算でこの機能が使いたくなる状況は固有振動解析の際に訪れます。モード解析では固有モードとして固有ベクトルを出力しますが、その固有ベクトルを単に節点変位として静止画で表示させても振動しているイメージが湧きづらいことがあります。そんな時にこの Animation View の機能を使用します。
VTK ファイルの中身は前節のものと同じでも良いの（25-2）

Vol.24, No.1 2019

チュートリアル

ParaView 超入門 其の二ですが、一応モード解析の雰囲気を出すために下記のテキストを先程の VTK ファイルの末尾に追記して保存してください。
--------------------＜先程の VTK ファイルの末尾への追記分＞
VECTORS Mode_1 float
0 0 00 0 0
0 0 0+7.071068e-1 +7.071068e-1 0VECTORS Mode_2 float
0 0 00 0 00 0 0+7.071068e-1 -7.071068e-1 0-------------------先 程 の “Displacement” と 同 じ く POINT_DATA と し てVECTORS を定義しており、モード1とモード2に対しそれぞれ "Mode_1" と "Mode_2" という名前をつけています。注意点として、追記分の頭には "POINT_DATA4" の記載が不要です（既に "Displacement" の前に書いてあるため）。これを余分に書いてしまうと ParaView がファイルを正しく読み込んでくれません。
ParaView でこのファイルを開いたのち先程と同じ手順で Warp By Vector を適用しますが、今回は節点ベクトルのデータが複数あるため、Properties 最上部の Vectorsのところが変更可能になっています（図3参照）。ここでは 例 と し て "Mode_1" を 選 択 し て く だ さ い。 同 時 にColoring の 方 も "Mode_1" の Magnitude に 変 更 し て お くと良いでしょう。
この状態でメニューバーの View → Animation View を選択し、画面下側に Animation View を表示させてください。「＋」記号の行が Warp By Vector1と Scale Factor になっていることを確認して「＋」記号をクリックします。次に、追加された行にある「／」記号をダブルクリックすると Animation Keyframes のポップアップが現れます。New ボタンを数回クリックしてから図4の様に数 値 を 入 力 し、OK を ク リ ッ ク し て く だ さ い。No.
Frames の値は任意ですが、21ぐらいが良いでしょう。
以上の設定を終えると Animation View が図5の様になります。
最後にメニューバー下のアニメーション再生用のアイコン群の中から Loop を ON にし、Play で再生してみてください（図6参照）。両振りで振動する様子がループ再生されると思います。Properties の Vectors を Mode_2に変えれば異なるモードで振動する様子が同様に可視化 出 来 ま す。 ま た、 振 動 の 振 幅 を 変 更 す る に はAnimation Keyframes の Value の値（図4の三列目の値＝拡大率）を変更します。

図4

Animation View の Animation Keyframes を 両 振 り 振 動に変更した様子

図5

図3WarpByVector1の Properties で Vectors と Coloring をMode_1に変更した様子

計算工学

図6（25-3）

Animation View の設定を終えた様子

Mode_1を Warp By Vector と Animation View を使って可視化した様子
Vol.24, No.1 2019

チュートリアル

5

ParaView 超入門 其の二テンソルからのスカラー抽出

VTK ファイルに応力や歪みなどのテンソルを出力した場合、ParaView のデフォルトの機能として抽出されるスカラー量は Magnitude（成分の自乗和の平方根）と各成分だけです。従って、例えば応力テンソルから圧力や Mises 応力などのスカラー量を抽出する作業はユーザー自身で行わなければなりません（可視化機会の多い
Mises 応 力 な ど は ソ ル バ ー で 計 算 し て お い て VTK にSCALARS として予め出力する方法もあるかと思います）。この様な場合は「Calculator」を使用します。
コーシー応力 (Cauchy_Stress) をテンソル量として V出力した VTK ファイルの例を示します。やはり先程のVTK ファイルの末尾に下記を追加してください。
--------------------＜先程の VTK ファイルの末尾への追記分＞
CELL_DATA 1TENSORS Cauchy_Stress float
1e6 2e6 3e62e6 4e6 5e6
3e6 5e6 6e6-------------------この例では四面体一次要素なので CELL_DATA として出力しています。コーシー応力は対称テンソルなのですが、VTK には対称テンソルという概念が無いので、3×3の一般テンソルとして出力することになります。
ではこのコーシー応力から圧力を可視化させる方法を見て行きます。上記 VTK ファイルを ParaView で開き、メニューバー下の Calculator のアイコン（電卓の絵）またはメニューバーの Filters → Common → Calculator をクリックします。すると Pipeline Browser に Calculator1が追加され ま す。 そ の Properties の 最 上 部 の Attribute Type を CellData に変更、Result Array Name を "Pressure" に変更、さらにその直下の空欄に下記の式を（一行で）打ち込みます。
-(Cauchy_Stress_0+Cauchy_Stress_4+Cauchy_Stress_8)/3
ここで、添字の “_0”、“_4”、および “_8” はそれぞれ応力 σ の xx、yy、および zz 成分を意味します。つまり、
圧力 p をp= −(σxx + σyy + σzz )/3と計算しています。これで新たなセルデータとしてスカラー量 "Pressure" が定義されました（図7参照）。
最後にメニューバー下にある表示変数を選ぶドロップ ダ ウ ン リ ス ト か ら Pressure を 選 択（前 節 同 様 にProperties の Coloring で選択操作しても良い）すると圧力のカラーコンターが表示されます（図8参照）。今回は四面体1要素なので要素全体で一定圧力となっています。
同様の手順で Mises 応力を計算するなら、式の部分に下記を（一行で）打ち込みます。
(((Cauchy_Stress_0-Cauchy_Stress_4)^2+(Cauchy_Stress_4Cauchy_Stress_8)^2+(Cauchy_Stress_8-Cauchy_Stress_0)^2+6*(Cauchy_Stress_1^2+Cauchy_Stress_5^2+Cauchy_Stress_6^2))*0.5)^0.5
計算工学

図7

Calculator1の Properties で Cell Data と し て Pressureを定義した様子

図8Calculator で Pressure を 定 義 し、 そ れ を カ ラ ー コ ン
ター表示させた様子

その他のテンソル不変量などの式は皆さん自身でお試しください。

6 Legacy VTK のバイナリ出力を行うプログラム例

前号にて Legacy VTK ファイルに吐き出す数値をバイナリ形式に変更してファイルサイズの低減と読み込み速度の向上を行うことが出来ると紹介しました。そこ
でエンディアン変換の必要性についてサラッとだけ触れましたが、紙面の都合上舌足らずの解説となっていました。そこで、本節にて具体的なエンディアン変換方法について補足を加えたいと思います。「そもそもエンディアンって何ですか？」という方は Wikipedia 等を御覧ください。
コンピュータ環境として一般的な PC（Intel の x86系等のリトルエンディアンのプロセッサ搭載）の使用を想定します。ParaView でバイナリ形式の Legacy VTK ファイ
ルを読み込む際はビッグエンディアンで記述されていることを仮定している様なので、一般的な PC ではエンディアンの変換が必要となります。実装に用いるプログ
ラミング言語は C++ とし、int 型は32bit であるとします。

（25-4）

Vol.24, No.1 2019

チュートリアル

ParaView 超入門 其の二

まず、int 型および ﬂoat 型変数のエンディアンを変換するインライン関数のコードを示します。
********************
inline void bswap(int& val){
char* words = reinterpret_cast<char*>(&val);
std::swap(words[0], words[3]);std::swap(words[1], words[2]);}inline void bswap(float& val){
char* words = reinterpret_cast<char*>(&val);
std::swap(words[0], words[3]);std::swap(words[1], words[2]);}********************
これらの関数は int 型または ﬂoat 型の値を一旦 char 型
4ワードの配列と強制的にみなし、ワードの順番を入れ替えています。例えば元の4ワードが "ABCD" であったとすると、変換後は "DCBA" になります。
次 に こ の 関 数 を 用 い て POINTS を 吐 き 出 す ま で のコ ー ド を 示 し ま す。CELLS 以 降 の 出 力 お よ び 例 外チェック等は省略していますのでご注意ください。
********************
std::vector< std::array<double,3> > node;＜ node を作る部分は省略＞
std::ofstream ofs;
ofs.open("output.vtk", std::ios::binary);ofs << "# vtk DataFile Version 4.1\n";ofs << "This is a comment line.\n";ofs << "BINARY\n";ofs << "DATASET UNSTRUCTURED_GRID\n";ofs << "POINTS " << node.size()*3 << " float\n";for(auto& vec : node){for(auto& x : vec){
float tmp = float(x);bswap(tmp);
ofs.write((char*)&tmp, 4);}}********************

計算工学

まず3次元ベクトルの配列である node を定義し、これを節点座標として出力するものとします。次にファイル名 "output.vtk" の ofstream をバイナリモードで開いています。諸々のヘッダー部分はアスキーモードと同様に << 演算子を用いて出力していますが、節点座標の出力（つまり for 文の中）では write 関数を使って出力しています。各節点座標の成分を一旦 ﬂoat に変換し、それを bswap 関数でビッグエンディアンに変換し、それを4ワードの char として書き出しています。
なお、ここで紹介したエンディアン変換方法は可読性が高い代わりにやや遅い実装です。各コンパイラのBuilt-in 関数（例えば GNU G++ なら __builtin_bswap32関数）を使う方法、ビット演算子（& や << など）を使う方法、Boost の Endian ライブラリを使う方法など様々な方法があります。速度を追い求める人は色々試してみると良いでしょう。
前号でも触れましたが、プログラムの初学者はアスキー形式での Legacy VTK ファイル出力が出来ればそれで充分かと思います。本説で紹介した Legacy VTK のバイナリ形式や VTK XML の圧縮ファイル形式を使えばファイルサイズは小さく出来ますが、アスキー形式ならではのデバッグの容易さは失われます [3]。前号で紹介した Python スクリプトを使用しつつ、各々の要求に合わせたファイル形式を選択してください。
■参考文献
[1]
[2]
[3]

（25-5）

Utkarsh Ayachit, “The ParaView Guide” , https://www.
paraview.org/download/ .
“VTK File Formats for VTK Version 4.2” , http://www.vtk.org/VTK/img/ﬁle-formats.pdf .
Earth Models Website,
http://www.earthmodels.org/software/vtk-and-paraview/vtkﬁle-formats .

Vol.24, No.1 2019