HELYX-OS on DEXCS2023

はじめに

DEXCS2022以降、isoイメージファイルのサイズ制限(従前は4GB以下であった)を気にしなくてよくなったので、色んなモジュールの復活同梱を検討中で、表題のHELYX-OSもその一つ。

結論から先に記すと、何はともあれDEXCS2023で動かないことには先に進めないのでと始めた検証作業で、検証を始めた当初はHELYX-OFは復活の見込み無しであった。しかし本記事を書きながら何度か動作検証していくうちに、当初には間違えていたり、気づかなかった方法が見つかるなどあって、次のバージョンには同梱しても良いかな・・・という気になってきている。

Table of Contents

インストール

HELYX-OSのダウンロードページからインストールプログラム(HELYX-OS-2.4.0-linux-x86_64.bin)をダウンロードして、インストール方法の説明ページにしたがって、進めるだけだが、途中で、

				
					Select components to install
1) HELYX-OS-GUI
2) HELYX-OS-GUI and Kernel
#?
				
			

という選択モードが現れるが、ここでは「1」を選ぶしかないようである。KernelというのはOpenFOAM-v4.1をインストールすることになるが、DEXCS2023のubuntu22.04(jammy)用のパッケージは存在しないからである。

起動方法

インストールしたフォルダへ移動し、

				
					./Engys/HELYX-OS/v2.4.0/HELYX-OS.sh
				
			

と打ち込めばよい。そうすると、HELYX-OSのGUI画面が立ち上がると共に、以下のメッセージダイヤログが現れる。

これは、Kernelがインストール出来ていなかったということであるが、後で既存のOpenFOAMをCore設定できるので、とりあえず「OK」ボタンを押して先に進める。

引き続きオープニング画面

が現れるので、「New」をクリック。

引き続き現れる「Create Case」ダイヤログ

もそのまま「OK」ボタンを押す。

(それぞれのパラメタの意味は自明と思われるので、必要に応じて変更しても構わない)

HELYX-OSのGUI画面が立ち上がったら、ここでようやく環境設定(上述のKernelがインストール出来ていなかった警告対策)に入る。

環境設定

❶「Edit」⇒「Preferences」を選択すると、「Preferences」ダイヤログ画面が現れるので、ブランクになっている部分を使用環境に合わせるだけで良い。❷「…」ボタンを押せば、フォルダまたはファイル選択ダイヤログが現れるので。DEXCS2023の所定インストール箇所❸、

  • Core Folder  ⇒ /lib/openfoam/openfoam2306
  • Paraview Executable  ⇒ /optparaview/bin/paraview

となるようにすれば良い。

❹「OK」ボタンを押して環境設定完了。

なお、DEXCSに同梱された場合には、このステップは不要にできる予定。

HELYX-OSを一旦終了して、再度起動した時に、上述の警告ダイヤログが現れないことを確認されたい。また、オープニング画面では「New」でなく。「Open」として、最初に作成したケースを選択すれば、以下のような画面

になって立ち上がるはずである。

DEXCS標準チュートリアルをやってみた

DEXCSに同梱するからには、何はともあれDEXCS標準チュートリアルが計算できないことには先へ進めない。

STLファイル作成

HELYX-OSで取り扱う(インポートする)ことのできる形状データはSTL形式だけなので、DEXCS標準チュートリアル(FreeCADモデル)からSTLパーツとしてエクスポートする必要がある。

エクスポートする方法はいくつかあるが、一番簡単な方法は、FreeCADモデルを開いて、❶「export STL」ボタンを使うことである。その際、メッシュの細分化領域を指定するパーツ「regionBox」を非表示状態にしてエクスポートするのと、逆に「regionBox」だけを表示状態にしてエクスポートするというように、境界面を構成するパーツはまとめて出力してよいが、メッシュの細分化領域を指定するパーツは個別に出力する必要がある。少々面倒であるが、個別のパーツ毎にSTLエクスポートするでもよい。またエクスポートは、エクスポートしたいパーツだけを表示状態にして(その他のパーツは非表示状態にして)実行する点にも注意が必要である。

保存場所と名前を付けるよう促されるが、何でも良い(但し日本語やスペースは不可)。

STLファイルのインポート

モデルツリー上の❶「Geometry」を選択すると、中央のダイヤログ画面が替わって、❷「STL」ボランが使えるようになる。これをクリックして、前項で作成したSTLファイルを選択すれば良い。

そうすると、モデルツリーの「Geometry」の下に、❶に示すように、STLファイルの名前と、それを構成する複数のパーツ名がリストアップされる。

モデルツリー上で、パーツを選択すると、選択したパーツが右側の3D画面上では赤色で表示され、それ以外のパーツは半透明状態になってくれる。またパーツ名の前に表示されたチェックボックスのチェックを外せば、そのパーツだけが非表示になるという具合である。3D画面上でのモデルの回転や移動も、FreeCADとは異なりParaviewと同じ一般的なやり方なので、モデル確認での問題は無さそうである。

メッシュパラメタの設定

HELYX-OSで使用するメッシュツールはsnappyHexMesh(SHM)であり、最初に3D画面上に表示された水色の格子は、ベースメッシュとなるblockMeshのデフォルト設定での出来上がりイメージである。

STLファイルがセットされた状態で、明らかにこのままでは不可とわかるので、❶「BoundingBox」を選択し、中央の「Base Mesh」ダイヤログ画面で修正する、直交格子の具体的な位置や分割数を変更しても良いが、「Base Mesh Type」を❷「Automatic」に変更するのが手っ取り早い。

なお「Base Mesh Spacing [m]」は、DEXCSチュートリアルと同じにすべく、❶「0.28」とした。

次にSHM用に、パーツ毎の細分化指定を実施する。

モデルツリー上でパーツを選択すると、画面中央にそのパーツに対する設定ダイヤログが現れるので、細分化パラメタを指定する。❶「Dexcs」については❷に示すように「Level」を(4 4)とした。

さらに❸「layers」タブをクリックすれば、レイヤーパラメタの設定画面に替わり、ここでもレイヤー数を❹「3」に変更した。

細分化領域指定用の❶「regionBox」を選択すると、画面中央下半面の「Volumetric」指定が使えるようになるので,❷の🔻をクリックして❸「inside」を選択。細分化レベルとして❹「2」とした。

その他、エッジ指定も出来るが、エッジデータを作るには、対象オブジェクトを❶選択して右クリックメニューから❷「Extruct」を選択する。そうすると、輪郭線作成のオプションメニューが現れる。必要に応じてオプションを変更することになるが、ほとんどの場合はそのまま「Save」をクリックすればよさそうである。

先の操作により、「Lines」オブジェクトが作成されるので、これに対する細分化レベルを指定する。「Dexcs」に対しては、❶「4」を指定した。

「walls」オブジェクトに対しても同様に❶エッジ作成するが、こちらは細分化指定はしていない(Levelは「0」)。

最後に❶「Material Point」を選択すると、3D画面上に赤い球体が表示されるので、マウスでこれを❷選択して、メッシュを作成したい領域の内部点になるよう移動させる。

メッシュ作成

メッシュ作成は❶「Create」をクリックすれば直ちに❷端末画面が立ち上がって、計算が始まり実行中の計算ログが表示され、これまでの設定で、間違いが無ければ計算の完了とともに、3D画面にメッシュ❹外観図が表示され、❸あたりのボタンで表示方法を変更することもできる。

またモデルツリー「Mesh」の下に。パッチリストが追加され、これを❶選択すると、選択したパッチだけが赤色表示される。チェックボックの使い方など、STLのモデルパーツの参照の仕方と同じである。

また、「Check」ボタンを押すと、画面中央の❸あたりに、メッシュ数情報も表示される。なお上図では、先のメッシュ作成時に現れた端末画面を手動で閉じた状態での表示となっている。

計算条件の設定

下図の❶「Case Setup」タグをクリックして計算条件の設定に進む。

計算モデル

画面中央のパネルで、❶「Steady」❷「Incompressible」を選択、「Turbulence model」では❸「Standard high-re Ke」を選択した。「Thermal」の❹「Energy」にチェックすれば、温度計算もできるようになるということであるが、ここではチェックしていない(DEXCS標準チュートリアル相当)。

流体特性

先の図で、モデルツリー上の❺「material」をクリックすると、以下の警告メッセージが現れるが、

構わず「OK」ボタンを押して進める。

デフォルトではair(空気)が設定され、具体的な物性値が❶の赤枠内に表示される。これらの数値を直接変更しても良いし、❸「Change material」をクリックしてデータベースから「air」以外のものを選択したり、カスタマイズもできるようだ。

ここでは、デフォルトをそのまま採用することとした。

境界条件

境界条件は、モデルツリーの「Boundary Conditions」の下に、作成したpatchの数(本例では4つ)のコンポーネントが出来ているので、これらを一つずつ適合すれば良い。ここでは選択アイテムや数値を、DEXCS標準チュートリアルの設定と同じになるよう適合している。

❶「(STLファイル名)_Dexcs」を選択すると、画面中央に、この境界条件が表示される。デフォルトでは、静止壁条件が組み込まれるので、これはこのままで良い。

因みに「wall」の部分を❷クリックするとプルダウンメニューが現れて、wallを含めて全部で8つの境界条件typeを選択使用できることがわかる。

❶「(STLファイル名)_inlet」は、「Patch Type」を❷「Patch」に変更する。そうすると、「velocity」についての設定変更ができるようになるので、❸「Fixed value」を選択、そのx方向の値を❹「10」とした。「Pressure」は、❺「Zero Gradient」を選択した。

さらに❻「Turbulence」タグをクリックして、乱流パラメタの設定では、❼「By Turb. intensity and Mixing Length」を選択、値はデフォルト値をそのまま使うとした。

❶「(STLファイル名)_outlet」も、「Patch Type」を❷「Patch」に変更する。「Velocity」は、❸「zeroGradient」とし、「Pressure」は❹「Fixed Value」で、値はデフォルト「0」。❺「Turbulence」タグの画面では、❻「Zero Gradient」を選択した。

❶「(STLファイル名)_walls」は、「Patch Type」はデフォルトの「Wall」のままとしたが、「Wall Type」を❷「Slip」とした。

計算制御パラメタ

systemフォルダ下に収納される計算制御パラメタもGUIを使って設定が可能であった。これらもDEXCS標準チュートリアルと同等になるよう適合した。

Numerical Schemes

❶「Numerical Schemes」をクリックすると、fvSchemesのパラメタの一部を選択変更できるようだ。

「Advection」は対流項(fvSchems 中の divSchemes 項)で、一般的に最も重要となる項目であるが、これは以下のプルダウンメニュー

によって、選択できるのは嬉しい。

デフォルトは「Bounded Linear Upwind – 2nd Order」となっていたが、「Upwind – 1st Order」に変更した。

Solver Settings

❶「Solver Setting」をクリックすると、fvSolutionsのパラメタの一部を選択変更できるようだ。

ここ❷では、Residual Control(収束条件)と Relaxation Factors(緩和係数)をDEXCS標準チュートリアルと合致するように変更した。

Runtime Controls

❶「Runtime Control」は、controlDictファイルの一部(計算出力関係)を変更できるようになっている。

ここ❷もDEXCSチュートリアルに合致させた。

Fields Initialization

❶「Fields Initialization」では、❷「Default」「 FixedValue」「 Potential Flow」 のどれかを選択できるようだ。Defaultが何なのかわわからないが、ここでは「Default」のままとしておいた。

計算実行

軽差実行は、❶「Solver」のタグ画面に切り替えて、❷「Run」ボタンを押すだけである。

計算が始まれば、❶端末画面が現れて計算ログが表示されると共に、❷「Residuals」のグラフが表示される。このグラフは、右側のチェックボックスで、フィールド変数ごとに取捨選択したり、特定のものを強調表示したりすることが出来て有り難い。

結果の可視化

上の図で、「」ボタンを押せば、Paraviewが立ち上がって可視化できるようになっているが、以下のメッセージが現れるのは鬱陶しい。

とりあえず無視(この画面を閉じる)とParaviewのブランク画面になる。

ここでCase Type を❶「Reconstructed Case」として❷「Apply」ボタンを押せば良い。

並列計算の結果で、領域分割境界まで表示されてしまっているが、先の画面で「Decomposed polyhedra」のチェックマークを外して「Apply」した後、「Filters」⇒「Clean to Grid」を適用すれば、領域分割境界も見えなくなる。あとは、DEXCSチュートリアルで見たのと同様の「StreamTracer」も使える(下図)。

以上、DEXCSチュートリアル問題を、計算パラメタとしては、ほとんどDEXCS標準チュートリアルのそれと合致させて実行した結果である。

同上パラメタスタディ

前節の説明で、計算パラメタがほとんどDEXCSチュートリアルと同じであると記したが、乱流条件は変更しなかった。

以下、乱流条件や、その他のパラメタを変更したスタディ結果を記しておく。

乱流条件

乱流条件を変更しなかったのは、DEXCSチュートリアルで指定している方法

  • turbulentIntensityKineticEnergyInlet
  • turbulentMixingLengthDissipationRateInlet

がオプションとして用意されていないと思い込んでいたからである。プルダウンメニューを調べたら、この方法もちゃんと使えた。

結果は、収束性が若干向上した。

メッシュオプション

snappyHexMeshDictについては、パラメタオプションが多くあるが、これらもGUIメニューで簡単に変更できるようになっている(下図参照)。

ここでは、デフォルトで作成した際の仮想風洞の外縁のエッジの欠損に対して、先の記事の知見が通用することも確認できた。最終的な計算結果の違いは、ほとんど無かった。

ついでながら、以下に先の記事のオプションリスト一覧表に、ここでのHELYX-OSの値も追加したリストを掲載しておく。

Castellated mesh controls

Keyword Value type CfdOF TreeFoam HELYX-OS
maxLocalCells
label
100000000
100000
100000
maxGlobalCells
label
2000000000
2000000
2000000
minRefinementCells
label
maxLoadUnbalance
scalar
0.1
0.1
nCellsBetweenLevels
label
3
1
1
features
dictionary
features.file
string
features.level
label
features levels
scalar label
refinementSurfaces
dictionary

refinementSurfaces.<geometryName>

dictionary

refinementSurfaces.<geometryName>.level

label

refinementSurfaces.<geometryName>.regions

dictionary
resolveFeatureAngle
scalar
30
gapLevelIncrement
gapLevelIncrement
label
30
planarAngle
scalar
30
refinementRegions
dictionary
limitRegions
dictionary
locationInMesh
point
locatiosnInMesh
llist of (point word)
allowFreeStandingZoneFaces
boolean
TRUE
TRUE
TRUE
faceZoneControls
dictionary
locationsOutsideMesh
list of points
((100 100 100))
handleSnapProblems
boolean
useTopologicalSnapDetection
boolean
interfaceRefine
boolean
nCellZoneErodeIter
label

snapControls

Keyword Value type CfdOF TreeFoam HELYX-OS
nSmoothPatch
label
3
3
3
nSmoothInternal
label
tolerance
scalar
1
2
2
nSolveIter
label
100
30
30
nRelaxIter
label
5
5
5
detectNearSurfaceSnap
boolean
nFeatureSnapIter
label
10
10
10
implicitFeatureSnap
boolean
TRUE
FALSE
FALSE
explicitFeatureSnap
boolean
FALSE
TRUE
TRUE
multiRegionFeatureSnap
boolean
FALSE
FALSE
nFaceSplitInterval
label
detectBaffles
boolean
releasePoints
boolean
stringFeatures
boolean
avoidDiagonal
boolean
concaveAngle
scalar
minAreaRatio
scalar
strictRegionSnap
boolean
baffleFeaturePoints
boolean

addLayersControls

Keyword Value type CfdOF TreeFoam HELYX-OS
relativeSizes
boolean
TRUE
TRUE
TRUE (注1)
nBufferCellsNoExtrude
label

0

0

0

nLayerIter
label
50
50
50(注2)
nRelaxedIter
label
additionalReporting
boolean
expansionRatio
scalar
1.0
1.0
1.0
finalLayerThickness
scalar
0.3
0.3
0.3
thickness
scalar
minThickness
scalar
0.1
0.1
0.25
layers
dictionary

layers.<patchName>

dictionary

layers.<patchName>.nSurfaceLayers

label

layers.<patchName>.expansionRatio

scalar

layers.<patchName>.finalLayerThickness

scalar

layers.<patchName>.firstLayerThickness

scalar

layers.<patchName>.thickness

scalar

layers.<patchName>.minThickness

scalar
nGrow
label

0

0

0

concaveAngle
scalar
featureAngle
scalar
120
90
130
mergePatchFacesAngle
scalar
maxFaceThicknessRatio
scalar
0.5
0.5
0.5
meshShrinker
word
solver
word
nSmoothSurfaceNormals
label
1
1
1
minMedialAxisAngle
scalar
90
90
90
maxThicknessToMedialRatio
scalar
0.3
0.3
0.3
nSmoothNormals
label
3
3
3
nSmoothThickness
label
10
10
10(注3)
nMedialAxisIter
label
nSmoothDisplacement
label
layerTerminationAngle
scalar
slipFeatureAngle
scalar
30
30
nRelaxedIter
label
3
5
20(注4)

注記(HELYX-OSでのGUIメニュー項目名)

  1. GUIメニューで変更不可
  2. Layer Additional Iterations
  3.  Smooth Layer Thickness
  4. Relaxed Layer  Iterations

Mesh quality controls

Keyword Value type CfdOF TreeFoam HELYX-OS
maxNonOrtho
scalar
65
65
65
maxBoundarySkewness
scalar
20
20
20
maxInternalSkewness
scalar
4
4
4
maxConcave
scalar
80
80
80
minVol
scalar
1e-13
1e-13
1e-13
minTetQuality
scalar
-1
1e-15
1e-15
minArea
scalar
-1
-1
-1
minTwist
scalar
0.01
0.02
0.02
minDeterminant
scalar
0.001
0.001
0.001
miniFaceWeight
scalar
0.05
0.05
0.05
minVolRatio
scalar
0.01
0.01
0.01
minTriangleTwist
scalar
-1
-1
-1
minVolCollapseRatio
scalar
minFaceFlatness
scalar
relaxed
dictionary
nSmoothScale
label
4
4
4
errorReduction
scalar
0.75
0.75
0.75

計算制御パラメタのデフォルト

fvSchemesをデフォルトの「Bounded Linear Upwind – 2nd Order」に戻して計算してみた。

収束解(収束条件0.001)に至らなかったが、流れ場はほぼ定常解と判断して良さそうな状態となっていた。

ポテンシャル流れによる初期化

初期条件で、「Potential Flow」のオプションがあったので使ってみた(下図参照)。但し、前項の「fvSchemes」は、「Upwind -1st Order」に戻してある。

実行結果は、下図の通り。収束性が大きく改善されている。

DEXCS-OFにおいても、古いバージョンでは、これ(Potential Flow)を使えるようにしていたが、いつのバージョンだったか、DEXCSではPyFoamを使った起動方法で実施しており、これがうまく起動できなかった事があり、以降組み込んでいない。やはり、この機能はあった方が良いということであろう。

評価

まだ十分に調査できたとは言えない状況であるが、現時点で感じている点について記しておく。

良かった点

冒頭に記したように、調査を開始したばかりの時点では、使えない・・・であったが、操作方法を忘れていたのが大きな理由であったが、操作方法や仕組みをそれなりに理解して使えるようになると、今でもちゃんと使える事がわかった。

  • 商用ソフトとほとんど同じ使い方ができる(simpleFoam以外は未確認だが・・・)。

これが10年近く前に作られたソフトであって、OSやOpenFOAMのバージョンが大きく変化しても、そのままちゃんと使えているということは感激物でもある。

問題点、課題

問題点は、長所の「商用ソフトと同じ」の影の部分で、パラメタをブラックボックス的に取り扱うしかないという点である。一応、GUIでのパラメタ設定に対して、パラメタファイルのどこが変更されたのかを調べる事はできるようになっているが、パラメタファイルを直接編集できない。正確に云うと、パラメタファイルを直接変更はできるが、実行ボタンの「Run」を押した時点で、GUIで設定した値に戻ってしまう、ということである。

あくまでHELYX-OSで指定できる範囲のパラメタ設定だけで仕事が出来れば良いというのであれば、それで良いのかもしれないが、本物の「商用ソフト」に比べると、出来ることが限定されてしまっている。OpenFOAMのv1606+以降の更新もないので、OpenFOAM2306で動いたとしても新機能は使えない。controlDictファイル中に、後処理用のfunctionブロックを追加したりすることも出来なくなっているので、これは問題である。

この問題に対しては、HELYX-OSをDEXCS-OFに同梱していた当初は、HELYX-OSでとりあえず動作するケースファイルを作成することを主眼として活用し、出来上がったケースファイルに対して、TreeFoamを使ってパラメタを追加したり、詳細なパラメタ設定できれば良いという考えで、TreeFoamからHELYX-OSを起動するインタフェースも用意されていたが、現在ではなくなてしまっている。

今回の調査においても、特に並列計算でセットアップしたケースに対して、TreeFoamからは、かろうじてParaViewによる結果確認が出来るだけであった。Reconstructionしてメッシュだけでも再利用できないかとか、これを初期化してパラメタ変更・・・という訳にはいかなかった。かろうじて単体計算でセットアップしたケースでは、出来ないこともなかったが・・・

 かような事情もあって、HELYX-OSの復活は無理か・・・とも思っていたが、ひょんな事から、並列計算でセットアップしたケースもReconstructionできることがわかった(下図)。

なんと、「Decompose」せよ!ということであった。基本的にこのメニューは並列計算ケースに対して、分割方法を設定するメニューで、新規作成時に設定した方法から変更する際に使うことを想定されているようだが、既に計算結果なりメッシュが作成できているケースでこれを実行すると、一旦ケースをReconstructして、しかる後Decomposeを実行しており、Reconstructionの結果も残ったままであることが分かった。

したがって、この「Dexompose」処理をした後であれば、HELYX-OSから離れてTreeFoamから処理できる・・・となる。但し、このままではcontrolDict中に、application指定が無いので、これは追加する必要がある。

まとめと今後

DEXCS2023において、HELYX-OSをインストールし、DEXCS標準チュートリアルで作成される形状ファイルを題材に動作確認した。

  • DEXCS標準チュートリアルで実施しているのとほぼ同等の内容(STLのインポートから、メッシュ細分化設定、ソルバー設定)のパラメタ設定を、商用ソフトで実施するのと同様の使い勝手で、スクラッチの状態から実現できることがわかった。これは初心者には嬉しい。
  •  但し、HELYX-OSだけで実施できる事は限られる。OpenFOAMv1606+以降の新機能が使えないことや、DEXCS標準チュートリアルで実施しているポスト処理が出来ないなど。
  •  HELYX-OSで作成、実行できたケースに対しては、ひと工夫加えることで、作成したメッシュだけを活用したり、TreeFoam上でパラメタ変更スタディ等が可能になることも判明した。
  • DEXCS2024には、とりあえず同梱しても良いかな・・・という方向に傾きつつあるが、もう少しsnppyHexMeshの使い方(特にマルチリージョンメッシュの作成)を確認し、その結果次第か。

追記(2024/7/7)

その後、マルチリージョンメッシュの作成検証を実施したところ、概ね問題なく作成できることはわかった。但し、「Decompose」処理がうまくできなかった。これはメッシュを作成しただけでの状態で実施したので致し方ないところであったが、色々調べた結果、メッシュだけを再構築するには、メッシュ作成スクリプトに以下の1行を追加するだけで良いことが判明した。

				
					reconstructParMesh -noFunctionObjects -case $CASE -constant 2>&1 | tee -a $LOG
				
			

具体的には、以下の手順にて実施する(❷の部分が追加の1行)。

また、STLデータの選択ダイヤログ(下図)では、❸「Geometry is in mm」にチェックすれば、mmを自動でmに変換してくれたり、❹の数値を直接変更して、平行移動、回展、スケール変更できるなど、至れり尽くせりであった。

Share

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください