コンテンツにスキップ

領域分割

大規模メッシュを複数プロセスで並列解析する際には、単一領域のメッシュを部分領域に分け、各プロセスが担当する領域と領域間通信に必要な情報を事前に生成しておく必要がある。この前処理を領域分割という.

FrontISTR の並列計算では,hecmw_part1 が単一領域メッシュを部分領域に分割し,分散メッシュデータを作成する.生成された分散メッシュデータは並列 fistr1 が読み込み,領域間通信に必要な情報とともに並列ソルバで利用される.

このページでは,領域分割で選択する分割タイプ,分割手法,オーバーラップ深さ,接触点の扱いを説明する.hecmw_part1 の実行手順,制御ファイルの具体的な書式,エラーメッセージは関連項目を参照されたい.

機能の全体像

領域分割は,単一領域メッシュを複数の部分領域へ分ける処理である.FrontISTR では,分割タイプ,分割手法,領域数,オーバーラップ深さを組み合わせて分散メッシュデータを作成する.

選択軸 主な選択肢 役割
分割タイプ 節点ベース分割,要素ベース分割 節点と要素のどちらを所属決定の単位にするかを決める.
分割手法 RCB,METIS(pMETIS / kMETIS) 領域境界の作り方を決める.
領域数 任意の正整数(RCB では \(2^n\) 分散メッシュデータの部分領域数を決める.通常は MPI プロセス数と一致させる.
オーバーラップ深さ 1 以上の整数 隣接領域が重複して保持する範囲を決める.節点ベース分割で指定する.
通信テーブル 輸入・輸出情報,共有情報 隣接部分領域間で必要なデータ交換を定義する.領域分割時に自動生成される.

通信テーブルは分散メッシュデータに含まれるため,通常の解析ではユーザが直接編集する必要はない.並列 fistr1 はこの分散メッシュデータを読み込み,MUMPS などの並列直接法または反復法で線形方程式を解く.

領域分割の選び方

通常の構造解析・熱伝導解析では,まず節点ベース分割を候補にする.節点ベース分割は,並列有限要素解析で必要な節点値の通信を扱いやすく,オーバーラップ深さも指定できる.要素ベース分割は,連成解析など,分割後の情報を要素中心に扱いたい用途で候補になる.

分割手法は,形状と領域数から選ぶ.単純な形状で,領域数を \(2^n\) にできる場合は RCB が簡潔で安定した候補になる.複雑な形状や任意の領域数で分割したい場合は,グラフ分割に基づく METIS を候補にする.

問題の特徴 推奨される選択
構造解析・熱伝導解析の標準的な並列解析 節点ベース分割
連成解析など要素中心の分散情報を使う用途 要素ベース分割
直方体に近い単純形状で,領域数が \(2^n\) RCB
複雑形状または任意の領域数 METIS
SAINV 前処理を使う接触問題・MPC 拘束問題 節点ベース分割でオーバーラップ深さを 2 以上にする

領域数は,通常は MPI プロセス数と一致させる.並列実行の手順とプロセス数の指定は,並列処理による解析を参照.SAINV 前処理とオーバーラップ深さの関係は,ソルバー・前処理も参照されたい.

分割タイプ

分割タイプは,メッシュ内のどの単位に唯一の所属部分領域を与えるかを決める選択である.節点ベース分割では節点の所属を決め,要素ベース分割では要素の所属を決める.どちらの場合も,隣接部分領域との計算に必要な情報はオーバーラップとして保持される.

節点ベース分割

節点ベース分割では,すべての節点に対して唯一の所属部分領域を決定する.隣接する部分領域では,要素がオーバーラップして保持される.入力上は !PARTITION, TYPE=NODE-BASED で指定する.

節点ベース分割の概念

図10.1 節点ベース分割の概念

各部分領域は,内部節点,内部節点を含む要素,およびそれらの要素を構成する節点を保持する.

節点ベース分割で各部分領域が保持する節点と要素

図10.2 節点ベース分割で各部分領域が保持する節点と要素

節点ベース分割の通信テーブルには,次の情報が含まれる.

  • 輸入節点: 部分領域内で利用する節点のうち,他の部分領域に属する節点.
  • 輸出節点: 他の部分領域の輸入節点となっている内部節点.
  • 共有要素: 他の部分領域と共有する要素.

節点ベース分割の輸入節点

図10.3 節点ベース分割の輸入節点

節点ベース分割の輸出節点

図10.4 節点ベース分割の輸出節点

節点ベース分割の共有要素

図10.5 節点ベース分割の共有要素

要素ベース分割

要素ベース分割では,すべての要素に対して唯一の所属部分領域を決定する.隣接する部分領域では,節点がオーバーラップして保持される.入力上は !PARTITION, TYPE=ELEMENT-BASED で指定する.

要素ベース分割の概念

図10.6 要素ベース分割の概念

各部分領域は,内部要素,内部要素を構成する節点,およびそれらの節点を含む要素を保持する.

要素ベース分割で各部分領域が保持する節点と要素

図10.7 要素ベース分割で各部分領域が保持する節点と要素

要素ベース分割の通信テーブルには,次の情報が含まれる.

  • 輸入要素: 部分領域内で利用する要素のうち,他の部分領域に属する要素.
  • 輸出要素: 他の部分領域の輸入要素となっている内部要素.
  • 共有節点: 他の部分領域と共有する節点.

要素ベース分割の輸入要素

図10.8 要素ベース分割の輸入要素

要素ベース分割の輸出要素

図10.9 要素ベース分割の輸出要素

要素ベース分割の共有節点

図10.10 要素ベース分割の共有節点

どちらの分割タイプでも,通信テーブルは hecmw_part1 が自動生成し,分散メッシュデータへ書き込む.そのため,通常の解析ではユーザが輸入・輸出情報を直接作成する必要はない.

分割手法

分割手法は,部分領域の境界をどのように決めるかを表す.FrontISTR では,座標値に基づく RCB と,グラフ分割に基づく METIS を利用できる.

分割手法 特徴 主な制約・注意点
RCB 座標値の大小に基づき,再帰的に二分割する.単純形状で高速に分割できる. 領域数は \(2^n\) に限定される.分割軸の指定が必要である.
pMETIS グラフ分割に基づき,領域間の接続を考慮して分割する. METIS が有効なビルドで利用できる.
kMETIS 多領域へのグラフ分割に基づき,複雑形状でも領域境界を作りやすい. METIS が有効なビルドで利用できる.

RCB は Recursive Coordinate Bisection の略であり,座標軸に沿ってメッシュを二分割する処理を繰り返す.領域数を \(2^n\) にできる場合に適しており,直方体状の単純な形状で扱いやすい.

METIS は,メッシュの接続関係をグラフとして扱い,グラフ分割により部分領域を作る.形状が複雑な場合や,領域数を \(2^n\) に限定したくない場合に候補になる.METIS を用いるには,ビルド時に METIS ライブラリが有効である必要がある.依存ライブラリの扱いは,必須・オプション依存ライブラリを参照.

オーバーラップ深さ

オーバーラップ深さは,隣接する部分領域が重複して保持する範囲の層数である.節点ベース分割では,!PARTITIONDEPTH パラメータで 1 以上の整数を指定できる.省略時のオーバーラップ深さは 1 である.

通常の並列解析では,DEPTH=1 で十分である.一方,SAINV などの SAI 系前処理を接触問題や MPC 拘束問題で使う場合は,オーバーラップ深さを 2 以上に増やすことで前処理品質が改善することがある.

また,四面体 1 次要素 341 で選択的辺・節点平滑化定式化(FORM341=SELECTIVE_ESNS)を MPI 並列で用いる場合も,オーバーラップ深さを 2 以上にする必要がある.エッジベース/節点ベースの平滑化では対象要素に隣接する要素の量を平均化するため,部分領域内で剛性を組み立てるのに「隣の隣」の要素情報が必要になり,既定の DEPTH=1 では領域境界付近の平滑化が不足する.要素定式化の詳細は要素ライブラリを参照.

オーバーラップ深さを増やすと,隣接部分領域が保持する節点・要素が増えるため,メモリ使用量と通信量も増える.収束性の改善と計算コストの増加を比較しながら設定する.前処理の選択は,ソルバー・前処理を参照.

接触点の扱い

接触ペアを含むメッシュを分割する場合,!PARTITIONCONTACT パラメータで接触点の領域配置方針を指定できる.接触点の配置は,接触探索や接触拘束を含む並列解析の安定性と通信量に影響する.

位置づけ
DEFAULT 標準の配置方針を用いる.
SIMPLE 接触点に特別な重みを与えず,通常の分割に近い配置を用いる.
AGGREGATE 接触ペアに関係する節点群をまとめる方向で分割する.
DISTRIBUTE 接触のマスター側節点が部分領域間で偏りにくい方向で分割する.

接触を含まないメッシュでは,CONTACT パラメータを意識する必要はない.接触を含む並列解析で収束性や負荷分散に問題がある場合に,接触点の配置方針を見直す.入力書式の詳細は,!PARTITIONを参照.

領域分割イメージの出力

!PARTITIONUCD パラメータを指定すると,分割結果を確認するための UCD ファイルを出力できる.UCD ファイルは,MicroAVS などの可視化ツールで領域番号や分割境界を確認する用途に使う.

領域数,分割手法,オーバーラップ深さを変更した後は,分割された領域の偏りや不自然な細分化がないかを確認することが重要である.UCD 出力は,並列解析を実行する前に分割の妥当性を確認するための補助機能である.

関連項目