汎用ポストプロセッサー EnSight

カタログ(PDF 約3.1MB)EnSightカタログ

開発元: 米国 Computational Engineering International, Inc.   http://www.ceisoftware.com

OepnFOAMの並列計算結果の読み込み

はじめに

EnSightでOpenFOAMから出力された分割ファイル(並列計算結果のファイル)を扱う場合には、大きく分けて、通常起動したEnSightで読み込む方法と、EnSightの並列分散処理機能を利用して読み込む方法の2通りがあります。また、並列分散処理機能を利用する場合については、さらに2通りの方法に分けられます。ここでは、それぞれの方法について説明します。なお、EnSightの並列分散処理機能を利用するには、EnSight HPCもしくはEnSight VRのライセンスが必要になります。

通常起動したEnSightで読み込む方法

通常起動したEnSightでの分割ファイルの読み込みは、EnSight 10.0から対応しています。この場合は、OpenFOAMの分割ファイルは、共有ディスク上に各ファイルが存在していなければなりません。また、読み込では、systemフォルダー内にあるcontrolDictファイルを指定します。このファイルを指定すると、EnSightは、分割ファイルをシーケンシャルに読み込み、自動的に必要なファイルを読み込んで合成し、分割されていない1つのデータとして扱います。

EnSightの並列分散処理機能を利用して読み込む方法

OpenFOAMで並列計算した場合は、計算結果を出力したフォルダーの中に並列数に応じてprocessor0, processor1, processor2,…, processorNというフォルダーが作成され、各processorフォルダーに分割された領域毎にデータ・ファイルが出力されます。このOpenFOAMの並列計算結果をEnSightで扱うには、「分割されたデータを1つに結合した後に再分割する方法」と「OpenFOAMの並列計算時に使用された分割領域のまま処理する方法」の2つの方法がありますが、さらにそれらの方法には、それぞれ2通りの方法があります。なお、並列計算をされていない(領域分割されていない)データをお持ちの場合でも、A)の方法でデータを分割して、EnSightで並列分散処理することができます。


A) 分割されたデータを1つに結合した後に再分割する方法
  A-1) EnSightの「Partition101」を使用してデータを分割しなおす方法
  A-2) EnSightの自動分割機能を使用する方法

B) OpenFOAMの並列計算時に使用された分割領域のまま処理する方法
  B-1)
OpenFOAMネイティブなフォーマットのままデータを読み込む方法
  B-2) 分割領域毎にEnSightのCaseフォーマットにデータ変換する方法


A)の方法では、一旦、データを結合する手間がありますが、OpenFOAMの並列計算で使用した分割領域とは関係なく、自由に分割数を変えられるため、可視化処理を行うマシン環境に合わせた並列数を設定できるというメリットがあります。(データの分割数がサーバー数よりも多い場合でも処理は可能です。)

また、A)とB)のどちらの方法にも利用にあたっての制限があります。まず、A)の方法では、EnSightで扱える要素数および節点数が、1つのパートあたり約20億個という制限があるため、結合したデータの1つのパートの要素数および節点数が20億個以内でなければなりません。また、B)の方法では、EnSight 10.1でSOSによる並列分散処理をする場合には、分割された各データセットに全て同じパートが含まれている必要がある(パートの定義があれば、パートの情報は「空」でも構いません)という制限があるため、各分割領域に全てのパートが含まれるように、予め分割データを作成しておく必要があります。


次期バージョンのEnSight 10.2からは、分割された各データセットに全て同じパートが含まれている必要があるという制限はなくなります。分割されたデータセットに含まれるパートが、他のデータセットのパートと一致しなくてもSOSによる並列分散処理が可能になります。


A) 分割されたデータを1つに結合した後に再分割する方法

A-1) EnSightの「Partition101」を使用してデータを分割しなおす方法

以下の手順でOpenFOAMの並列計算結果を分割しなおし、その分割しなおしたデータをEnSigtで並列分散処理します。

 1.「reconstructPar」を使用して、OpenFOAMの分割されたデータを1つに結合します。
 2.「foamToEnSight」を使用して、OpenFOAMフォーマットのデータをEnSightのCaseフォーマットのデータに変換します。
 3. EnSightの「Partition101」を使用して、指定した数(XYZ方向)にデータを分割します。
 4. 分割しなおしたデータを読み込むためのSOS Caseファイルを作成します。

「Partition101」を使ってデータを分割すると、分割領域毎に、形状ファイル、変数ファイル、それらを読み込むためのCaseファイルが作成されます。手順4で作成するSOS Caseファイルは、分割領域毎に作成されるCaseファイルを読み込むためのファイルです。


「reconstructPar」と「foamToEnSight」の使い方については、OpenFOAMのマニュアルをご参照ください。また、「Partition101」を使ったデータの分割方法については、EnSightの日本語インストレーション・ガイドの「5.3.8 大規模データを扱う場合について」、SOS Caseファイルの書き方については、「5.3.6 SOS Caseファイル」をご覧ください。

A-2) EnSightの自動分割機能を使用する方法

以下の手順でOpenFOAMの並列計算結果をEnSightのCaseフォーマットのデータに変換し、そのCaseフォーマットのデータをEnSightで並列分散処理します。

 1.「reconstructPar」を使用して、OpenFOAMの分割されたデータを1つに結合します。
 2.「foamToEnSight」を使用して、OpenFOAMフォーマットのデータをEnSightのCaseフォーマットのデータに変換します。

この方法では、予めデータを分割しておく必要がありません。EnSightがデータを読み込む時に自動で領域を分割し、起動しているEnSightのサーバー・プログラムに、各種処理を割り振ります。この方法では、データを分割する手間は省けますが、1つのファイルにEnSightの各サーバー・プログラムが一斉にアクセスする場合は、I/Oに負荷がかかり、データの読み込みが遅くなる可能性があります。データファイルをコピーしておき、EnSightの各サーバー・プログラムが、それぞれ別のデータ・ファイルにアクセスするようにしておけば、この問題は発生しませんが、それでもA-1)の方が高速です。


「reconstructPar」と「foamToEnSight」の使い方については、OpenFOAMのマニュアルをご参照ください。

読み込むデータが複数ステップのデータの場合は、「自動分割機能」を使用する空間分割による並列処理ではなく、時間分割による並列処理も可能です。


B) OpenFOAMの並列計算時に使用された分割領域のまま処理する方法

B-1) OpenFOAMネイティブなフォーマットのままデータを読み込む方法

EnSight 10.1で、このOpenFOAMの並列計算結果を読み込むためには、データ・ファイルを一部加工する必要があります。以下の手順で、データ・ファイルの加工を行います。ただし、この方法では、隣り合う連続する領域について、領域が連続していることを示す情報がなくなるため、領域の境界部分で不連続になります。ここでは、4つの分割領域を持つデータを例にしています。4つの分割領域がある場合は、processor0, processor1, processor2, processor3の4つフォルダーが作成されます。

1. EnSightのサーバー・プログラムが個々の分割領域を独立して読み込めるように、4つのフォルダーを新たに作成します。 ここでは、domain1, domain2, domain3, domain4というフォルダーを作成することにします。

2. 作成した各フォルダーに、OpenFOAMの計算結果を出力したフォルダーにあるsystemフォルダーと、各分割領域のデータが出力されたprocessorフォルダーをコピーします。 ここでは、各processorフォルダーとsystemフォルダーを以下のように割り振ります。

  domain1フォルダー: processor0, system
  domain2フォルダー: processor1, system
  domain3フォルダー: processor2, system
  domain4フォルダー: processor3, system

3. domainフォルダーにコピーしたprocessorフォルダーの中のconstant\polyMeshフォルダーにあるboundaryファイルを編集します。 「procBoundary」で始まる項目を削除します(またはコメントアウト)。以下の例では、「/*」と「*/」を使ってコメントアウトしています。

この項目が削除されていなかった場合は、データ読み込み時に他のprocessorフォルダーのデータにアクセスしようとしてエラーになり、データを読み込むことができません。

FoamFile
{
   version 2.0;
   format ascii;
   class polyBoundaryMesh;
   location "constant/polyMesh";
   object boundary;
}
7
(
   ...
   /*
   procBoundary0to1
   {
      type processor;
      nFaces 1200;
      startFace 55200;
      myProcNo 0;
      neighbProcNo 1;
   }
   */

)

4. SOS Caseファイルを作成します。 以下のように、各サーバー・プログラムが読み込むデータのパス(data_path行)は、操作1と2で作成した各domainのフォルダーの中にあるsystemフォルダーを指定します。

FORMAT
type: master_server OpenFOAM

SERVERS
number of servers: 4

#Server 1
#-----------
machine id: localhost
casefile: controlDict
data_path: C:\OpenFOAMl\parallel\domain1\system
executable: ensight101_server

#Server 2
#-----------
machine id: localhost
casefile: controlDict
data_path: C:\OpenFOAMl\parallel\domain2\system
executable: ensight101_server

#Server 3
#-----------
machine id: localhost
casefile: controlDict
data_path: C:\OpenFOAMl\parallel\domain3\system
executable: ensight101_server

#Server 4
#-----------
machine id: localhost
casefile: controlDict
data_path: C:\OpenFOAMl\parallel\domain4\system
executable: ensight101_server

B-2) 分割領域毎にEnSightのCaseフォーマットデータを作成する方法

以下の手順でOpenFOAMの並列計算結果のデータを分割領域毎にEnSightのCaseフォーマットのデータに変換し、そのCaseフォーマットのデータをEnSightで並列分散処理します。

 1.「foamToEnSight」を使用して、processorフォルダー毎にOpenFOAMフォーマットのデータをEnSightのCaseフォーマットのデータに変換します。
 2. 作成された各Caseファイルを読み込むためのSOS Caseファイルを作成します。

この方法では、B-1)のようにファイルを編集する必要がありません。また、EnSightのCaseフォーマットにすることにより、読み込みがOpenFOAMフォーマットのデータを読み込む時よりも速くなります。ただし、foamToEnSightで変換されたEnSightのCaseフォーマットのデータは、隣り合う連続する領域について、領域が連続していることを示す要素が自動で作成されないため、領域の境界部分で不連続になります。


「foamToEnSight」の使い方については、OpenFOAMのマニュアルをご参照ください。また、SOS Caseファイルの書き方については、EnSightの日本語インストレーション・ガイドの「5.3.6 SOS Caseファイル」をご覧ください。