Filter_JP - CCSEPBVR/CS-IS-PBVR GitHub Wiki

フィルタプログラム

フィルタプログラムは粒子生成の䞊列凊理を目的ずしおストレヌゞ䞊のボリュヌムデヌタを領域分割するプログラムであり、PBVRずは独立な前凊理プログラムである。 領域分割モデルには8分朚を採甚し、フィルタ凊理埌に分割されたサブボリュヌムデヌタをファむルずしお出力する。

起動方法

実行コマンド(filter)盎埌にパラメヌタを蚘述したパラメヌタファむル名(任意)を指定するこずによりパラメヌタが読みずられ実行される。 パラメヌタファむル名が指定されない堎合や、存圚しないファむル名を指定した堎合ぱラヌずなり正しく起動されない。

(MPI + OpenMPでの起動方法、Nにプロセス䞊列数を入力する)
$ mpiexec -n N filter param.txt

(OpenMPのみでの起動方法)
$ filter param.txt

䞊蚘のどちらの堎合もOpenMPスレッド数は環境倉数OMP_NUM_THREADSで指定する。

VTKデヌタ甚フィルタの起動

VTK甚フィルタを起動するには、環境に合わせた環境倉数の蚭定が必芁になる。

  • Linux
    以䞋のように環境倉数を蚭定する。
export LD_LIBRARY_PATH=${VTK_LIB_PATH}:$LD_LIBRARY_PATH
  • Mac
    以䞋のように環境倉数を蚭定する。
export DYLD_LIBRARY_PATH=${VTK_LIB_PATH}:$DYLD_LIBRARY_PATH
  • Windows
    [コントロヌルパネル]->[システム]->[詳现蚭定]->[環境倉数]に移動し、以䞋の環境倉数を蚭定する。
倉数 倀
Path C:¥Program Files¥VTK 6.3.0¥bin

倀はVTKのむンストヌルディレクトリ配䞋のbinディレクトリを指定する。

ファむル圢匏

フィルタの入出力ファむル圢匏に関しお以降に瀺す。 なお、出力されるファむルの䞭でバむナリ圢匏のファむルは党おヘッダ、フッタなしの単粟床であり、リトル゚ンディアンに統䞀されおいる。 ファむル圢匏ずしおは䞋図に瀺すSPLIT圢匏(別名KVSML圢匏)、サブボリュヌム集玄圢匏、ステップ集玄圢匏の3皮類が利甚可胜である。 SPLIT圢匏では党おのステップ・サブボリュヌム毎に独立なファむルを生成する。 しかしながら、この方匏では8分朚の階局が増倧するずファむル数が爆発的に増倧するためサブボリュヌム毎に時間方向にファむルを集玄するサブボリュヌム集玄圢匏、および、ステップ毎に空間方向にファむルを集玄するステップ集玄圢匏を利甚可胜ずした。 ファむル圢匏の詳现を以䞋で説明する。

workload

入力デヌタ圢匏

フィルタプログラムで凊理できる入力デヌタは以䞋の通り。

  1. AVSFLDバむナリデヌタ※1
  2. AVSUCDアスキヌ・バむナリデヌタ※1
  3. STLバむナリデヌタ※2
  4. PLOT3Dバむナリデヌタ※3
  5. VTK Legacyバむナリデヌタ※4

※1. AVSのデヌタフォヌマットの詳现に぀いおはWebサむトを参照。 AVSUCDデヌタはdata圢匏のみで、geom圢匏、data_geom圢匏は未察応。 芁玠タむプは2次元芁玠、3次元芁玠に察応しおおり、混合芁玠も利甚可胜。
※2. STLデヌタフォヌマットの詳现に぀いおはWebサむト等を参照。
※3. PLOT3Dデヌタフォヌマットの詳现に぀いおはWebサむト等を参照。
※4. VTKデヌタフォヌマットの詳现に぀いおはWebサむト等を参照。VTK Structured Points、VTK Structured Grid、VTK Rectilinear Grid、VTK Unstructured Grid、およびVTK Polygon Dataを利甚可胜。

゚ンディアン

フィルタプログラムで扱うバむナリファむルは、リトル゚ンディアンに統䞀されおいる。 リトル゚ンディアンのマシン䞊でぱンディアンに関しお特別な凊理は必芁ないが、ビック゚ンディアンのマシンだは可芖化デヌタをリトル゚ンディアンで出力する、あるいはリトル゚ンディアンに倉換した䞊でフィルタプログラムを実行する必芁がある。

フィルタ出力情報ファむル(.pfi)

フィルタプログラムは、サブボリュヌムファむルずそれらのメタデヌタを蚘茉するpfiファむルを出力する。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)
  • サブボリュヌム 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. 芁玠タむプの定矩はこちらを参照。
※2. ファむルタむプは以䞋の3぀の圢匏。

  • 0 : SPLIT圢匏
  • 1 : サブボリュヌム集玄圢匏
  • 2 : ステップ集玄圢匏

※3. ファむルタむプが「サブボリュヌム集玄圢匏」の堎合のファむル総数を瀺す。
※4. サブボリュヌム数は$8^\texttt{n\_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個

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 : 党ボリュヌム数(5桁数倀)

サブボリュヌムファむル圢匏

芁玠構成、ノヌド座暙および党ステップの成分が、サブボリュヌム単䜍に分割される。 指定により耇数サブボリュヌム情報を1ファむルに集玄するこずも可胜である。 党ファむル数は、最倧でサブボリュヌム数ずなる。(n_layer=7 : 2,097,152個)

ファむル構成

prefix_YYYYYYY_ZZZZZZZ.dat 

 (バむナリ圢匏)

  • prefix : 接頭蟞
  • ファむル番号(7桁数倀)
  • 党ファむル総数(7桁数倀)

ステップ集玄ファむル圢匏

芁玠構成ファむルおよびノヌド座暙ファむルは、それぞれ1぀のファむルずなり(党サブボリュヌムの錠法を1぀のファむルに集玄)、成分ファむルはステップ単䜍に分割される。 党ファむル数はステップ数 + 2ずなる。

ファむル構成

ファむル名 説明
prefix_connect.dat 芁玠構成ファむルバむナリ圢匏
prefix_coord.dat ノヌド座暙ファむルバむナリ圢匏
prefix_XXXXX_value.dat 成分ファむルバむナリ圢匏
  • prefix : 接頭蟞
  • XXXXX : ステップ数(5桁数倀)

パラメヌタファむル

パラメヌタファむルは(AVSFLD/UCD、PLOT3D、STL甹)フィルタ、および、VTK甚フィルタで共通に䜿甚されるアスキヌ圢匏のファむルである。 フィルタ実行時の匕数ずしおファむル名を指定するこずにより、そのファむルが入力パラメヌタずしお解釈され、パラメヌタがセットされる。

パラメヌタ名 パラメヌタ内容 デフォルト倀 備考
in_dir 入力ファむルディレクトリ “.” 入力ファむルのディレクトリパス※
field_file AVSFLDファむル名 - ※2、※3、※4
stl_binary_file STLファむル名 - ※2
plot3d_config_file PLOT3D蚭定ファむル名 - ※2、※3
vtk_file VTKファむル名 - ※2、※3、※5
vtk_in_prefix VTK時系列ファむル名の接頭蟞 - ※2、※3、※5
vtk_in_suffix VTK時系列ファむル名の接尟蟞 - ※2、※3、※5
ucd_inp AVSUCDファむル名 - アスキヌ圢匏※2
in_prefix AVSUCD時系列ファむル名の接頭蟞 - バむナリ圢匏※2
in_suffix AVSUCD時系列ファむル名の接尟蟞 - バむナリ圢匏※2
format VTK、AVSUCD時系列ステップ数圢匏 “%05d”
out_dir 出力ファむルディレクトリ “.” 出力ファむルのディレクトリパス※1
out_prefix 出力ファむル名の接頭蟞 “output.”
start_step 開始ステップ数 1 ※6
end_step 終了ステップ数 1 ※6
n_layer 八分朚分割数 0 07たでの敎数
output_type ファむル圢匏 0 0:SPLIT圢匏
1:サブボリュヌム集玄
2:ステップ集玄
䞊蚘以倖出力なし
file_number 出力ファむル数 0 0以䞊の敎数で、0の堎合はサブボリュヌム数ずなる
サブボリュヌム集玄ファむルの堎合のみ有効
mpi_volume_div サブボリュヌム分割数 1 サブボリュヌムの分割数※7
mpi_step_div ステップ分割数 1 ステップの分割数※7
mpi_div MPI䞊列における分割軞 2 0:ステップ分割数、サブボリュヌム分割数により決定
1:サブボリュヌム分割軞を優先
2:ステップ分割軞を優先
mpi_volume_divずmpi_step_divが指定された堎合は無効
multi_elem_type 非構造栌子の混合芁玠デヌタフラグ 0 0:単䞀タむプの芁玠のみで構成
1:耇数タむプの芁玠で構成
temp_delete 混合芁玠デヌタ実行時の䞀時ファむル削陀指瀺 1 0:䞀時ファむルを残す
1:䞀時ファむルを消す

※1. ディレクトリ指定は、絶察・盞察パスで指定が可胜であるが、~(チルダ)での指定は䞍可。
※2. field_file、stl_binary、vtk_file、vtk_in_prefix(suffix)、ucd_inp、in_prefix(suffix)のどれ䞀぀を指定するこず。
※3.入力デヌタが構造栌子の堎合は、3次元では6面䜓䞀次元芁玠(非構造栌子)、2次元では4角圢䞀次元芁玠(非構造栌子)ずしお出力される。
※4. nstep、ndim、dim1、dim2、dim3、veclen、coord[123]、variableに関するパラメヌタのみ参照。
※5. VTK Legacy圢匏に぀いおは、5぀のデヌタ圢匏(VTK Unstructured Grid、および、VTK Polygonal Data)をプログラムが自動刀別する。
※6. 時系列デヌタのみで指定するこず。
※7. mpi_volume_divずmpi_step_divが指定された堎合、その積ずプロセス数が䞀臎しない堎合ぱラヌずなる。

PLOT3D蚭定ファむル

PLOT3D蚭定ファむルによっおPLOT3Dデヌタのファむル圢匏を蚘述する。 ここでusebytecountはFortranバむナリで1、Cバむナリで0を蚭定する。

パラメヌタ名 パラメヌタ内容 デフォルト倀
coordinate_file_prefix 座暙ファむル名の接頭蟞 -
coordinate_file_suffix 座暙ファむル名の接尟蟞 -
coordinate_mode_precision 粟床 (float | double) double
coordinate_mode_usebytecount 1 for true、0 for false true
coordinate_mode_endian ゚ンディアン (little | big) little
coordinate_mode_iblanks 1 for true、0 for false false
solution_file_prefix ゜リュヌションファむル名の接頭蟞 -
solution_file_suffix ゜リュヌションファむル名の接尟蟞 -
solution_mode_precision 粟床 (float | double) double
solution_mode_usebytecount 1 for true、0 for false true
solution_mode_endian ゚ンディアン (little | big) little
function_file_prefix ファンクションファむル名の接頭蟞 -
function_file_suffix ファンクションファむル名の接尟蟞 -
function_mode_precision 粟床 (float | double) double
function_mode_usebytecount 1 for true、0 for false true
function_mode_endian ゚ンディアン (little | big) little

MPI䞊列凊理

MPI䞊列凊理における分割数の決定方法を説明する。 以䞋では50ステップ * 8サブボリュヌムのデヌタ凊理を考える。

  1. ステップ分割軞優先

    • プロセス数がステップ数以䞋の時は、党ステップをプロセス数で分割する。䟋)8プロセスで起動する堎合の各プロセスの担圓領域は6ステップ * 8サブボリュヌム、もしくは7ステップ * 8サブボリュヌムずなる。
    • プロセス数がステップ数より倧きい時は、フィルタ凊理を行うプロセス数は、ステップ数の敎数倍のプロセス数ずしお、サブボリュヌム数偎の分割も行う。䟋)128プロセスで起動する堎合、50 * 2 = 100プロセス(䜙り28プロセス)の凊理ずなり、各プロセスの担圓領域は1ステップ * 4サブボリュヌムずなる。
  2. サブボリュヌム分割軞優先

    • プロセス数がサブボリュヌム数以䞋の時は、党サブボリュヌムをプロセス数で分割する。䟋)8プロセスで起動する堎合の各プロセスの担圓領域は50ステップ * 1サブボリュヌムずなる。
    • プロセス数がサブボリュヌムより倧きい時は、フィルタ凊理を行うプロセス数は、サブボリュヌム数の敎数倍のプロセス数ずし、ステップ数偎の分割も行う。 䟋) 128プロセスで起動する堎合、8 * 16 = 128プロセス(䜙り0プロセス)の凊理ずなり、各プロセスの担圓領域は6ステップ*1サブボリュヌム、もしくし、7ステップ * 1サブボリュヌムずなる。
  3. ナヌザ指定分割

    • パラメヌタファむルによる指定では、分割数の積ずプロセス数が䞀臎しない堎合ぱラヌずする。

ステヌゞング環境での実行方法

スヌパヌコンピュヌタにおけるステヌゞング環境での実行方法に関しお蚘述する。 パラメヌタファむルの指定ずファむル転送の指定に関しおは敎合性を図り、フィルタプログラムを起動する必芁がある。 たた、フィルタプログラムの出力圢匏によっおは、耇数プロセスから1぀のファむルに出力を行う堎合がある。 そのような堎合には出力先を耇数プロセスからアクセス可胜な共有ディレクトリを指定する必芁がある。

実行シェルずパラメヌタファむル

```
#!/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     ⑥
```
  1. 実行モゞュヌルを各プロセスのランクディレクトリに転送

  2. パラメヌタファむルを各プロセスのランクディレクトリに転送

  3. 入力デヌタを共有ディレクトリに転送(パラメヌタファむル内で指定するファむル)

  4. 出力デヌタを共有ディレクトリからロヌカルディレクトリに転送

  5. ログおよび゚ラヌファむルをランクディレクトリからロヌカルディレクトリに転送

  6. 各プロセスのランクディレクトリ内のパラメヌタファむルを匕数ずしお各プロセスのランクディレクトリ内の実行モゞュヌルを起動。

    #
    in_dir=../			



⑩
    field_file=pd3d.fld		
    out_prefix=case0			
    out_dir=./			



⑧
    file_type=0			



⑹
    n_layer=3
    start_step=0
    end_step=511
    
  7. 入力デヌタのパスを指定(ステヌシング環境では盞察パスによる指定、䞊蚘䟋では、共有ディレクトリから入力デヌタを読み蟌む)

  8. 出力デヌタのパスを指定(ステヌゞング環境では盞察パスによる指定、䞊蚘䟋では、各プロセス内のランクディレクトリぞ出力

  9. ファむル出力圢匏の指定(䞊蚘䟋では、SPLIT圢匏)

入出力ファむルずディレクトリ

ステヌゞング環境におけるフィルタプログラムの入出力ファむルずディレクトリの関係を以䞋に瀺す。 入出力先を共有ディレクトリに指定した堎合は問題ない(ログ&゚ラヌファむルを陀く)。 出力デヌタに関しおは、SPLIT圢匏のみランクディレクトリに出力可胜である。 他のファむル圢匏ではデヌタ集玄凊理のため共有ディレクトリの䜿甚が必芁ずなる。

IO 皮別 ランクディレクトリ 共有ディレクトリ
入力 パラメヌタファむル ○※1 ○
入力 入力デヌタ ○※2 ○
出力 出力デヌタSPLIT圢匏 ○ ○
出力 出力デヌタステップ集玄圢匏 × ○
出力 出力デヌタサブボリュヌム集玄圢匏 × ○
出力 ログ゚ラヌファむル ○※3 ×

※1. パラメヌタファむルはランク0のみが入力
※2. 党プロセスのランクディレクトリに党入力ファむルの転送が可胜な堎合。
※3. 出力先はランクディレクトリに固定

芁玠タむプの混圚した非構造栌子の実行

耇数芁玠タむプを含んだ非構造栌子のボリュヌムデヌタの堎合、フィルタプログラムでは、たず単䞀芁玠タむプ毎に分割した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桁のコヌドが付加されたファむル名ずなる。 以䞋に芁玠名ず芁玠タむプコヌドの䞀芧を瀺す。

芁玠名 芁玠タむプコヌド
3角圢 2
4角圢 3
4面䜓 4
ピラミッド 5
プリズム 6
6面䜓 7
3角圢2次 9
4角圢2次 10
4面䜓2次 11
6面䜓2次 14

䞊蚘パラメヌタファむルで4面䜓䞀次元芁玠ず4面䜓二次元芁玠から構成されるボリュヌムデヌタの堎合には以䞋のような出力ファむル名ずなる。

オリゞナル混合デヌタ
MULTI001.dat
MULTI002.dat
MULTI003.dat
MULTI004.dat
MULTI005.dat
...
MULTI020.dat

↓分割

4面䜓䞀次デヌタ 4面䜓二次デヌタ
04-div001_ 11-div001_
04-div002_ 11-div002_
04-div003_ 11-div003_
04-div004_ 11-div004_
04-div005_ 11-div005_
... ...
04-div020_ 11-div020_
⚠ **GitHub.com Fallback** ⚠