CfdOF on DEXCS2023

はじめに

DEXCSワークベンチ(DEXCS-WB)のハック元になったCfdOFであるが、GitHubでソースが公開されているだけで、その中に記してあるように公式の使い方ドキュメントはなく、Demosが同梱されているので、それを見て、わからなければフォーラムに投稿せよ。と、いかにものオープンCAEである。

そろそろDEXCS for OpenFOAM(DEXCS-OF)の更新を考える時期となってきているが、CfdOFの方も日々更新が進んでいるようである。その完成度次第によっては、CfdOFをDEXCSランチャーとしての搭載もあり得る、また継続してハックするにしても、最新情報(テクニック)があれば、それらも取り入れたいと思っている。

そこで改めて最新CfdOFを評価してみたいとなったが、ほぼ1年前にやった評価の方法もすっかり失念しており何度か回り道をした。改めて評価の方法を取り纏めておかないと、来年の今頃になってまた同じ轍を踏むことになるかと思っての顛末記である。

Table of Contents

評価方法

今後しばらく(といっても何年続くかわからないが)DEXCS-OFのFreeCADにCfdOFは同梱する予定なので、DEXCS-OFに同梱された時点のCfdOFで環境設定し、同梱Demosを実施し、その結果を取りまとめる。引き続き、CfdOFを最新バージョンに更新して同様の手順を実施し、更新版の評価とする。

なお、DEXCS-OF2023を製作するに際し、DEXCSランチャーとしてCfdOFの採用に至らなかったのは、主に以下の2点であるが、

  1. メッシュ設定パラメタのオプションが少ない
  2. ソルバー設定や境界条件種別のバリエーションが少ない

優先度は 1 >>2 である。第2項の不足部分は、TreeFoamのサブセットで補完できそう。

CfdOFの環境設定

DEXCS-OFに同梱したFreeCAD/Cfd-OFでは、そのままOpenFOAMやParaViewを使えるようになっているが、cfMeshとHISAというソルバーはインストールして使う必要がある。

FreeCADを起動して、❶「編集」⇒❷「設定」メニューから、❸「CfdOF」を選択して、❹と❺のインストールボタンを押すだけであるが、それぞれのインストールには数分かかる。

cfMeshについては、OpenFOAM-2306に同梱されるcfMeshが使える状態になっているので、必ずしもインストールが必要という訳ではないが、先のバージョンで、動作が異なるなどあったので、念の為といったところである。

インストールが完了すると、$HOME/OpenFOAM下に、モジュールが収納される。

同梱Demosの実行方法

CfdOFの同梱Demosは、右図に示すようにホームディレクトリ下、.localという隠しフォルダ下に収納されている。

Demosフォルダ下には、全部で6つのフォルダが存在するが、内容としてはFreeCADのマクロファイルが同梱されているだけである(簡単な説明文やFreeCADモデルが収納されたものもある)。

実行方法としては、Demosフォルダごと、別の場所にコピーして、コピーしたもので実行することを推奨される。

マクロ実行

同梱Demosは全て同梱のマクロを実行すれば、モデル形状と解析コンテナがセットされた状態になる。

❶「マクロ」⇒❷「マクロ」にて「マクロの実行」ダイヤログが現れる。ここで❸「…」ボタンを押して、マクロの収納場所を選択し直して❹所定のデモフォルダ(本例ではDuct)として、収納されたマクロを選択し、❻「実行」する。マクロが1つしかないケースではそれを選べば良いし、本例のように複数ある場合には「00-RunAll…」を選択すれば良い(逐次確認したければ「01-…」の順で選択せよということのようだ)。

OutputPath変更

このままメッシュ作成⇒計算実行と進めることもできるが、その前にOutputPath変更を強く推奨する。そうしないと、別のDemoケースを実行した時に、結果が書き替えられてしまう(結果を残せない)。

❶解析コンテナ(CfdAnalysis)を選択して、プロパティの「Output Path」を選択して右端に現れる❷「…」ボタンを押すとフォルダ選択画面が現れるので、❸所定の収納ディレクトリになるよう変更しておく。

念の為、この段階でファイル保存しておくのが良いだろう。ファイル名は何でも良い。

メッシュ作成

メッシュコンテナは(メッシュ対象領域の名前)_Meshという名前(本例では、Fusion_Mesh)で作られている。

❶「Fusion_Mesh」をダブルクリックすると、コンボビューが「タスク」画面にきりかわるので、❷「Write mesh case」ボタンを押して、❸「Run mesher」ボタンが使えるようになったらこれを押せばメッシュ作成の計算が始まる。メッシュが出来たら❹「Paraview」ボタンが使えるようになるので、Paraviewでのメッシュ確認し、問題無ければ❺「閉じる」ボタンを押して完了である。

デフォルトパラメタで実行する場合には問題無いはずであるが、メッシュパラメタ変更をすればその限りではないので、「Check mesh」ボタン等も使って確認されたい。このあたりの使い方はDEXCS-WBとほとんど同じである(内部処理は異なる)。

計算実行

計算実行も、DEXCS-WBと同じで、ソルバーコンテナ(CFdSolver)をダブルクリック、もしくはCfdOFのツールバーの「Solver job control」ボタンを押せば良い。

但し、デフォルトではコア数「4」の並列計算となるので、使用計算環境のコア数が不足する場合には、ソルバーコンテナのプロパティ中、❷の「Parallel Cores」の値を変更する必要がある(4より多ければ増やしても良い)。

ソルバーコンテナをダブルクリックすると、タスク画面に切り替わって、❸「Write」ボタンを押して❹「Run」ボタンが使えるようになったら、これを押して計算を開始する。計算が開始すれば、❺に示すような初期残渣(Residuals)グラフが表示され、計算の進行とともにこのグラフが更新される。デモケースによっては、Probeなどポスト処理データも別画面に同時進行で表示してくれる。

定常計算では、Residualsが10e-3以下になったら、収束しない場合や、非定常計算の場合は所定の打ち切り時間になったら計算終了する。このあたりの条件も、ソルバーコンテナのプロパティで変更可能になっている。

❻「Paraview」ボタンも計算開始すれば使えるようになる。

Demosの概要と実行結果

デモケースは全部で7つある。それぞれのケースにつき、概要(モデル外観、解析コンテナ一覧、解析内容)と、メッシュ・計算時間情報、計算結果(残渣グラフやParaView可視化図)など掲載しておく。

使用した計算環境は、

  • CPU:インテル® Core™ i9-11900K(8コア|3.5GHz)
  • メモリ:64GB
  • OS:ubuntu22.04

上に構築したDEXCS2023のVMplayer(右記スペックの)仮想マシンにて実行した。

 

UAV

グライダー周りの非圧縮定常流れということで、モデルはやや複雑だが、CfdOFの設定内容としてはもっともベーシックなコンテナだけで構成されている。

メッシュはデフォルトでcfMeshとなっていたが、snappyHexMeshに変更して実行することもできた。但し、メッシュ領域の内部点指定は、マニュアル指定する必要があった。

 

Npoints Ncells ExeTime ClockTime
361

Duct

直角に曲がるダクト内の非圧縮定常流れ(simpleFoam)解析。

こちらは上のベーシックチュートリアル(UAV)に比べて、モデルは簡単な形状だが、「PorousZone」コンテナ(多孔体)と、透過型バッフル(rectangle)があって、これらの設定も出来るよ、といったところがポイントか。

メッシュはsnappyHexMeshで、cfMeshに変更してメッシュ作成もできるが、バッフル部分が解釈されない。

「PorousZone」コンテナによる多孔体モデルの実装は、計算実行前にtopoSetを自動実行してくれているようだ。

Npoints Ncells ExeTime ClockTime
2

Elbow

この形はよくお目にかかるエルボーで、これも非圧縮定常流れ(simpleFoam)計算だが、2次元計算であるという点で、メッシュの作成方法に一ひねりがある。

メッシュ作成のデフォルトはcfMeshであったが、DEXCS-WBとは異なって、一旦3次元でメッシュを作成し、端面をextrudeするという、snappyHexMeshでやっている方法を、細分化コンテナでそのまま自動化しているようだ。したがって、デフォルトのcfMeshをsnappyHexMeshに変更しても問題なく使える。

レイヤー指定も試みたところ、出来ないことはなかったが、このCADモデルを使う限り、境界の全周(入口、出口を含む)となってしまう。

Npoints Ncells ExeTime ClockTime
1

ViscousTubeBundle

これも2次元の非圧縮定常流れ計算であるが、先の例(Elbow)で、レイヤーを局所的に作成することが出来なかったのが、本例ではそれが出来ている。

Npoints Ncells ExeTime ClockTime
8

LESStep

吾輩は猫である。名前はまだない。どこで生れたか頓と見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。

Npoints Ncells ExeTime ClockTime
26

DamBreak3D

おなじみのダムブレーク問題を3次元で実行する。ソルバーはinterFoamで、ダムの初期の水の充填状態(initWater)が形状定義してあり、initialisationZoneコンテナにて、initWaterを指定して、setFieldsを自動実行してくれるという仕組みである。

その他、DynamicMeshInterfaceRefinement というコンテナは、計算実行中の気液界面のメッシュの細分化パラメタを設定している。

本ケースは出力データが多くあって約22GBのディスクスペースを消費する点には要注意。

Npoints Ncells ExeTime ClockTime

Projectile

projectile(発射体)の高マッハ数流れ解析で、CfdOFの環境設定でインストールしたhisaFoamが使われる。メッシュはデフォルトでcfMeshとなっているが、snappyHexMeshでも動きそう。

MeshRefinementiが発射体本体、MeshRefinement001が4枚の尾翼の細分化設定で、どちらも細分化レベルはレイヤー数は10。MeshRefinementi002〜005は円柱状の細分化領域指定で、サイズと細分化指定が段階的に異なっている。

Npoints Ncells ExeTime ClockTime

CfdOF更新方法

CfdOFを更新するには、GitHubからソースコードをダウンロードして、.local/share/FreeCAD/Mod/CfdOF の内容をそのまま入れ替えるだけで良い。

CfdOF新旧ソースコード比較

本稿の執筆時点における最新版は5月上旬にアップデートされていた。但しGitHubにて公開されているCfdOFのソースコードは最新版しかダウンロードできないようで、更新内容を知るにはCommit文を足掛かりに古いコードとの差分で見るしか手立てがなさそうであった。

そこで、DEXCS-OFに同梱のkdiff3を使って、最新版ソースコードと、DEXCS2023に同梱されたもの(2023年10月頃?に入手したもの)について調べた結果を以下に掲載しておく。

DEXCS2023をリリースしてから、半年以上が経過しているが、その間にも多くのモジュールでコード変更されていることがわかる。

最新版の評価結果

Demosケースについて

ケースの数に増減はなく、モデル形状、解析コンテナの外観に変化はなかったが、damBrake3D と、Projectileについては結果が異なっていた。

Projectileについて、当初デフォルト設定でそのまま動かした所、最終ステップまで計算が進行したので、何か改善箇所があったのかと思って調べた。⇒レイヤー指定する細分化コンテナにおいて、細分化対象が定義されていなかった。つまり細分化対象にレイヤーが作成されていなかったから発散しなかったというだけで、細分化対象を指定したら、やはり発散した。

damBrale3Dについては、そもそも計算が動かなくなってしまっていた。

その他のケースについては、ほとんど同じ結果が得られている。また、kdiff3で調べて見つかった相違点は、解説文やモデルのスナップ図等が追加されたというだけで、マクロファイルに変更があったのは、Projectile だけであった。

ソースコード変化を概観しての雑感

先に示したkdiff3による比較では、変化の内容についてまではわからない。変化したそれぞれのファイルについて、その変化内容を概観してみた。その結果、明らかにMeshフォルダ内のスクリプトの変化と、Solverフォルダ内のそれとでは、変化内容に差があり、Solver関連スクリプトの変化の内容が多くあった。

まとめ

  • DEXCS2023に同梱したCfdOFの計算環境設定とその同梱Demosケースの実行方法について取り纏めた。
  • 7つのDemosケースにつき、概要(解析内容、モデル、解析コンテナ、計算結果など)を取り纏めた。
  • 最新版CfdOFについても評価した。
    • Sover関連コードの改変が多くあり、多分、それが原因でデモケースのdamBreak3Dが動作しなくなっていた
    • Mesh関連コードの実質的な変化はほとんど無かった
Share

コメントする

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

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