遠隔可視化ツール PBVR(v1.05)マニュアル2015 年５月

独立行政法人日本原子力研究開発機構
システム計算科学センター

改訂履歴
版数

改定日

章番号

改版内容

1.04-1

2015.3.31

-

新規

1.05

2015.5.18

5.2

サーバの可視化パラメータファイル読み込み機能と粒子データ出力機能を追記

2015.6.8

5.4.2

メインパネルの新機能である File ボタンについて記述

5.4.6

粒子データ保存機能について記述

表紙

日付フォーマット修正

3

瑣末なコメント付加

4瑣末なコメント付加

4.2.3.6

BX900 との接続の記述を修正

i

目次
１ はじめに ............................................................................................................................................. 4
１.１. 概要 ........................................................................................................................................... 4
１.２. 動作環境 .................................................................................................................................... 5
２ インストール...................................................................................................................................... 6
２.１. フィルタ .................................................................................................................................... 6
２.１.１. ロードモジュールのインストール .................................................................................... 6
２.１.２. ソースコードからのインストール .................................................................................... 6
２.２. サーバ ........................................................................................................................................ 7
２.２.１. ロードモジュールのインストール .................................................................................... 7
２.２.２. ソースコードからのインストール .................................................................................... 8
２.２.３. Windows........................................................................................................................... 9２.３. クライアント ............................................................................................................................. 9
２.３.１. ロードモジュールのインストール .................................................................................... 9
２.３.２. ソースコードからのインストール .................................................................................. 10
２.３.３. Linux, Mac...................................................................................................................... 10
２.３.４. Windows......................................................................................................................... 10
３ フィルタ ........................................................................................................................................... 12３.１. 概要 ......................................................................................................................................... 12３.２. 分割方式 .................................................................................................................................. 12３.３. 起動方法 .................................................................................................................................. 14
３.４. ファイル形式 ........................................................................................................................... 14
３.４.１. 入力データ形式 ............................................................................................................... 15
３.４.２. エンディアン ................................................................................................................... 15
３.４.３. フィルタ出力情報ファイル(.pfi) ..................................................................................... 16
３.４.４. SPLIT ファイル形式 ........................................................................................................ 18
３.４.５. サブボリューム集約ファイル形式 .................................................................................. 21
３.４.６. ステップ集約ファイル形式 ............................................................................................. 26
３.５. パラメータファイル ................................................................................................................ 30
３.６. MPI 並列処理 ........................................................................................................................... 31
３.７. ステージング環境での実行方法 .............................................................................................. 32
３.７.１. 実行シェルとパラメータファイル .................................................................................. 32
３.７.２. 入出力ファイルとディレクトリ ...................................................................................... 33
３.８. 要素タイプの混合した非構造格子の実行 ............................................................................... 34
４ サーバ .............................................................................................................................................. 36ii

４.１. 概要 ......................................................................................................................................... 36
４.２. 起動方法 .................................................................................................................................. 36
４.２.１. バッチモードでの起動 .................................................................................................... 37
４.２.２. クライアント・サーバモードでの起動 ........................................................................... 37
４.２.３. ソケット通信によるクライアント・サーバの接続 ......................................................... 38
５ クライアント.................................................................................................................................... 45
５.１. 概要 ......................................................................................................................................... 45
５.２. 起動方法 .................................................................................................................................. 45
５.３. 終了方法 .................................................................................................................................. 47
５.３.１. 通常終了 .......................................................................................................................... 47
５.３.２. 強制終了 .......................................................................................................................... 47
５.４. 操作説明 .................................................................................................................................. 48
５.４.１. ビューワ .......................................................................................................................... 48
５.４.２. メインパネル ................................................................................................................... 49
５.４.３. 伝達関数エディタ ............................................................................................................ 54
５.４.４. タイムステップ制御パネル ............................................................................................. 64
５.４.５. 画像ファイル作成 ............................................................................................................ 65
５.４.６. サブボリューム毎の粒子データを統合して保存 ............................................................ 66
６ サンプルデータを用いた可視化事例 ............................................................................................... 67
６.１. フィルタ処理 ........................................................................................................................... 67
６.２. プログラム起動 ....................................................................................................................... 68
６.３. 伝達関数の設計 ....................................................................................................................... 69
６.３.１. 単変量のボリュームレンダリング .................................................................................. 69
６.３.２. 多変量のボリュームレンダリング .................................................................................. 70
６.３.３. 断面表示 .......................................................................................................................... 70
６.３.４. 伝達関数の合成 ............................................................................................................... 71
６.４. 可視化結果の保存 .................................................................................................................... 72
６.５. バッチモード処理 .................................................................................................................... 73iii

１ はじめに１.１. 概要
本書は，日本原子力研究開発機構システム計算科学センターで開発した遠隔可視化システム PBVRのマニュアルである。本システムでは，京都大学小山田研究室で開発された PBVR（Particle Based
Volume Rnderring）法，および，KVS ライブラリを用いて，大規模ボリュームデータの高速な遠隔可視化を実現している。システムは以下の３つのコンポーネントで構成されている。
（１） フィルタ
解析結果のボリュームデータを入力し，PBVR サーバでの並列可視化処理単位であるサブボ
リュームにデータを領域分割する。
（２） PBVR サーバ
サブボリュームを入力して PBVR 法による並列可視化を行い，粒子データを出力する。
（３） PBVR クライアント
粒子データを入力し，OpenGL を用いて画像として表示する。

図 1

可視化アプリケーションシステムの全体構成

4

１.２. 動作環境
本システムの動作確認を行った環境を示す。
●フィルタ
プラットフォーム

コンパイラ

Linux 64bit

gcc version 4.4.6

Mac 64bit※2

gcc version 4.8.2

Windows7 64bit

Visual Studio 2013

京コンピュータ

富士通コンパイラ

FX10

富士通コンパイラ

BX900

富士通コンパイラ

ライブラリ

●サーバ
プラットフォーム

コンパイラ

ライブラリ

Linux 64bit

g++ version 4.4.6

kmath, ntl※1

Mac 64bit※2

g++ version 4.8.2

Windows7 64bit

Visual Studio 2013

京コンピュータ

富士通コンパイラ

kmath, ntl※1

FX10

富士通コンパイラ

kmath, ntl※1

BX900

富士通コンパイラ

kmath, ntl※1

プラットフォーム

コンパイラ

ライブラリ

Linux 64bit

g++ version 4.4.6

OpenGL, GLUT

Mac 64bit※2

g++ version 4.8.2

OpenGL, GLUT

Windows7 64bit

Visual Studio 2013

OpenGL, GLUT

●クライアント※1. kmath は理化学研究所計算科学研究機構で開発された超並列計算用乱数ライブラリであり，ntl
ライブラリを用いて構築される。
※2. Mac の Xcode で導入されるデフォルトの gcc は OpenMP 非対応なので，ロードモジュールを利用する，あるいは，ソースコードをコンパイルするために，OpenMP 対応の gcc を導入する必要がある。提供バイナリは macports で導入された gcc48 によって構築された。Macportsによる gcc の導入例を以下に示す。
$port install gcc48$port select –set gcc mp-gcc48

5

２ インストール
PBVR はロードモジュールパッケージ load_module_v1.04.tgz，および，ソースコードパッケー
ジ pbvr_v1.04.tgz として提供される。以下にフィルタプログラム，サーバプログラム，クライアン
トプログラムのインストール方法を説明する。

２.１. フィルタ
フィルタプログラムは C で実装されており，超並列処理用の MPI+OpenMP 版とスレッド並列処理
用の OpenMP 版が用意されている。

２.１.１. ロードモジュールのインストール
ロードモジュールパッケージの filter ディレクトリに格納されているロードモジュールの構成は以下の通りである。各環境のロードモジュールをパスの通った適当なディレクトリにコピーすることによりインストールが完了する。
表 1

フィルタプログラムのロードモジュール一覧

機種

並列化

ロードモジュール名Linux 64bit

OpenMPfilter_Linux_omp

MPI+OpenMP

filter_Linux_mpi_omp

Mac 64bit

OpenMPfilter_mac

Windows7 64bit

OpenMPfilter_Win_omp.exe

京コンピュータ※1

OpenMPfilter_K_omp

MPI+OpenMP

filter_K_mpi_omp

OpenMPfilter_FX10_omp

MPI+OpenMP

filter_FX10_mpi_omp

OpenMPfilter_BX_omp

MPI+OpenMP

filter_BX_mpi_omp

FX10※1

BX900※1※1. スーパーコンピュータ用のロードモジュールは計算ノード専用となるので，Linux サーバによって構成されるログインノードやポスト処理ノードでは Linux 用ロードモジュールを用いる。

２.１.２. ソースコードからのインストール
ソースコードパッケージの filter.tgz を任意のディレクトリに展開し，以下の Makefile を用いてコンパイルする。生成されたロードモジュールをパスの通った適当なディレクトリにコピーすることによりインストールが完了する。
6

表 2 フィルタプログラムの Makefile 一覧
機種

並列化

ロードモジュール名Linux 64bit

OpenMP

Makefile.linux_omp

MPI+OpenMP

Makefile.linux_mpi_omp

Mac 64bit

OpenMP

Makefile.mac

Windows7 64bit※1

OpenMP

Makefile.win

京コンピュータ※2

OpenMP

Makefile.omp

MPI+OpenMP

Makefile.mpi_omp

OpenMP

Makefile.fx10_omp

MPI+OpenMP

Makefile.fx10_mpi_omp

OpenMP

Makefile.bx_omp

MPI+OpenMP

Makefile.bx_mpi_omp

FX10※2

BX900※2※1. Windows 環境では VS2013 x64 Native Tools コマンドプロンプトを起動し，nmake を用いる。
※2. スーパーコンピュータ用の Makefile はログインノードのクロスコンパイラを想定している。

２.２. サーバ
サーバプログラムは C++で実装されており，超並列処理用の MPI+OpenMP 版とスレッド並列処理
用の OpenMP 版が用意されている。

２.２.１. ロードモジュールのインストール
ロードモジュールパッケージの server ディレクトリに格納されているロードモジュールの構成は以下の通りである。各環境のロードモジュールをパスの通った適当なディレクトリにコピーすること
によりインストールが完了する。
表 3

サーバプログラムのロードモジュール一覧

機種

並列化

ロードモジュール名Linux 64bit

OpenMP

CPUServer_linux_omp

MPI+OpenMP

CPUServer_linux_mpi_omp

Mac 64bit

OpenMP

CPUServer_mac

Windows7 64bit

OpenMPPBVR_Server_win.exe

京コンピュータ※1

OpenMP

CPUServer_k_omp

MPI+OpenMP

CPUServer_k_mpi_omp

OpenMP

CPUServer_fx10_omp

MPI+OpenMP

CPUServer_fx10_mpi_omp

FX10※1

7

BX900※1

OpenMP

CPUServer_bx_omp

MPI+OpenMP

CPUServer_bx_mpi_omp※1. スーパーコンピュータ用のロードモジュールは計算ノード専用となるので，Linux サーバによって構成されるログインノードやポスト処理ノードでは Linux 用ロードモジュールを用いる。

２.２.２. ソースコードからのインストール
ソースコードパッケージの server.tgz を任意のディレクトリに展開し，以下の Makefile を用いてコンパイルする。生成されたロードモジュールをパスの通った適当なディレクトリにコピーすること
によりインストールが完了する。
表 4 サーバプログラムの Makefile 一覧
機種

並列化

ロードモジュール名Linux 64bit※1

OpenMP

makefile.linux_omp

MPI+OpenMP

makefile.linux_mpi_omp

Mac 64bit※3

OpenMP

makefile.mac

京コンピュータ※2

OpenMP

makefile.k_omp

MPI+OpenMP

makefile.k_mpi_omp

OpenMP

makefile.fx10_omp

MPI+OpenMP

makefile.fx10_mpi_omp

OpenMP

makefile.bx_omp

MPI+OpenMP

makefile.bx_mpi_omp

FX10※2

BX900※2※1. Linux 環境で提供される kmath は OpenMPI を用いて構築されており、OpenMPI 以外の MPI
ライブラリを使用する場合には再コンパイルが必要になる。再コンパイルの手順は以下の通り。
[手順１]./server/kmath_linux/random/Makefile.machine を環境に合わせて編集。
[手順２]$cd ./server/kmath_linux/random/c++$make
数値計算ライブラリ（ntl と kmath）が構築できない場合は，makefile の以下の箇所を修正すれば，数値計算ライブラリを使わずにコンパイルできる。
CXXFLAGS= から –DKMATH を削除。
LDFLAGS= から -lkm_random –lntlを削除。

ただし、この場合には MPI 並列版での乱数列の独立性が保証されないので、kmath の利用を推奨する。

※2. スーパーコンピュータ用の Makefile はログインノードのクロスコンパイラの利用を想定している。
※3. mac 版サーバでは数値計算ライブラリ（ntl と kmath）は使用しない。

8

２.２.３. Windows
Windows 版サーバでは数値計算ライブラリ（ntl と kmath）は使用していない。以下のようにしてサーバ本体をコンパイルする。
（１） Visual Studio 2013 環境のある端末上で，サーバ環境を展開する。
（２） 展開したしたディレクトリ配下の\\project_vc\PBVR_Server_win.sln を実行し，Visual
Studio 2013 を起動する。
（３） 構成（下図参照）を Release x64 にする。

図 2

Visual Studio 2013 の構成例

（４） Visual Studio 2013 メニューの[ビルド] ⇒[ソリューションのビルド]を実行する。
（５） \\project_vc\x64\Release 配下に PBVR_Server_win.exe（実行モジュール）が作成される。

２.３. クライアント
サーバプログラムは C++と OpenGL によって実装されている。

２.３.１. ロードモジュールのインストール
ロードモジュールパッケージの client ディレクトリに格納されているロードモジュールの構成は以下の通りである。各環境のロードモジュールをパスの通った適当なディレクトリにコピーすることによりインストールが完了する。
表 5

クライアントプログラムのロードモジュール一覧

機種

並列化

ロードモジュール名Linux 64bit

OpenMPPBVRViewer_linux

Mac 64bit

OpenMPPBVRViewer_mac

Windows7 64bit※1

OpenMPPBVRViewer_win.exe※1. Windows 版については glut32.dll も同じディレクトリにコピーする。

9

２.３.２. ソースコードからのインストール
client.tgz を任意のディレクトリに展開し，コンパイルスクリプトを用いてコンパイルする。生成されたロードモジュールをパスの通った適当なディレクトリにコピーすることによりインストールが完了する。

２.３.３. Linux, Mac
以下のようにコンパイルスクリプトを実行する。
$ cd ./client/PBVRViewer$ sh build_cpu.sh※1. 過去にコンパイルしたオブジェクトファイルを使わずに全てのソースを新規にコンパイルした
い場合は rebuild_cpu.sh を用いる。

２.３.４. Windows（１） glut（64bit）のインストールについて①

下記のホームページより，glut-3.7.6-bin_x64.zip(64bit)をダウンロードする。
http://ktm11.eng.shizuoka.ac.jp/lesson/modeling.html②①を解凍し任意の場所に置く。
glut.hglut32.lib
glut32.dll（２） glui-2.36 のコンパイル①

glui-2.36\src\msvc に移動する。

②

glui.sln を VisualSutudio 2013 で開く。

③

構成（図 2 参照）を Release x64 にする。

④

ソリューションエクスプローラーの glui を右クリック，プロパティを開き，[構成プロパ
ティ]→[C/C++]の追加のインクルードディレクトリに glut.h のパスを追加する。

⑤

ソリューションエクスプローラーの glui を右クリック，ビルドを行う。

（３） KVS-src-1.1.1 のコンパイル①

KVS-src-1.1.1 に移動して build_win.bat を別名でコピーする。

②

kvs.conf を下記のように変更する。
KVS_SUPPORT_GLEW

③

=1

⇒

KVS_SUPPORT_GLEW=0①の bat ファイルの KVS_DIR に[PBVRVIewer.sln のあるディレクトリ]\kvs を指定す
る。

10

④

①の bat ファイルの KVS_GLUT_DIR に glut.lib のあるディレクトリを指定する。

⑤[スタートメニュー]→[Visual Studio 2013]→[Visual Studio ツール]で「VS2013
x64 Native Tools コマンド プロンプト」を開く。

⑥

KVS-src-1.1.1 に移動して①③④で作成したした bat ファイルを実行する。

（４） PBVR 本体のビルド①

構成を Release x64 にする。

②

ソリューションエクスプローラーの PBVRViewer を右クリック，プロパティを開き，[構成プロパティ]→[C/C++]の追加のインクルードディレクトリに glut の include のパスを
追加する。

③

ソリューションエクスプローラーの PBVRViewer を右クリック，プロパティを開き，[構成プロパティ]→[リンカー]の「追加のライブライディレクトリ」に glut の lib のパスを追加する。

④[メニュー]の[ソリューションのビルド]でコンパイルを行う。

⑤\\x64\Release\配下に PBVRViewer.exe（実行モジュール）が作成される。

⑥

実行時は glut32.dll を同じディレクトリに置く。

11

３ フィルタ
３.１. 概要
フィルタプログラムは，時系列ボリュームデータを PBVR サーバの並列処理を目的として分割し，可視化用のサブボリュームデータを生成するプログラムであり，PBVR とは独立な前処理プログラムである。データ分割には 8 分木構造モデルを適用し，構造格子および非構造格子データに対し，任意の 8 分木領域で分割を行い，PBVR サーバの並列処理に有効な入力となるファイル出力を行う。

３.２. 分割方式
八分木構造の領域分割は図 3 に示すように，直方体の各辺を 2 分割し，１つに直方体を 8 個の直方体に分割する。この分割を再帰的に繰り返すことにより領域の細分化を行う。１つの直方体には 8個の子となる直方体が存在し，子の直方体には 1 つの親となる直方体が存在することとなる。

図 3八分木構造の領域分割

128 分木の領域分割の座標値は，図 4 に示すとおり，親となる直方体の頂点座標に対して，各軸の最小値と最大値および最小値と最大値の和を２で割ることによる中点で求める事ができる。各軸方向の座標を各軸の中点との大小関係を比較することにより，ある点がどの領域（子の直方体）内の点となるかが判断可能となる。

図 4八分木構造の領域分割での分割点座標値

13

３.３. 起動方法
実行コマンド（filter）直後にパラメータを記述したパラメータファイル名（任意）を指定すること
によりパラメータが読みとられ実行される。パラメータファイル名が指定されない場合や，存在しな
いファイル名を指定した場合はエラーとなり正しく起動されない。
（MPI+OpenMP での起動方法，N にプロセス並列数を入力する）$ mpiexec –n N ./filter param.txt（OpenMP のみでの起動方法）$./filter param.txt※1. どちらの場合も OpenMP スレッド数は環境変数 OMP_NUM_THREADS で指定。
※2. Window の場合は，VS2013 x64 Native Tools コマンドプロンプトを起動してコマンドを実行。

３.４. ファイル形式
フィルタの入出力ファイル形式に関して以降に示す。なお，出力されるファイルの中で，バイナリ
形式のファイルは全てヘッダ，フッタなしの単精度であり，リトルエンディアンに統一されている。
ファイル形式としては図 5 に示す SPLIT 形式（別名 KVSML 形式），サブボリューム集約形式，ス
テップ集約形式の 3 種類が利用可能である。SPLIT 形式では全てのステップ・サブボリューム毎に独立なファイルを生成する。しかしながら，この方式では 8 分木の階層が増大するとファイル数が爆発的に増大するためサブボリューム毎に時間方向にファイルを集約するサブボリューム集約形式，および，ステップ毎に空間方向にファイルを集約するステップ集約形式を利用可能とした。ファイル形式の詳細を以下で説明する。

図 5

3 つのファイル形式の模式図

14

３.４.１. 入力データ形式
フィルタプログラムで処理できる入力データは以下の通り。
（１）

AVSFLD バイナリデータ（２）

AVSUCD バイナリデータ※1，２※1.

AVSUCD データは data 形式のみで，geom 形式，data_geom 形式は未対応。

※2.

要素タイプは表 8 に示す２次元要素，３次元要素に対応しており，混合要素も利用可能。

AVS データフォーマットの詳細については，例えば，下記を参照。
http://www.cybernet.co.jp/avs/products/avsexpress/dataformat.html

３.４.２. エンディアン
フィルタプログラムで扱うバイナリファイルは，リトルエンディアンに統一されている。リトルエ
ンディアンのマシン上ではエンディアンに関して特別な処理は必要ないが，ビッグエンディアンのマ
シンでは可視化データをリトルエンディアンで出力する，あるいは，リトルエンディアンに変換した
上でフィルタプログラムを実行する必要がある。

15

３.４.３. フィルタ出力情報ファイル(.pfi)
このファイルはバイナリ形式ファイルである。サブボリューム分割前のモデル全体の情報を１つのファイルにまとめて出力する。
全ノード数(int)
全要素数(int)
要素タイプ(int)※1
ファイルタイプ(int)※2
ファイル数(int)※3
成分数(int)
開始ステップ(int)
最終ステップ(int)
サブボリューム数(int)※4
全体 3 次元空間 X 軸最小値(float)
全体 3 次元空間 Y 軸最小値(float)
全体 3 次元空間 Z 軸最小値(float)
全体 3 次元空間 X 軸最大値(float)
全体 3 次元空間 Y 軸最大値(float)
全体 3 次元空間 Z 軸最大値(float)
サブボリューム 1 ノード数(int)
サブボリューム 2 ノード数(int)
サブボリューム 3 ノード数(int)：
サブボリューム n ノード数(int)
サブボリューム 1 要素数(int)
サブボリューム 2 要素数(int)
サブボリューム 3 要素数(int)：
サブボリューム n 要素数(int)
サブボリューム 1 X 軸最小値(float)
サブボリューム 1 Y 軸最小値(float)
サブボリューム 1 Z 軸最小値(float)
サブボリューム 1 X 軸最大値(float)
サブボリューム 1 Y 軸最大値(float)
サブボリューム 1 Z 軸最大値(float)
サブボリューム 2 X 軸最小値(float)
サブボリューム 2 Y 軸最小値(float)
サブボリューム 2 Z 軸最小値(float)
サブボリューム 2 X 軸最大値(float)
サブボリューム 2 Y 軸最大値(float)
サブボリューム 2 Z 軸最大値(float)：
サブボリューム n X 軸最小値(float)
サブボリューム n Y 軸最小値(float)
サブボリューム n Z 軸最小値(float)
サブボリューム n X 軸最大値(float)
サブボリューム n Y 軸最大値(float)16

サブボリューム n Z 軸最大値(float)
ステップ 1 成分 1 最小値
ステップ 1 成分 1 最大値
ステップ 1 成分 2 最小値
ステップ 1 成分 2 最大値：
ステップ 1 成分 N 最小値
ステップ 1 成分 N 最大値：
ステップ m 成分 1 最小値
ステップ m 成分 1 最大値
ステップ m 成分 2 最小値
ステップ m 成分 2 最大値：
ステップ m 成分 N 最小値
ステップ m 成分 N 最大値※1. 要素タイプの定義は表 8 参照。
※2. ファイルタイプは以下の 3 つの形式。
・0：SPLIT 形式

・1：サブボリューム集約形式

・2・ステップ集約形式※3. ファイルタイプが「サブボリューム集約形式」の場合のファイル総数を示す。
※4. サブボリューム数は 8n_layer となる。
・n_layer=0：1 個

・n_layer=1：8 個

・n_layer=2：64 個

・n_layer=3：512 個・n_layer=4：4,096 個・n_layer=5：32,768 個

・n_layer=6：262,144 個

・n_layer=7：2,097,152 個

17

３.４.４. SPLIT ファイル形式
要素構成ファイルおよびノード座標ファイルは，サブボリューム単位に分割される。kvsml ファイ
ルおよび成分ファイルは，サブボリューム単位，ステップ単位に分割される。全ファイル数は，サブボリューム数×2+サブボリューム数×ステップ数×2となる。（例：n_layer=7&step=100：423,624,704 個）

３.４.４.１ ファイル構成
prefix_XXXXX_YYYYYYY_ZZZZZZZ.kvsml………kvsml ファイル（アスキー形式）

prefix_YYYYYYY_ZZZZZZZ_connect.dat………要素構成ファイル（バイナリ形式）

prefix_YYYYYYY_ZZZZZZZ_coord.dat………ノード座標ファイル（バイナリ形式）

prefix_XXXXX_YYYYYYY_ZZZZZZZ_value.dat………成分ファイル（バイナリ形式）

XXXXX：ステップ数（5 桁数値）

YYYYYYY：サブボリューム番号（7 桁数値）

ZZZZZZZ：全サブボリューム数（7 桁数値）

３.４.４.２ kvsml ファイル仕様<?xml version="1.0" ?><KVSML><Object type="UnstructuredVolumeObject"><UnstructuredVolumeObject cell_type="要素タイプ"><Node nnodes="サブボリューム内ノード数"><Value veclen="成分数"><DataArray type="float" file="prefix_XXXXX_YYYYYYY_ZZZZZZZ_value.dat" format="binary" /></Value><Coord><DataArray type="float" file=" prefix_YYYYYYY_ZZZZZZZ_coord.dat" format="binary" /></Coord></Node><Cell ncells="サブボリューム内要素数"><Connection><DataArray type="uint"

file=" prefix_YYYYYYY_ZZZZZZZ_connect.dat" format="binary" /></Connection></Cell></UnstructuredVolumeObject></Object></KVSML>18

３.４.４.３ 要素構成ファイル仕様
要素 1 構成ノード 1
要素 1 構成ノード 2：
要素 1 構成ノード n
要素 2 構成ノード 1
要素 2 構成ノード 2：
要素 2 構成ノード n
要素 3 構成ノード 1
要素 3 構成ノード 2：
要素 3 構成ノード n：
要素 N 構成ノード 1
要素 N 構成ノード 2：
要素 N 構成ノード n

３.４.４.４ ノード座標ファイル仕様
ノード 1
ノード 1
ノード 1
ノード 2
ノード 2
ノード 2
ノード 3
ノード 3
ノード 3

X 座標
Y 座標
Z 座標
X 座標
Y 座標
Z 座標
X 座標
Y 座標
Z 座標
：
：
ノード m X 座標
ノード m Y 座標
ノード m Z 座標

19

３.４.４.５ 成分ファイルの仕様
ノード 1 成分 1
ノード 2 成分 1
ノード 3 成分 1：
ノード n 成分 1
ノード 1 成分 2
ノード 2 成分 2
ノード 3 成分 2：
ノード n 成分 2
ノード 1 成分 m
ノード 2 成分 m
ノード 3 成分 m：
ノード n 成分 m20

３.４.５. サブボリューム集約ファイル形式
要素構成，ノード座標および全ステップの成分が，サブボリューム単位に分割される。指定により複数サブボリューム情報を１ファイルに集約することも可能である。全ファイル数は，最大でサブボ
リューム数となる。
（n_layer=7：2,097,152 個）

３.４.５.１ ファイル構成
prefix_YYYYYYY_ZZZZZZZ.dat ………（バイナリ形式）
prefix：接頭辞

YYYYYYY：ファイル番号（7 桁数値）

ZZZZZZZ：全ファイル総数（7 桁数値）

21３.４.５.２ ファイル仕様（サブボリュームが 1 つの場合）
開始サブボリューム番号
終了サブボリューム番号要素 1 構成ノード 1
要素 1 構成ノード 2：
要素 1 構成ノード n
要素 2 構成ノード 1
要素 2 構成ノード 2：
要素 2 構成ノード n
要素 3 構成ノード 1
要素 3 構成ノード 2：
要素 3 構成ノード n
要素 4 構成ノード 1
要素 4 構成ノード 2：
要素 4 構成ノード n：：
要素 N 構成ノード 1
要素 N 構成ノード 2：
要素 N 構成ノード n
ノード 1 X 座標
ノード 1 Y 座標
ノード 1 Z 座標
ノード 2 X 座標
ノード 2 Y 座標
ノード 2 Z 座標
ノード 3 X 座標
ノード 3 Y 座標
ノード 3 Z 座標
ノード 4 X 座標
ノード 4 Y 座標
ノード 4 Z 座標：：
ノード m X 座標
ノード m Y 座標
ノード m Z 座標

サブボリューム情報

要素単位

要素構成

ノード単位

ノード座標

22

ステップ 1 ノード 1 成分 1
ステップ 1 ノード 2 成分 1
ステップ 1 ノード 3 成分 1：
ステップ 1 ノード n 成分 1
ステップ 1 ノード 1 成分 2ステップ 1 ノード 2 成分 2ステップ 1 ノード 3 成分 2：ステップ 1 ノード n 成分 2ステップ 1 ノード 1 成分 m
ステップ 1 ノード 2 成分 m
ステップ 1 ノード 3 成分 m：
ステップ 1 ノード n 成分 m：：：：
ステップ M ノード 1 成分 1
ステップ M ノード 2 成分 1
ステップ M ノード 3 成分 1：
ステップ M ノード n 成分 1
ステップ M ノード 1 成分 2ステップ M ノード 2 成分 2ステップ M ノード 3 成分 2：ステップ M ノード n 成分 2ステップ M ノード 1 成分 m
ステップ M ノード 2 成分 m
ステップ M ノード 3 成分 m：
ステップ M ノード n 成分 m

成分単位

ステップ単位23

（サブボリュームが複数の場合）
開始サブボリューム番号
終了サブボリューム番号要素 1 構成ノード 1
要素 1 構成ノード 2：
要素 1 構成ノード n：
要素 N 構成ノード 1
要素 N 構成ノード 2：
要素 N 構成ノード n
ノード 1 X 座標
ノード 1 Y 座標
ノード 1 Z 座標：
ノード m X 座標
ノード m Y 座標
ノード m Z 座標
：
：
：
：
：
：
：
要素 1 構成ノード 1
要素 1 構成ノード 2：
要素 1 構成ノード n：
要素 N 構成ノード 1
要素 N 構成ノード 2：
要素 N 構成ノード n
ノード 1 X 座標
ノード 1 Y 座標
ノード 1 Z 座標：
ノード m X 座標
ノード m Y 座標
ノード m Z 座標
ノード m X 座標
ノード m Y 座標
ノード m Z 座標

サブボリューム情報

要素構成

サブボリューム 1

ノード座標

要素構成

サブボリューム n

ノード座標

24

ステップ 1 ノード 1
ステップ 1 ノード 2：ステップ 1 ノード n：ステップ 1 ノード 1
ステップ 1 ノード 2：ステップ 1 ノード n：：ステップ 1 ノード 1
ステップ 1 ノード 2：ステップ 1 ノード n：ステップ 1 ノード 1
ステップ 1 ノード 2：ステップ 1 ノード n：：：：ステップ N ノード 1
ステップ N ノード 2：ステップ N ノード n：ステップ N ノード 1
ステップ N ノード 2：ステップ N ノード n：：ステップ N ノード 1
ステップ N ノード 2：ステップ N ノード n：ステップ N ノード 1
ステップ N ノード 2：ステップ N ノード n

成分 1
成分 1
成分 1
サブボリューム単位

成分 m
成分 m
成分 m
ステップ単位

成分 1
成分 1
成分 1
サブボリューム単位

成分 m
成分 m
成分 m

成分 1
成分 1
成分 1
サブボリューム単位

成分 m
成分 m
成分 m
ステップ単位

成分 1
成分 1
成分 1
サブボリューム単位

成分 m
成分 m
成分 m

25

３.４.６. ステップ集約ファイル形式
要素構成ファイルおよびノード座標ファイルは，それぞれが 1 つのファイルとなり（全サブボリュー
ムの情報を１つのファイルに集約），成分ファイルは，ステップ単位に分割される。全ファイル数は，ステップ数＋2 となる。

３.４.６.１ ファイル構成
prefix_connect.dat………要素構成ファイル（バイナリ形式）

prefix_coord.dat………ノード座標ファイル（バイナリ形式）

prefix_XXXXX_value.dat ………成分ファイル（バイナリ形式）
prefix：接頭辞

XXXXX ：ステップ数（5 桁数値）

26

３.４.６.２ 要素構成ファイル仕様
サブボリューム 1
サブボリューム 1：
サブボリューム 1
サブボリューム 1
サブボリューム 1：
サブボリューム 1
サブボリューム 1
サブボリューム 1：
サブボリューム 1：
サブボリューム 1
サブボリューム 1：
サブボリューム 1：
サブボリューム M
サブボリューム M：
サブボリューム M
サブボリューム M
サブボリューム M：
サブボリューム M
サブボリューム M
サブボリューム M：
サブボリューム M：
サブボリューム M
サブボリューム M：
サブボリューム M

要素 1 構成ノード 1
要素 1 構成ノード 2

要素単位

要素 1 構成ノード n
要素 2 構成ノード 1
要素 2 構成ノード 2
要素 2 構成ノード n
要素 3 構成ノード 1
要素 3 構成ノード 2

サブボリューム単位

要素 3 構成ノード n
要素 N 構成ノード 1
要素 N 構成ノード 2
要素 N 構成ノード n
要素 1 構成ノード 1
要素 1 構成ノード 2
要素 1 構成ノード n
要素 2 構成ノード 1
要素 2 構成ノード 2
要素 2 構成ノード n
要素 3 構成ノード 1
要素 3 構成ノード 2
要素 3 構成ノード n
要素 N 構成ノード 1
要素 N 構成ノード 2
要素 N 構成ノード n27

３.４.６.３ ノード座標ファイル仕様
サブボリューム 1
サブボリューム 1
サブボリューム 1
サブボリューム 1
サブボリューム 1
サブボリューム 1
サブボリューム 1
サブボリューム 1
サブボリューム 1：：
サブボリューム 1
サブボリューム 1
サブボリューム 1：：：
サブボリューム M
サブボリューム M
サブボリューム M
サブボリューム M
サブボリューム M
サブボリューム M
サブボリューム M
サブボリューム M
サブボリューム M：：
サブボリューム M
サブボリューム M
サブボリューム M

ノード 1
ノード 1
ノード 1
ノード 2
ノード 2
ノード 2
ノード 3
ノード 3
ノード 3

X 座標
Y 座標
Z 座標
X 座標
Y 座標
Z 座標
X 座標
Y 座標
Z 座標

ノード単位

サブボリューム単位

ノード m X 座標
ノード m Y 座標
ノード m Z 座標

ノード 1
ノード 1
ノード 1
ノード 2
ノード 2
ノード 2
ノード 3
ノード 3
ノード 3

X 座標
Y 座標
Z 座標
X 座標
Y 座標
Z 座標
X 座標
Y 座標
Z 座標

ノード m X 座標
ノード m Y 座標
ノード m Z 座標28

３.４.６.４ 成分ファイル仕様
サブボリューム 1
サブボリューム 1
サブボリューム 1：
サブボリューム 1
サブボリューム 1
サブボリューム 1
サブボリューム 1：
サブボリューム 1
サブボリューム 1
サブボリューム 1
サブボリューム 1：
サブボリューム 1：：：
サブボリューム M
サブボリューム M
サブボリューム M：
サブボリューム M
サブボリューム M
サブボリューム M
サブボリューム M：
サブボリューム M
サブボリューム M
サブボリューム M
サブボリューム M：
サブボリューム M

ノード 1 成分 1
ノード 2 成分 1
ノード 3 成分 1
ノード n
ノード 1
ノード 2
ノード 3

成分 1
成分 2
成分 2
成分 2

ノード n
ノード 1
ノード 2
ノード 3

成分 2
成分 m
成分 m
成分 m

成分単位

サブボリューム単位

ノード n 成分 m

ノード 1 成分 1
ノード 2 成分 1
ノード 3 成分 1
ノード n
ノード 1
ノード 2
ノード 3

成分 1
成分 2
成分 2
成分 2

ノード n
ノード 1
ノード 2
ノード 3

成分 2
成分 m
成分 m
成分 m

ノード n 成分 m29

３.５. パラメータファイル
パラメータファイルはアスキー形式のファイルである。フィルタ実行時の引数としてファイル名を指定することにより，そのファイルが入力パラメータとして解釈され，パラメータがセットされる。
表 6
パラメータ名
in_dir

フィルタ入力パラメータ一覧表

パラメータ内容
入力ファイルディレ

デフォルト値“.”

クトリ

備考
入力ファイルのディレクトリパス※１

field_file

fld ファイル名-

構造格子の場合のみ※2，3

in_prefix

入力ファイル接頭辞“input.”非構造格子の場合のみ

in_sufix

入力ファイル接尾辞“.dat”

非構造格子の場合のみ

out_dir

出力ファイルディレ“.”

出力ファイルのディレクトリパス

クトリ

※1

out_prefix

出力ファイル接頭辞“output.”

formatステップ数変換形式“%05d”

start_step

開始ステップ数1

end_step

終了ステップ数

1n_layer

八分木分割数00～7 までの整数

output_type

ファイル形式0

0:SPLIT 形式

非構造格子の場合のみ

1:サブボリューム集約
2:ステップ集約
上記以外出力なし
file_number

出力ファイル数00 以上の整数で，0 の場合はサブボ
リューム数となる
サブボリューム集約ファイルの場
合のみ有効

mpi_volume_div

サブボリューム分割

1

サブボリュームの分割数※4数
mpi_step_div

ステップ分割数

1

ステップの分割数※4

mpi_div

MPI 並列における分

2

0:ステップ分割数，サブボリューム

割軸

分割数により決定
1:サブボリューム分割軸を優先
2:ステップ分割軸を優先
mpi_volume_div と mpi_step_divが指定された場合は無効

multi_elem_type

非構造格子の混合要

0

素データフラグ

0:単一タイプの要素のみで構成
1:複数タイプの要素で構成

30

temp_delete

混合要素データ実行

1

時の一時ファイル削

0:一時ファイルを残す
1:一時ファイルを消す

除指示※1. ディレクトリ指定は，絶対・相対パスでの指定が可能であるが，~(チルダ)での指定は不可。
※2. nstep,ndim,dim1,dim2,dim3,veclen,coord [123],variable に関するパラメータのみ参照。
※3. field_file にファイル名が指定された場合，入力データは構造格子と判断される。指定されていな
い場合には非構造格子と判断される。入力データが構造格子の場合は，3 次元では 6 面体一次要素（非構造格子），2 次元では 4 角形一次要素（非構造格子）として出力される。
※4. mpi_volume_div と mpi_step_div が指定された場合，その積とプロセス数が一致しない場合はエラーとなる。

３.６. MPI 並列処理
MPI 並列処理における分割数の決定方法を説明する。以下では 50 ステップ×8 サブボリュームのデータ処理を考える。
（１） ステップ分割軸優先

プロセス数がステップ数以下の時は，全ステップをプロセス数で分割する。
例) 8 プロセスで起動する場合の各プロセスの担当領域は 6 ステップ×8 サブボリューム，
もしくは，7 ステップ×8 サブボリュームとなる。



プロセス数がステップ数より大きい時は，フィルタ処理を行うプロセス数は，ステップ数の整数倍のプロセス数とし，サブボリューム数側の分割も行う。
例) 128 プロセスで起動する場合，50×2=100 プロセス（余り 28 プロセス）の処理となり，各プロセスの担当領域は１ステップ×4 サブボリュームとなる。

（２） サブボリューム分割軸優先

プロセス数がサブボリューム数以下の時は，全サブボリュームをプロセス数で分割する。
例) 8 プロセスで起動する場合の各プロセスの担当領域は 50 ステップ×1 サブボリュームとなる。



プロセス数がサブボリューム数より大きい時は，フィルタ処理を行うプロセス数は，サブボ
リューム数の整数倍のプロセス数とし，ステップ数側の分割も行う。
例) 128 プロセスで起動する場合，8×16=128 プロセス（余り 0 プロセス）の処理となり，各プロセスの担当領域は 6 ステップ×1 サブボリューム，もしくは，7 ステップ×1 サ
ブボリュームとなる。

（３） ユーザ指定分割


パラメータファイルによる指定では，分割数の積とプロセス数が一致しない場合はエラーとする。

31

３.７. ステージング環境での実行方法
京コンピュータにおけるステージング環境での実行方法に関して記述する。パラメータファイルの指定とファイル転送の指定に関しては整合性を図り，フィルタプログラムを起動する必要がある。また，フィルタプログラムの出力形式によっては，複数プロセスから１つのファイルに出力を行う場合がある。そのような場合には出力先を複数プロセスからアクセス可能な共有ディレクトリを指定する必要がある。

３.７.１. 実行シェルとパラメータファイル#!/bin/bash -x##PJM --rsc-list "elapse=01:00:00"#PJM --rsc-list "node=64"#PJM --rsc-list "rscgrp=small"#PJM --stg-transfiles all#PJM --mpi "proc=64"#PJM --mpi "use-rankdir"#PJM --stgin"rank=* ./filter%r:./"…………①#PJM --stgin "rank=* ./param.txt%r:./"…………②#PJM --stgin "rank=0 /data/ucd/ucd*.dat

0:../"…………③#PJM --stgout "rank=* %r:../output*.dat

./"

…………④

#PJM --stgout "rank=* %r:./pbvr_filter.*./LOG/"…………⑤#PJM -S. /work/system/Env_base
export PARALLEL=8
export OMP_NUM_THREADS=8
mpiexec -n 64 lpgparm -p 4MB -s 4MB -d 4MB -h 4MB -t 4MB ./filter param.txt………⑥① 実行モジュールを各プロセスのランクディレクトリに転送② パラメータファイルを各プロセスのランクディレクトリに転送③ 入力データを共有ディレクトリに転送（パラメータファイル内で指定するファイル）④ 出力データを共有ディレクトリからローカルディレクトリに転送⑤ ログおよびエラーファイルをランクディレクトリからローカルディレクトリに転送⑥ 各プロセスのランクディレクトリ内のパラメータファイルを引数として各プロセスのランクディ
レクトリ内の実行モジュールを起動。

32

#
in_dir=../…………⑦

field_file=pd3d.fld
out_prefix=case0
out_dir=./…………⑧

file_type=0…………⑨n_layer=3
start_step=0
end_step=511⑦ 入力データのパスを指定（ステージング環境では相対パスによる指定，上記例では，共有ディレク
トリから入力データを読み込む）⑧ 出力データのパスを指定（ステージング環境では相対パスによる指定。上記例では，各プロセス内のランクディレクトリへ出力）⑨ ファイル出力形式の指定（上記例では，SPLIT 形式）

３.７.２. 入出力ファイルとディレクトリ
ステージング環境におけるフィルタプログラムの入出力ファイルとディレクトリの関係を以下に示す。入出力先を共有ディレクトリに指定した場合は問題ない（ログ＆エラーファイルを除く）。出力デー
タに関しては，SPLIT 形式のみランクディレクトリに出力可能である。他のファイル形式ではデータ集約処理のため共有ディレクトリの使用が必要となる。

表 7
IO
入
力

出
力

京における入出力ファイルとディレクトリの対応表
種別

ランクディレクトリ

パラメータファイル
入力データ
出力データ

共有ディレクトリ

○

※1

○

○

※2

○

SPLIT 形式○○

ステップ集約形式

×○サブボリューム集約形式

×○

ログ＆エラーファイル○※3※1. パラメータファイルはランク 0 のみが入力※2. 全プロセスのランクディレクトリに全入力ファイルの転送が可能な場合。
※3. 出力先はランクディレクトリに固定

33×３.８. 要素タイプの混合した非構造格子の実行
複数要素タイプを含んだ非構造格子のボリュームデータの場合，フィルタプログラムでは，まず単一要素タイプ毎に分割した UCD バイナリデータを生成し，その後，その単一要素タイプの UCD バイ
ナリデータをフィルタプログラムでサブボリューム分割をし，PBVR サーバの入力となるファイル出力を行う。
次に示すようにパラメータファイル内のパラメータ名「multi_element_type」に 1 を設定することにより，フィルタプログラムは要素タイプ毎に分割したサブボリューム分割ファイルの出力を行う。
#
in_dir=.
in_prefix=MULTI
in_suffix=.dat
out_dir=.
out_prefix=div
out_prefix=.dat
format=%03
start_step=1
end_step=20
multi_element_type=1

要素タイプ毎に出力されるファイルは，ファイル名の先頭に要素タイプの 2 桁のコードが付加されたファイル名となる。以下に要素名と要素タイプコードの一覧を示す。

34

表 8

要素タイプ一覧表

要素名

要素タイプコード

3 角形

2

4 角形

3

4 面体

4

ピラミッド

5

プリズム

6

6 面体

7

3 角形二次94 角形二次104 面体 2 次

11

6 面体 2 次

14

上記パラメータファイルで，4 面体一次要素と 4 面体二次要素から構成されるボリュームデータの場合には以下のような出力ファイル名となる。

表 9

ファイル分割でのファイル名

オリジナル混合データ

4 面体一次データ

4 面体二次データ

MULTI001.dat

04-div001_～

11-div001_～

MULTI002.dat

04-div002_～

11-div002_～

MULTI003.dat⇒

04-div003_～

11-div003_～

MULTI004.dat

分割

04-div004_～

11-div004_～

04-div005_～

11-div005_～

MULTI005.dat：
MULTI020.dat：
04-div020_～

35：
11-div020_～

４ サーバ４.１. 概要
サーバは，フィルタの出力データであるサブボリュームファイルを入力して PBVR 法による並列可視化を行い，可視化結果として粒子データを出力する。

４.２. 起動方法
PBVR はスーパーコンピュータ上で粒子データのみをバッチ処理で生成するバッチモード，および，
ソケット通信可能なサーバとクライアントを接続して対話処理により粒子データを生成するクライア
ント・サーバモード（クラサバモード）による処理が可能である。PC やワークステーション上のスタ
ンドアロン処理はクラサバモードでクライアントプログラムとサーバプログラムを同一マシン上で起動することにより実現する。サーバの起動方法を以下に示す。
（MPI+OpenMP での起動方法，N にプロセス並列数を入力する）$ mpiexec -n N ./CPUServer（OpenMP のみでの起動方法）$./CPUServer※1. MPI+OpenMP 版サーバはマスター・スレーブ型で動作するので，並列数 N はスレーブの並列数+１で指定。
※2. どちらの方法の場合も OpenMP スレッド数は環境変数 OMP_NUM_THREADS で指定。
※3. Window の場合は，VS2013 x64 Native Tools コマンドプロンプトを起動してコマンドを
実行。

表 10

サーバのコマンドラインオプション一覧

オプション

適用先

指定値

デフォルト

機能

-h

SB

-

-

オプションおよび指定可能パラメー
タの一覧を表示

-B

B

-

-

バッチモードを指定する

-pa

B

ファイル名

-

可視化パラメータファイルを指定す
る

-sl

B

1～99

1

サブピクセルレベル※2

36

-S

B

u, m

粒 子 サ ン プ リ ン グ 方 法 （ u:uniformusampling, m:metropolis sampling）-plimitB

1～9999910

粒子数制限値（M 個粒子）※2

-vin

B

ファイル名

-

入力ボリュームデータ名※2

-pout

B

ファイル名

./

出力粒子データファイル名※３

-p

S

ポート番号

60000

ソケット通信ポート番号-viewerB

100 ～ 9999

620×620

ビューワ解像度

×

100

～

9999
※1. 適用先欄の凡例は，S：クラサバモード，B：バッチモードである。
※2. このオプションは、-pa で指定するパラメータファイル内のオプションよりも優先される。
※3. 指定されたファイル名をプレフィックスとして“ファイル名_時刻番号_サブボリューム数_サブボリューム番号.kvsml”という形式の粒子ファイル群を生成する。省略した場合プレフィックスとして“server”が入力される。

４.２.１. バッチモードでの起動
サーバ起動時のコマンドラインオプションとして –B を指定すると，バッチモードで起動する。バッ
チモードでの起動例（MPI+OpenMP 版）を以下に示す。
$ mpiexec –n 5 ./CPUServer –B -vin ./data/case.pfi -pout ./output/case –pa ./param.in
上記の例では，入力データ./data/case.pfi を可視化パラメータファイル./param.in に記述されたパラメータによって処理を行い，以下の粒子データを出力する。
./output/case_時刻番号_サブボリューム数_サブボリューム番号.kvsml
バッチモードのサーバ起動時のコマンドラインオプション –pa で指定する可視化パラメータファ
イルはクラサバモードの対話処理によって生成する。このファイルをそのまま利用，あるいは，パラメータを編集し，バッチ処理で大量データの処理を行う。

４.２.２. クライアント・サーバモードでの起動
サーバ起動時のコマンドラインオプションとして –B を指定しなかった場合は，クライアント・
サーバモードで起動する。以下に起動例を示す。
$ mpiexec -n 5 ./CPUServer
first reading time[ms]:0
Server initialize done

37Server bind done
Server listen done
Waiting for connection ...
上記のようにクライアントとのソケット通信の接続待ちになったら，別の端末からクライアントを起動する。なお，入力ボリュームデータ名はクライアント側で指定する。
サーバ起動時のポート番号の省略値は 60000 である。ポート番号は，以下のように起動時のコマンドラインオプション–p で変更できる。
$mpiexec -n 5 ./CPUServer -p 55555

４.２.３. ソケット通信によるクライアント・サーバの接続
４.２.３.１ ローカル接続
以下では 1 台のマシン（machineA）でクライアントプログラムとサーバプログラムを起動する例を示す。この例ではクライアントプログラムとサーバプログラムの両方が machineA におけるデフォ
ルトのポート番号 60000 を用いて連携する。
手順 1[サーバ起動]
machineA> mpiexec –n 5 ./CPUServer
手順 2[クライアント起動]
machineA> ./PBVRViewer –vin filename

４.２.３.２ 2 点間リモート接続
以下では遠隔地の 2 台のマシンでクライアントプログラム（machineA）とサーバプログラム（machineB）を起動する例を示す。この例では ssh ポートフォワードを用いて machineA の 60000
番ポートを machineB の 60000 番ポートに接続し，各マシンでクライアントプログラムとサーバプ
ログラムを起動することによってデフォルトのポート番号 60000 を用いて連携する。
基本的には ssh
ポートフォワードが確立した後の起動方法はスタンドアロンと同じである。ssh ポートフォワードについては Windows の場合は TeraTerm，putty 等を用いて設定する。
手順 1[ssh ポートフォワード A→B]
machineA> ssh -L 60000:localhost:60000 username@machineB（machineA の 60000 番ポートを machineB の 60000 番ポートにフォワード）手順 2[サーバ起動]
machineB> mpiexec –n 5 ./CPUServer
手順 3[クライアント起動]
machineA> ./PBVRViewer –vin filename38

４.２.３.３ 複数マシン経由のリモート接続
以下では遠隔地の 2 台のマシンでクライアントプログラム（machineA）とサーバプログラム（machineB）を起動するが，セキュリティ上の理由等により machineC を経由して接続する例を示す。この場合も 2 点間の場合と同様に ssh ポートフォワードが確立した後の起動方法はスタンドアロ
ンと同じである。
手順 1[ssh ポートフォワード A→C]
machineA> ssh -L 60000:localhost:60000 username@machineC（machineA の 60000 番ポートを machineC の 60000 番ポートにフォワード）手順 2[ssh ポートフォワード C→B]
machineC> ssh -L 60000:localhost:60000 username@machineB（machineC の 60000 番ポートを machineB の 60000 番ポートにフォワード）手順 3[サーバ起動]
machineB> mpiexec –n 5 ./CPUServer
手順 4[クライアント起動]
machineA> ./PBVRViewer –vin filename

４.２.３.４ ssh ポートフォワーディングの接続確認方法
ssh ポートフォワーディングによる接続ができているかどうかを確認するにあたり，クライアント
側からタイプインした文字列をサーバ側へエコー出力するだけの単純なソケット通信の動作確認用プ
ログラム（サーバ側プログラム名：server クライアント側プログラム名：client）を利用すると便利である。このプログラムは以下から入手できる。
「C for Linux 2」小俣光之著 (株)秀和システム 2005 年 9 月

サポートページ

http://www.ncad.co.jp/~komata/c4linux2/
サーバ側起動方法./server ポート番号
クライアント側起動方法./client サーバホスト名 ポート番号

４.２.３.５ 京プリポストサーバとの接続例
以下では応用例として研究室の PC（machineA）を「京」のログインノード（klogin）を経由してプリポストサーバ（pps3）に接続する例を示す。
手順 1[ssh ポートフォワード A→klogin]machineA> ssh -L 60000:localhost:60000 username@k.aics.riken.jp39

（machineA の 60000 番ポートを K ログインノードの 60000 番ポートにフォワード）手順 2[ssh ポートフォワード K ログインノード→プリポストサーバ]
klogin> ssh -L 60000:localhost:60000 username@pps3（klogin の 60000 番ポートを pps3 の 60000 番ポートにフォワード）手順 3[サーバ起動]
pps3> mpiexec –n 5 ./CPUServer
手順 4[クライアント起動]
machineA> ./PBVRViewer –vin filename

４.２.３.６ BX900 との接続例
日本原子力研究開発機構の構成員が機構内 PC を機構内イントラネット経由で BX900 にポートフォワードしサーバとして利用するためには、機構情報管理室（ccse-tokai-unyou@ml.jaea.go.jp）に連絡し、使用するマシンの IP アドレス及び可視化ノード(bxviz11)の利用を申請しておく必要がある。申請後、以下の手順で接続する。
手順１[BX900 への ssh ログイン]
machineA> ssh username@bxviz11.tokai-sc.jaea.go.jp
手順２[BX900 の会話ジョブとして qsub するシェルスクリプトを作成]
シェルスクリプト ‘run.sh’の例を以下に示す。
#!/bin/sh#@$-q t32#@$-C JOB#@$-lP 32#@$-lp 1#@$-cp 30:00#@$-oi#@$-eo#@$-o output
cd ${QSUB_WORKDIR}
NPROC=32
NTHREAD=1
PARALLE=${NTHREAD}
OMP_NUM_THREADS=${NTHREAD}
export PARALLEL
export OMP_NUM_THREADS
cd ${QSUB_WORKDIR}
40

hostnamempiexec -n ${NPROC} ./CPUServer.bx_mpi_omp -p 61000
手順３[BX900 でシェルスクリプトを会話ジョブとして qsub 投入する]
BX900> qsub –I run.sh（以下では qsub したジョブ内の hostname の実行結果が例えば bx2049 と表示されたとする）
手順４[クライアント側の端末で ssh ポートフォワードをかける]
machineA> ssh -p 61022 -L 61000:bx2049:61000 username@bxviz11.tokai-sc.jaea.go.jp
手順５［クライアントを起動する］
machineA> ./PBVRViewer_linux -p 61000 –vin pfi_filename

４.２.３.７ Windows 環境ローカル接続
以下では 1 台の Windows マシンででクライアントとサーバを起動する例を示す。ターミナルはVisualStudio2013 付属の VS2013 x64 Cross Tools コマンドプロンプトを使用するものとする。
手順 1[サーバ起動]
Windows> CPUServer.exe
手順 2[クライアントの Windows マシン用設定]
Windows> set TIMER_EVENT_INTERVAL=1000
手順 3[クライアント起動]
Windows> PBVRViewer.exe –vin pfi_filename
あるいは以下の内容のバッチファイルを作成し実行する。
set TIMER_EVENT_INTERVAL=1000
start PBVR_Server_win.exe
PBVRViewer.exe –vin pfi_filename

４.２.３.８ Windows クライアントのリモート接続
Windows マシンと遠隔サーバを接続するには，TeraTerm や Putty といった SSH クライアント
ソフトを利用してポートフォワーディングを行う。以下に Tera Term を用いたポートフォワードの方法を示す。
（１） まず Tera Term を起動する。
“新しい接続”ウインドウが立ち上がるが，“キャンセル”を
選択する。

41

（２） メニューバーから設定→SSH 転送 を選択する。
“SSH ポート転送”ウィンドウが立ち上がる。
“追加”を選択する。

（３） “ポート転送を行う向きの選択”で“ローカルのポート”を選択し，そこにクライアント側
で使用するポート番号を入力する。
“リモート側ホスト”にサーバ側のドメイン名あるいは IP ア
ドレスを入力する。
“ポート”にサーバ側で使用するポート番号を入力する。
“OK”を選択する。
これでポートフォワードの設定は完了となる。

42

（４） 次にポートフォワードされたサーバと接続する。メニューバーからファイル→新しい接続を選択する。“新しい接続”ウインドウが立ち上がるのでサーバ側のホスト名を入力し“OK”を選択する。“SSH 認証”ウインドウが立ち上がるので，ユーザ名とパスフレーズ，あるいは
秘密鍵のディレクトリを指定し“OK”を選択する。これでサーバに接続されたターミナルが起動する。

以下にポートフォワード後のクライアント・サーバ起動の手順の例を示す。クライアント側のター
ミナルは VisualStudio2013 付属の VS2013 x64 Cross Tools コマンドプロンプトを使用するものとする。
手順 1[サーバ起動]
Server> mpiexec –n 4 ./CPUServer –p server_port_number
手順 2[クライアントの Windows マシン用設定]
43

Windows> set TIMER_EVENT_INTERVAL=1000
手順 3[クライアント起動]
Windows> PBVRViewer.exe –vin server_pfi_filename –p client_port_number
Windows 側は以下の内容を記述したバッチファイルを作成し実行してもよい。
set TIMER_EVENT_INTERVAL=1000
PBVRViewer.exe –vin server_pfi_filename –p client_port_number

44

５ クライアント
５.１. 概要
クライアントは，クライアント・サーバモード（以降，クラサバモードと表記）またはスタンドア
ロンモードで動作する。
クラサバモードでは，サーバの可視化結果として送信される粒子データを受信し，OpenGL を用いて描画する。また，サーバがボリュームレンダリングを行う際の可視化パラメータ（サブピクセルレ
ベル，伝達関数等）を入力し，サーバへ送信する。クライアントとサーバ間のデータの送受信は，任意のポート番号によるソケット通信で行う。
スタンドアロンモードでは，サーバがバッチモードで出力した粒子データファイルを読み込んで表示する。

５.２. 起動方法
クラサバモードおよびスタンドアロンモードでの起動例を以下に示す。正常に起動すると，ビューワ，メインパネル，伝達関数エディタ，タイムステップ制御，キャプチャの 5 つのパネルが開く。
（クラサバモードでの起動方法）※1$ ./PBVRViewer -vin [サブボリュームファイル名※2] [コマンドラインオプション]（スタンドアロンモードでの起動方法）$ ./PBVRViewer [粒子データファイル名※3] [コマンドラインオプション※4]※1. クラサバモードはサーバを起動した状態で実行すること。
※2. サブボリュームファイル名は.pfi ファイルを絶対パス，もしくは，相対パスで指定。
※3. 粒子データはディレクトリを作成して格納すること。作業ディレクトリ直下に格納された粒子データの参照はエラーとなるので注意。
※4. スタンドアロンモードの際にはサブピクセルレベル（-sl）を指定しないと粒子サイズが正しく描画されないので注意。
表 11

クライアントのコマンドラインオプション一覧

オプション

適用先

指定値

デフォルト

機能

-h

C, S

-

-

オプションおよび指定可能パラメー
タの一覧を表示

-sl

C

1～99

1

45

サブピクセルレベル

-S

C

u, m

u

粒子サンプリング方法（u: uniform sampling,
m:metropolis sampling）-tdataC

all, div

all

粒子データ転送方式（all:ステップ一括転送,
div:サブボリューム分割転送）

-pa

C, S

ファイル名

-

パラメータファイルを指定する

-vin

C

ファイル名

-

入力ボリュームデータ pfi ファイル

-tf ※2

C

ファイル名

-

伝達関数

-p

C

ポート番号

60000

ソケット通信ポート番号-viewer

C, S

100 ～ 9999 ×

620×620

ビューワ解像度

100～9999-shading

C, S{L/P/B},ka,kd,ks,n-

シェーディング方法 ※３-pout ※４

C, S

ディレクトリ名./pout粒子データ出力先ディレクトリ名※1. 適用先欄の凡例は，C：クラサバモード，S：スタンドアロンモードである。

※2. 伝達関数ファイルは伝達関数エディタの Export File ボタンで出力される。起動後に伝達関数エディタの Apply ボタンを押すことで伝達関数が反映される。伝達関数エディタのImport File ボタンでも同様の伝達関数ファイルを読み込むことができる。
※3. シェーディング方法の指定は以下の通り。
L:ランバートシェーディング
効果：拡散反射を考慮したシェーディングを与える。
使用パラメータ：ka（物体の明るさに掛かる係数。0〜１の実数），kd（法線方向と光線方向から計算される拡散反射成分に掛かる係数。０〜１の実数）
P：フォンシェーディング
効果：ランバートシェーディングにハイライト効果を追加したもの。
使用パラメータ：ka,kd,ks（視線方向，法線方向，光線方向から計算される鏡面反射成分に掛かる係数。０〜１の実数），n（ハイライトの強さ。０〜１００の実数）
B：ブリン−フォンシェーディング
効果：フォンシェーディングの簡略化モデル
使用パラメータ：ka,kd,ks,n※4. 指定されたファイル名をプレフィックスとして“ファイル名_時刻番号_サブボリューム数_サブボリューム番号.kvsml”という形式の粒子ファイル群を生成する。省略した場合プレフィックスとして“client”が入力される。

46

５.３. 終了方法
５.３.１. 通常終了
クライアントは時系列データの先頭時刻から描画を開始し，最終時刻の描画後は再度先頭時刻の描画に戻るというループ動作をする。このためクライアントの終了はクライアントプログラムを起動したコンソールにおいて Ctrl+c キーを押して行う。
クラサバモードでの動作中に Ctrl+c キーを押すと，クライアントとサーバの時刻更新のタイミング
で同期してサーバも終了する。ただし，タイムステップ制御パネルの Stop ボタンでクラサバ通信を中断させた状態だと Ctrl+c キーの入力は無視される。

５.３.２. 強制終了
サーバを Ctrl+c キーで終了させてしまうと，クライアントを Ctrl+c キーで終了させることができな
くなる。また，クライアントを Ctrl+c キーで終了させても，サーバでの粒子生成が長時間に及ぶ等で時刻更新がなされない場合は，クライアントもサーバも応答しない状態に陥ることがある。このような場合は以下に示すように，ps コマンドでクライアントとサーバのプロセス番号を取得し，kill コマ
ンドで強制終了させる。
【クライアントプロセスの強制終了】$ ps -C PBVRViewer
PID TTY
19582 pts/6

TIME CMD
00:00:00 PBVRViewer$ kill -9 19582【サーバプロセスの強制終了】$ ps -C CPUServer
PID TTY
19539 pts/5

TIME CMD
00:00:00 CPUServer$ kill -9 19539

47

５.４. 操作説明
５.４.１. ビューワ
図 6 に示すビューワには，粒子データの描画結果が表示される。

図 6

ビューワ

【操作方法】
回転：左クリックでマウス移動
移動：右クリックでマウス移動
拡大・縮小：マウスホイール，もしくは，Ctrl+マウスの上下操作【表示内容】
time step：表示しているデータのタイムステップ
fps：フレームレート（frame/sec）48

５.４.２. メインパネル
クラアイントのメインパネルを図 7 に示す。パネル内の各項目について以下に説明する。

図 7

メインパネル・SUB PIXEL LEVEL
画像精細度を制御するサブピクセルレベル値 Ls を指定する。
・PARTICLE LIMIT
伝達関数誤指定等による粒子数の爆発を避けるため，サーバ側で生成する粒子数の上限値を
M 個単位で指定する。
・EYE POINT
カメラの視点位置を指定する。
・CENTER POINT
カメラが見込む位置を指定する。
・UP VECTOR
カメラの上方向ベクトルを指定する

49

・RESOLUTION
ビューワの解像度を指定する。
・SENDING
データ送信中であることを示す。
・RECIEVING
データ受信中であることを示す。
・CPU MEMORY
システムメモリの使用状況（単位：MB）を表示する。
・GPU MEMORYGPU レンダリング GPU メモリの使用状況（単位：MB）を表示する。
・PBVR Filter information
サーバ上のボリュームデータに関する情報（フィルタ情報ファイルの内容）を表示する。
・CROP ボタン（現バージョンでは Linux/Windows のみ対応）
特徴領域抽出パネルを表示する。特徴領域抽出パネルの詳細については後述。
・FILE ボタン
File パネルを表示する。File パネルの詳細については後述。
・Set parameter ボタン
クライアントのパネルで指定したパラメータをサーバへ送信する。

50

５.４.２.１ FILE パネル
可視化パラメータファイルの読み込みと保存に関する操作を行うパネルで、メインパネルの FILE
ボタンを押すと現れる。パネル内の各項目について以下に説明する。

図 8

FILE パネル・VIZ PARAMETER FILE
可視化パラメータファイルのパスを指定する。
・Browse ボタン
ファイルダイアログを表示して、可視化パラメータファイルのパスを指定する。
・Export FILE ボタン
可視化パラメータファイルを保存する。
なお Mac 版クライアントでは、CROP に関するパラメタは保存されない。
・Import FILE ボタン
可視化パラメータファイルを読み込む。
・Close ボタン
本パネルを閉じる。

51

５.４.２.２ 特徴領域抽出パネル
形状指定した特徴領域の内側に含まれる要素のみを抽出して描画する操作に関するパネルで，メイ
ンパネルの CROP ボタンを押すと現れる。特徴領域の形状は，直方体，球，円筒のいずれかで指定する。なお特徴領域抽出パネルは現バージョンの Mac 版クライアントでは利用できない。

図 9

特徴領域抽出パネル

Select Object：特徴領域の形状を指定する
CROP：直方体領域
SPHERE：球PILLAR-XY base：XY 平面を底面とする円筒PILLAR-YZ base：YZ 平面を底面とする円筒PILLAR-XZ base：XZ 平面を底面とする円筒
CROP：直方体の範囲を指定する
52

SPHERE：球の中心と半径を指定する
PILLER：円筒の半径，高さ，底面の中心座標値を指定する
RESET：本パネルの内容を初期化する
APPLY：領域抽出を実行する
CLOSE：本パネルを閉じる
本パネルを表示すると，以下に示すように，特徴領域の形状がビューワ内に重ね書きされる。

図 10 Crop 機能適用時のビューワパネル

53

５.４.３. 伝達関数エディタ
伝達関数エディタでは，ボリュームレンダリングにおいてスカラーデータと色および不透明度の対応を定義する伝達関数を作成する。通常のボリュームレンダリングでは伝達関数は一つの物理量のみによって定義されるが，PBVR では（１） 色と不透明度に独立な変量を割り当てる。
（２） 各変量を座標 X,Y,Z，変量 q1,q2,q3…の任意の関数式で定義。
（３） １次元伝達関数 t1〜t5 をさらに任意の関数式で合成し，多次元伝達関数を定義。
という，新たな伝達関数設計を可能としたことで，極めて自由度の高い可視化処理を実現した。図 11に伝達関数エディタパネルを示す。パネル内の各項目について以下に説明する。

図 11

伝達関数エディタメインパネル

・Transfer Fuction RESOLUTION 欄
伝達関数の解像度を指定する。
・Transfer Fuction SYNTHESIZER 欄
t1～t5 の名称で作成した伝達関数同士の合成式を指定する。※1

54

・Transfer Fuction name プルダウンメニュー
作成対象の伝達関数の名称を指定する。選択肢は t1～t5。
・Reset ボタン
本パネルを初期状態にリセットする。
・Apply ボタン
本パネルで作成した伝達関数をサーバへ送信する。
・File 欄
伝達関数ファイルを保存，読み込みする際のファイルパスを指定する。
・Browse ボタン
ファイルダイアログを表示して，File 欄へ入力するパスを指定する。
・Export File ボタン
本パネルで作成した伝達関数を，-pa オプションで指定するパラメータファイルと同じ書式で，ファイルへ保存する。
・Inport File ボタン
ファイルに保存されている伝達関数を読み込んで本パネルへ反映する。

５.４.３.１ カラーマップ指定機能【Transfer Fuction Color Map カテゴリ】
Transfer Fuction name で選択した伝達関数名に対応する変量と色の伝達関数を作成する。
・Color 欄
本エディタで作成した，変量と色の伝達関数のカラーバーが表示される。
・Variable 欄
選択した伝達関数名に対応する（合成）変量の定義式を指定する。定義式で使用できる変量の名称は以下。
物理量：q1, q2, q3,・・・qn
座標値：X, Y, Z
・Range Min 欄
選択した伝達関数名に対する変量の最小値を指定する。
・Range Max 欄
選択した伝達関数名に対する変量の最大値を指定する。
・Server side range min 欄
Variable 欄で指定した（合成）変量について，サーバ側で取得した最小値を表示する。
・Server side range max 欄
Variable 欄で指定した（合成）変量について，サーバ側で取得した最大値を表示する。
・Color Map Editor (freedom curve)ボタン
選択した伝達関数名に対応する変量と色の伝達関数をマウスによる自由曲線入力で作成する
パネルを出す。

55

図 12 Color Map Editor (freedom curve)パネル
・Color palette
横軸が彩度，縦軸が明度で，マウスの位置によりこれらを指定する。
・RGB 指定バー
色相をマウスの位置により指定する。Color palette と併せて作成した色が右上に表示される。
・Color
カラーバーを左クリックでなぞることによって，Color palette と RGB 指定バーで作成した色でバーを上塗りする。ここで，既存の色との合成比率はバーの縦軸方向のマウス位置によって決定される。例えば，カラーバー上辺を左右になぞれば，なぞった範囲を指定色のみで塗りつぶし，カラーバー上下中央位置を左右になぞれば，なぞった範囲を既存色と 50％の割合で合成する。
・Reset ボタン
本パネルを初期状態に戻す。
・Undo ボタン
１マウスアクションを取り消す。
・Redo ボタン
取り消したマウスアクションを再実行する。
・Save ボタン
本パネルで作成した伝達関数を保持する。
・Cancel ボタン
本パネルを閉じる。
56

・Color Map Editor (expression)ボタン
選択した伝達関数名に対応する変量と色の伝達関数を数式記述で作成するパネルを出す。

図 13 Color Map Editor (expression)パネル
・Color
本パネルで作成した伝達関数のカラーバーが表示される。
・R 欄
色の R 成分の伝達関数式を記述する。
・G 欄
色の G 成分の伝達関数式を記述する。
・B 欄
色の B 成分の伝達関数式を記述する。
・Save ボタン
本パネルで作成した伝達関数を保持する。
・Cancel ボタン
本パネルを閉じる。
・Color Map Editor (control points)ボタン
選択した伝達関数名に対応する変量と色の伝達関数を制御点指定で作成するパネルを出す。

57

図 14 Color Map Editor (control points)パネル
・Color
本パネルで作成した伝達関数のカラーバーが表示される。
・Control Point
制御点（最大 10 個）の値を CP1)欄～CP10)欄に指定する。
・Red
制御点の値に対応する色の R 成分値を指定する。
・Green
制御点の値に対応する色の G 成分値を指定する
・Blue
制御点の値に対応する色の B 成分値を指定する
・Save ボタン
本パネルで作成した伝達関数を保持する。
・Cancel ボタン
本パネルを閉じる。
・Color Map Editor (select colormap)ボタン
選択した伝達関数名に対応する変量と色の伝達関数をあらかじめ用意されているカラーバー
から選択して作成するパネルを出す。

58

図 15 Color Map Editor (select colormap)パネル
・Color
本パネルで作成した伝達関数のカラーバーが表示される。
・Default Color プルダウンメニュー
伝達関数として設定するカラーバーを選択する。選択肢は以下。
RainBow
Blue-white-red
Black-red-yellow-white
Black-blue-violet--yellow-white
Black- yellow-whiteBlue-green-red
Green-red-violet
Green- blue--white
HSV model
Gray-scale
・Save ボタン
本パネルで作成した伝達関数を保持する。
・Cancel ボタン
本パネルを閉じる。

５.４.３.２ 不透明度指定機能【Transfer Fuction Opacity Map カテゴリ】
Transfer Fuction name で選択した伝達関数名に対応する変量と不透明度の伝達関数を作成する。
・Opacity 欄
本エディタで作成した，変量と不透明度の伝達関数曲線を表示する。
・Variable 欄
選択した伝達関数名に対応する（合成）変量の定義式を指定する。定義式で使用できる変量の名称は以下。
物理量：q1, q2, q3,・・・qn
59座標値：X, Y, Z
・Range Min 欄
選択した伝達関数名に対する変量の最小値を指定する。
・Range Max 欄
選択した伝達関数名に対する変量の最大値を指定する。
・Server side range min 欄
Variable 欄で指定した（合成）変量について，サーバ側で取得した最小値を表示する。
・Server side range max 欄
Variable 欄で指定した（合成）変量について，サーバ側で取得した最大値を表示する。
・Color Map Editor (freedom curve)ボタン
選択した伝達関数名に対応する変量と不透明度の伝達関数をマウス操作による自由曲線入力で作成するパネルを出す。

図 16 Opacity Map Editor (freeform curve)パネル
・Opacity
不透明度の伝達関数をマウス操作で作成する。左ドラッグで自由曲線を描く。右クリックで2 点間の線形補間直線を描く。
・Reset ボタン
本パネルを初期状態に戻す。
・Undo ボタン
１マウスアクションを取り消す。
・Redo ボタン
取り消したマウスアクションを再実行する。
・Save ボタン
本パネルで作成した伝達関数を保持する。
・Cancel ボタン
本パネルを閉じる。
・Color Map Editor (expression)ボタン

60

選択した伝達関数名に対応する変量と不透明度の伝達関数を数式記述で作成するパネルを出す。

図 17 Opacity Map Editor (expression)パネル
・Opacity
O 欄で入力した数式に基づき，不透明度の伝達関数を指定する曲線が描かれる。
・O 欄
不透明度の伝達関数を指定する曲線の数式を記述する。
・Save ボタン
本パネルで作成した伝達関数を保持する。
・Cancel ボタン
本パネルを閉じる。

61

・Color Map Editor (control point)ボタン
選択した伝達関数名に対応する変量と不透明度の伝達関数を制御点指定で作成するパネルを出す。

図 18 Opacity Map Editor (control points)パネル
・Opacity（上段）
本パネルで作成した不透明度の伝達関数を指定する折れ線が描かれる。
・Control Point
制御点（最大 10 個）の値を CP1)欄～CP10)欄に指定する。
・Opacity（中段右側）
制御点の値に対応する不透明度を指定する。
・Save ボタン
本パネルで作成した伝達関数を保持する。
・Cancel ボタン
本パネルを閉じる。

62

５.４.３.３ 関数エディタ
伝達関数エディタにおける伝達関数合成，変量合成，カラーマップ曲線，不透明度曲線の入力に使用される関数エディタで使用できる組み込み関数は以下の通り。

表 12関数エディタで利用可能な演算

演算

書式

+

+

-

-

×

*

/

/

Sin

sin(x)Cos

cos(x)Tan

tan(x)Log

log(x)Exp

exp(x)

平方根

sqrt(x)

冪乗

x^y

63

５.４.４. タイムステップ制御パネル
タイムステップ制御パネルを図 19 に示す。各ウィジットの動作は以下のとおり。

図 19

タイムステップ制御パネル

・Progress
タイムステップの進捗状況をパーセント表示する。
・Time step
レンダリングを行うタイムステップを指定する。
・Min Time
最小タイムステップを指定する。
・Max Time
最大タイムステップを指定する。
・Start/Stop
サーバ/クライアント間の通信を開始または停止する。

64

５.４.５. 画像ファイル作成
ビューワに表示した画像を時刻毎の連番画像ファイルとして保存する。画像ファイルの形式は BMPである。保存した一連の画像ファイルは，ImageMagic の convert や ffmpeg 等の外部コマンドを用いて，mpeg 等の動画ファイルとして圧縮できる。

図 20

画像出力パネル【操作方法】
mode：image 以外選択不可
capture：クライアント動作中に on にすると，時刻の更新毎にビューワの表示内容が連番画像として保存される。off にすると画像の保存を停止する。
image file：連番画像ファイル名のベース名の部分を指定する。
連番画像ファイルは，クライアントを実行したディレクトリの直下に，以下のような名前で保存される。
PBVR_image.00001.bmp
PBVR_image.00002.bmp

65

５.４.６. サブボリューム毎の粒子データを統合して保存
クライアント起動時のコマンドライン引数 –pout を指定することにより、サーバ側で生成されたサブボリューム毎の粒子データを統合して、クライアント側のローカルファイルに保存できる。
-pout の指定例を以下に示す。
$ ./PBVRViewer -vin ~/case_kvsml/case -pout ./output/case
このとき、./output/ディレクトリに、以下の形式の粒子データファイルが保存される。

case_時刻番号_0000001_0000001.kvsml
例えば元のサブボリュームが領域 8 分割で 2 時刻だったとして、このオプションにより出力される粒子データファイルは 1 分割 2 時刻に統合される。

66

６ サンプルデータを用いた可視化事例
サンプルデータ gt5d.tgz を用いた可視化処理によって PBVR の機能を説明する。

６.１. フィルタ処理
gt5d.tgz を展開すると./gt5d 以下に下記のファイルが生成される。
gt5d.fld

AVS フィールドファイル

co3d.dat

座標データ

pd3d.dat

変量１

psid.dat

変量２

param.txt

フィルタプログラム入力パラメータ

demo1.tf

デモ用伝達関数ファイル 1

demo2.tf

デモ用伝達関数ファイル 2

フィルタプログラムを実行する。
（OpenMP 版）$./filter ./gt5d/param.txt
param.txt の内容は以下の通り。
#
in_dir=./field_file=gt5d.fld
out_dir=./
out_prefix=casestart_step=0
end_step=4
上記の例ではデフォルトの SPLIT ファイル形式，領域分割数１とし，入力と出力に同じディレクト
リを指定している。この処理によって指定ディレクトリに以下のファイルが生成される。
case.pfi

pfi ファイル

case_YYYYYYY_ZZZZZZZ_connect.dat

要素構成ファイル

case_YYYYYYY_ZZZZZZZ_coord.dat

ノード座標ファイル

case_XXXXX_YYYYYYY_ZZZZZZZ.kvsml

kvsml ファイル

case_XXXXX_YYYYYYY_ZZZZZZZ_value.dat

成分ファイル67

６.２. プログラム起動[手順１] サーバプログラムを実行する（OpenMP 版）。
$./CPUServer
first reading time[ms]:0
Server initialize done
Server bind done
Server listen done
Waiting for connection ...
[手順２]

クライアントプログラムを実行する。この起動例ではメトロポリスサンプリングを使用

し，サブピクセルレベル 4，粒子数制限値を 100M 粒子としている。
$./PBVRViewer -S m -vin ./gt5d/case.pfi -plimit 100 -rl 2 -sl 4

図 21

PBVR 起動直後の状態

68

６.３. 伝達関数の設計
以下では 2 変数の構造格子ボリュームデータである gt5d.fld に対して PBVR の高度な伝達関数設計機能を適用した可視化事例を紹介する。
※1. 6.3.1〜6.3.3 の伝達関数は demo1.tf に格納されている。
※2. 6.3.4 の合成伝達関数は demo2.tf に格納されている。

６.３.１. 単変量のボリュームレンダリング
まずは伝達関数 t1 を図 22 のように設定して変数 q1 の概要を確認する。この例では，パネル左側の色の設計とパネル右側の不透明度の設計の両方に変数 q1 を使用して単変量のボリュームレンダリ
ングを行っている。

図 22

変量 q1 に対する単変量ボリュームレンダリング

69

６.３.２. 多変量のボリュームレンダリング
次に変量 q1 と変量 q2 を合成する多変量のボリュームレンダリングの事例を示す。この例では，色の設計に変量 q1 を使用し，不透明度の設計に変量 q2 を使用している。不透明度の伝達関数では変量
q2 のトーラス状の等値面 2 枚を抽出し，そこでの変量 q1 の変化を色で示している。

図 23

変量 q2 の等値面に変量 q1 の色をマップする多変量ボリュームレンダリング

６.３.３. 断面表示
多変量ボリュームレンダリングの応用例として図 24 に断面表示例を示す。この例では不透明度の設計に座標を使用している。PBVR では伝達関数設計に任意の関数を利用可能であり，この例では
X^2+Z^2=const.という円筒面を抽出して，そこでの変量 q1 の変化を示している。

図 24

多変量ボリュームレンダリング機能を応用した断面表示

70

６.３.４. 伝達関数の合成
PBVR における伝達関数の合成機能を説明する。図 25 では不透明度を座標 Y で与え，Y>0 の領
域を透明にする伝達関数 t4 を定義し，伝達関数 t4 と先に定義した 3 つの伝達関数 t1,t2,t3 を(t1+t2)*t4+t3 と合成することにより部分領域を抽出する可視化例を示している。伝達関数の合成にあたり，t2 と t3 の色は（R,G,B）＝（0,0,0）と設定し，t4 の色は（R,G,B）＝（1,1,1）と設定している。これに上記合成式を適用すると，色の設計は t1 で使用されている q1 の rainbow によって定義される。一方，不透明度の設計は t1 と t2 を合成したものに t4 をかけて Y<0 の領域を抽出し，それと t3 の円筒面を合成したものが定義される。PBVR では通常の領域抽出機能を Crop パネルで実装しているが，伝達関数による領域抽出機能は着目する等値面やボリュームレンダリングのみに適用できるので極めて自由度が高い。

図 25

伝達関数の合成機能

71

６.４. 可視化結果の保存
伝達関数の設計が完了し，必要な可視化処理が完了したら可視化結果を保存する。可視化結果を保存するには以下の 3 つの方法が利用できる。
（１） 画像出力
可視化結果を画像ファイルとして出力するには画像出力パネルの capture を on にする。
これにより，作業ディレクトリに以下のビットマップ画像ファイルが生成される。
PBVR_image.xxxxx.bmp（２） 伝達関数ファイル
可視化に用いた伝達関数を保存するには伝達関数エディタの File Path に伝達関数ファイル
名を入力し，Export File ボタンを押す。これにより生成される伝達関数ファイルは Import
File ボタンで読み込み可能である。ただし，伝達関数読み込み後に Apply ボタンを押さな
いと伝達関数が反映されないことに注意すること。
（３） 可視化パラメータファイル
バッチモードのサーバ処理用に伝達関数を含めた全ての可視化パラメータファイルを保存できる。メインパネルの File サブパネルでファイル名を指定し，Export File ボタンを押して可視化パラメータファイルを保存する。

図 26

可視化結果の保存

72

６.５. バッチモード処理
前節で保存した可視化パラメータファイルを用いるバッチモードの処理例を説明する。バッチモー
ドはスーパーコンピュータ上の超並列処理を想定して開発された機能であるが，スタンドアロンモー
ドの描画処理では粒子生成処理の待ち時間がなくなるため，時系列データの高速な描画にも適用が可能である。

[手順１] サーバプログラムをバッチモードで実行する（OpenMP 版）。※1$./CPUServer –B –vin ./gt5d/case.pfi –pout ./particle/ -S m -plimit 100 -rl 2 -sl 4 –pa ./param.in[手順２] クライアントプログラムをスタンドモードで実行する。※2$./PBVRViewer ./particle/ -rl 2 -sl 4※1. 現バージョンのサーバプログラムでは，バッチモードの際に伝達関数以外の主要パラメー
タをコマンドラインオプションで指定する必要がある。
※2. サブピクセルレベルは描画する粒子のサイズを決めるパラメータなので，スタンドアロン
モードの際にもオプションの指定が必要。

73