Sculptプロセス制御

Sculpt の実行を制御するためのオプションです。Sculpt は MPI を使用して複数プロセッサへ処理を分散し、Hex メッシュを構築する並列アプリケーションです。通常は -j または num_procs オプションで使用するプロセッサ数を指定します。Sculpt はプロセッサごとに個別の Exodus ファイルを書き出し、epu ユーティリティで1つのファイルに結合できます。任意のプロセッサ数を使用できますが、通常はハードウェアで利用可能なコア数以下の -j 値を使用します。

Sculpt のオプションは、「short」コマンドを使用してコマンドラインから直接指定するか、長い形式のコマンドを使用する入力ファイルから指定できます。入力ファイルにはコメントを付けて編集できるため、一般には入力ファイルを使用して Sculpt を実行する方法が推奨されます。


Process Control              -pc     --process
  --num_procs                -j    <arg> Number of processors requested                               
  --input_file               -i    <arg> File containing user input data                              
  --debug_processor          -D    <arg> Sleep to attach to processor for debug                       
  --debug_flag               -dbf  <arg> Dump debug info based on flag                                
  --quiet                    -qt         Suppress output                                              
  --print_input              -pi         Print input values and defaults then stop                    
  --version                  -vs         Print version number and exit                                
  --threads_process          -tpp  <arg> Number of threads per process                                
  --iproc                    -ip   <arg> Number of processors in I direction                          
  --jproc                    -jp   <arg> Number of processors in J direction                          
  --kproc                    -kp   <arg> Number of processors in K direction                          
  --build_ghosts             -bg         Write ghost layers to exodus files for debug                 
  --vfrac_method             -vm   <arg> Set method for computing volume fractions                    

Sculpt Command Summary

プロセッサ数

Command: num_procs     Number of processors requested

Input file command:   num_procs <arg>
Command line options: -j <arg>
Argument Type:        integer > 0 
コマンド説明:

Sculpt がメッシュ生成に使用するプロセッサ数です。構造化 Cartesian ベースグリッドでは、この値に基づいて領域が概ね同じ大きさの矩形領域へ自動分割されます。

非構造入力については(次を参照: --input_mesh)で複数のプロセッサを使用するには、まずベースメッシュを、次で指定する数と同じ数の領域に分割しておく必要があります: num_procs。この decomp ツール(Sandia の SEACAS ツールスイートを使用すると、Exodus メッシュを Sculpt 入力に適した複数領域へ分割できます。

各プロセッサでは、領域の一部について独立したメッシュが生成されます。プロセッサ境界をまたぐ連続性は MPI(Message Passing Interface)によって維持されます。各プロセッサは、自身が担当する領域を含む個別の Exodus II ファイルをディスクへ書き出します。Sandia SEACAS のツール epu を使用すると、必要に応じて並列出力されたファイルを1つのファイルに結合できます。

コマンドラインで指定しない場合、使用するプロセッサ数は1です。

Cartesian ベースグリッド上でプロセッサ領域の配置をさらに制御するには、次の引数を参照してください: iproc、jproc、kproc。


入力ファイル

Command: input_file     File containing user input data

Input file command:   input_file <arg>
Command line options: -i <arg>
Argument Type:        file name with path 
コマンド説明:

コマンドラインで複雑な一連の引数を指定する代わりに、入力ファイルを使用することもできます。入力ファイルは、現在の Sculpt 実行で使用するすべての引数とパラメータを含む単純なテキストファイルです。通常、入力ファイルの拡張子は「.i」です。入力ファイルで使用できる引数は、各コマンドに示されている Long Name に限られます。

ユーザーコメントはファイル内の任意の場所に記述できますが、「$」記号の後に置く必要があります。読み取らせる引数代入は、「begin sculpt」と「end sculpt」のブロック内に含める必要があります。すべての引数は大文字・小文字のどちらでも使用でき、コマンドとパラメータの間には任意で「=」を使用できます。次は入力ファイルの例です:

  BEGIN SCULPT
    stl_file = "mygeom.stl"
    cell_size = 0.5
    exodus_file = "mymesh"
    mesh_void = true
  END SCULPT

次は、Sculpt で入力ファイルを使用する例です:

  sculpt -j 4 -i myinput.i

プロセッサ数(-j)は常にコマンドラインで指定し、入力ファイルには記述できないことに注意してください。ファイルには相対パスまたは絶対パスも使用できます。


Debug Processor

Command: debug_processor     Sleep to attach to processor for debug

Input file command:   debug_processor <arg>
Command line options: -D <arg>
Argument Type:        integer >= 0 
コマンド説明:

デバッグに使用します。指定したプロセスにデバッガがアタッチされるまで、すべてのプロセスが待機します。0 は最初のプロセッサ、1 は2番目のプロセッサ、という対応です。


Debug Flag

Command: debug_flag     Dump debug info based on flag

Input file command:   debug_flag <arg>
Command line options: -dbf <arg>
Argument Type:        integer >= 0 
Input arguments: off (0)
                 lost_nodes (1)
                 non-manifold (2)
                 defeature (3)
                 thickening (4)
                 initial-projections (5)
                 reversal (6)
                 gq-color (8)
                 gq-full (9)
                 hostname (10)
                 test_large_global_ids (11)
                 use_bbox_for_unstructured (12)
                 allow_input_mesh_sidesets (13)
コマンド説明:

デバッグに使用します。次の指定に従って特定の情報を出力するには flag を設定します:

0 (off)既定値。デバッグ出力を行いません。

1 (lost_nodes)プロセッサの lost node 情報を出力します。

2 (non-manifold)各内部反復および外部反復の後に、非多様体解消状態を Exodus ファイルとして出力します。

3 (defeature)各内部反復および外部反復の後に、Defeature 状態を Exodus ファイルとして出力します。

4 (thickening)各材料の thickening 後に、Thickened 状態を Exodus ファイルとして出力します。

Guaranteed Quality:

5 (initial-projections)初期 minimizer projection を無効にします。

6 (reversal)非多様体 reversal case を使用します。

7 debug_flag 5 と 6 を組み合わせます。

8 (gq-color)品質保証付き Laplacian color smoothing を使用します。

9 (gq-full)debug_flags 5、6、8 を組み合わせます。

10 (hostname)各プロセッサのホスト名を表示します。

11 (test_large_global_IDs)large_exodus オプションのテスト用に、グローバルな節点 ID と要素 ID の番号付けを INT_MAX(2^31)から開始します。

12 (use_bbox_for_unstructured)xmin、ymin、... オプションを使用して input_mesh の領域を制限します。

13 (allow_input_mesh_sidesets)並列実行時に gen_sidesets = 6、7、9 の使用を制限しません。(プロセッサ境界で品質の低い要素が生成される場合があります。)


Quiet

Command: quiet     Suppress output                        

Input file command:   quiet
Command line options: -qt
コマンド説明:

Sculpt 実行中のコマンドライン出力をすべて抑制します。


入力を表示

Command: print_input     Print input values and defaults then stop

Input file command:   print_input
Command line options: -pi
コマンド説明:

現在の Sculpt 実行で使用されるすべての入力パラメータと既定値を出力ウィンドウに表示して停止します。メッシュ(または体積分率)は生成されません。


バージョン

Command: version     Print version number and exit

Input file command:   version
Command line options: -vs
コマンド説明:

Sculpt のバージョン情報を表示して終了します。


プロセッサあたりのスレッド数

Command: threads_process     Number of threads per process

Input file command:   threads_process <arg>
Command line options: -tpp <arg>
Argument Type:        integer > 0 
コマンド説明:

このオプションは現在実験段階で開発中です。Sculpt は性能向上のため共有メモリ並列処理を使用する場合があります。Kokkos ライブラリを組み込んでビルドした場合、Sculpt の一部アルゴリズムは MPI 分散メモリ並列処理に加えて共有メモリ並列スレッドを使用します(MPI+X)。現在、このオプションは Surface および Volume の Laplacian smoothing アルゴリズムにのみ実装されています。カスタムビルドの Sculpt が必要となり、このオプションを利用できない場合があります。使用したい場合は開発者に確認してください。


I 方向のプロセッサ数

Command: iproc     Number of processors in I direction

Input file command:   iproc <arg>
Command line options: -ip <arg>
Argument Type:        integer > 0 
コマンド説明:

引数 iproc、jproc、kproc により、それぞれ I、J、K 方向のプロセッサ分割をユーザーが制御できます。iproc * jproc * kproc は、コマンドラインの -j オプションで指定するプロセッサ数と一致する必要があります。領域の局所部分で大幅な細分化が行われることが分かっている場合は、各プロセッサが担当するセル層数、すなわち interval 数を手動指定すると有効なことがあります。これにより、多数の要素が見込まれる領域にはより小さい物理領域を割り当てつつ、要素数を概ね均等にしてプロセッサ負荷を粗く平衡化できます。大規模 HPC マシンで単一プロセッサのメモリ制限を回避できる場合もあります。プロセッサ interval を指定する場合は、I、J、K 各方向の正確な interval 数を指定できます。各方向に指定する interval 数は次の値である必要があります: iproc, jproc、および kproc です。また、各方向の interval 数の合計は、ユーザーが指定した次の値と一致する必要があります: nelx, nely および nelz の値です。たとえば、nelx = nely = 28、nelz = 27 の24プロセッサ(-j 24)構成では、プロセッサ配置の一例は次のようになります:

    nelx = 28
    nely = 28
    nelz = 27
    iproc = 2 14 14
    jproc = 2 14 14
    kproc = 6 7 6 5 4 3 2
この例では、I 方向と J 方向をそれぞれ14 interval として2プロセッサに均等分割しています。一方 K 方向は6プロセッサに分割され、interval 数は下端(最小 z)の7から上端(最大 z)の2へ段階的に少なくなります。どの方向でも interval 数は常に2以上でなければなりません。プロセッサ interval を省略すると、Sculpt は各方向の interval を概ね均等に配置しようとします。入力で少なくとも1方向の interval が指定されている場合は、すべての方向を指定する必要があります。このオプションは Cartesian ベースグリッド指定時のみ使用でき、次を用いる非構造ベースグリッドでは使用できません: input_mesh オプション。


J 方向のプロセッサ数

Command: jproc     Number of processors in J direction

Input file command:   jproc <arg>
Command line options: -jp <arg>
Argument Type:        integer > 0 
コマンド説明:

引数 iproc、jproc、kproc により、それぞれ I、J、K 方向のプロセッサ分割をユーザーが制御できます。iproc * jproc * kproc は、コマンドラインの -j オプションで指定するプロセッサ数と一致する必要があります。領域の局所部分で大幅な細分化が行われることが分かっている場合は、各プロセッサが担当するセル層数、すなわち interval 数を手動指定すると有効なことがあります。これにより、多数の要素が見込まれる領域にはより小さい物理領域を割り当てつつ、要素数を概ね均等にしてプロセッサ負荷を粗く平衡化できます。大規模 HPC マシンで単一プロセッサのメモリ制限を回避できる場合もあります。プロセッサ interval を指定する場合は、I、J、K 各方向の正確な interval 数を指定できます。各方向に指定する interval 数は次の値である必要があります: iproc, jproc、および kproc です。また、各方向の interval 数の合計は、ユーザーが指定した次の値と一致する必要があります: nelx, nely および nelz の値です。たとえば、nelx = nely = 28、nelz = 27 の24プロセッサ(-j 24)構成では、プロセッサ配置の一例は次のようになります:

    nelx = 28
    nely = 28
    nelz = 27
    iproc = 2 14 14
    jproc = 2 14 14
    kproc = 6 7 6 5 4 3 2
この例では、I 方向と J 方向をそれぞれ14 interval として2プロセッサに均等分割しています。一方 K 方向は6プロセッサに分割され、interval 数は下端(最小 z)の7から上端(最大 z)の2へ段階的に少なくなります。どの方向でも interval 数は常に2以上でなければなりません。プロセッサ interval を省略すると、Sculpt は各方向の interval を概ね均等に配置しようとします。入力で少なくとも1方向の interval が指定されている場合は、すべての方向を指定する必要があります。このオプションは Cartesian ベースグリッド指定時のみ使用でき、次を用いる非構造ベースグリッドでは使用できません: input_mesh オプション。


K 方向のプロセッサ数

Command: kproc     Number of processors in K direction

Input file command:   kproc <arg>
Command line options: -kp <arg>
Argument Type:        integer > 0 
コマンド説明:

引数 iproc、jproc、kproc により、それぞれ I、J、K 方向のプロセッサ分割をユーザーが制御できます。iproc * jproc * kproc は、コマンドラインの -j オプションで指定するプロセッサ数と一致する必要があります。領域の局所部分で大幅な細分化が行われることが分かっている場合は、各プロセッサが担当するセル層数、すなわち interval 数を手動指定すると有効なことがあります。これにより、多数の要素が見込まれる領域にはより小さい物理領域を割り当てつつ、要素数を概ね均等にしてプロセッサ負荷を粗く平衡化できます。大規模 HPC マシンで単一プロセッサのメモリ制限を回避できる場合もあります。プロセッサ interval を指定する場合は、I、J、K 各方向の正確な interval 数を指定できます。各方向に指定する interval 数は次の値である必要があります: iproc, jproc、および kproc です。また、各方向の interval 数の合計は、ユーザーが指定した次の値と一致する必要があります: nelx, nely および nelz の値です。たとえば、nelx = nely = 28、nelz = 27 の24プロセッサ(-j 24)構成では、プロセッサ配置の一例は次のようになります:

    nelx = 28
    nely = 28
    nelz = 27
    iproc = 2 14 14
    jproc = 2 14 14
    kproc = 6 7 6 5 4 3 2
この例では、I 方向と J 方向をそれぞれ14 interval として2プロセッサに均等分割しています。一方 K 方向は6プロセッサに分割され、interval 数は下端(最小 z)の7から上端(最大 z)の2へ段階的に少なくなります。どの方向でも interval 数は常に2以上でなければなりません。プロセッサ interval を省略すると、Sculpt は各方向の interval を概ね均等に配置しようとします。入力で少なくとも1方向の interval が指定されている場合は、すべての方向を指定する必要があります。このオプションは Cartesian ベースグリッド指定時のみ使用でき、次を用いる非構造ベースグリッドでは使用できません: input_mesh オプション。


デバッグ用に ghost layer を書き出します。

Command: build_ghosts     Write ghost layers to exodus files for debug

Input file command:   build_ghosts
Command line options: -bg
コマンド説明:

このオプションを設定すると、プロセッサ領域境界の ghost hex を Exodus ファイルへ出力します。デバッグ専用です。


Volume Fraction Calculation Method

Command: vfrac_method     Set method for computing volume fractions

Input file command:   vfrac_method <arg>
Command line options: -vm <arg>
Argument Type:        integer (1, 2, 3) 
Input arguments: cth (0)
                 cth (1)
                 r3d (2)
                 winding (3)
コマンド説明:

Geometry 入力から体積分率を計算する方法を設定します。現在、3つのオプションを使用できます:

CTH(1): 既定の方法です。Sandia Laboratories のサードパーティ CTH ライブラリを使用し、適応的 ray firing 法で交差を近似して、グリッドセル内の複数位置の内外判定を行います。この方法は STL、および diatom 形式で定義されたすべての有効な primitive type に使用できます。

R3D(2): Los Alamos Laboratories が開発したサードパーティ R3D ライブラリを使用します。機械精度の交差計算を行い、STL 記述から高精度な体積分率を生成します。この方法は STL、および STL 入力ファイルを指定する diatom 入力パッケージに有効です。diatom ファイルで定義された STL 以外の形式の Geometry は、この方式では無視されます。

Winding(3): サードパーティ igl ライブラリの fast winding number を使用します。watertight でない STL ファイルも適切に処理できることが期待されます。現在も研究開発中です。