CfdOF on DEXCS2025 prototype

はじめに

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

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

そこで改めて最新CfdOFを評価してみたいとなったが、ほぼ1年前にやった評価記事が残っているので、その記事に対する加筆修正版として公開するとともに、今回はDEXCS2025のプロトタイプ版を使って、CfdOFを最新版に更新し、DEXCS-OFのCfdOF関連の更新情報も併せて取りまとめた。

Table of Contents

評価方法

今後しばらく(といっても何年続くかわからないが)DEXCS-OFのFreeCADにCfdOFは同梱する予定なので、DEXCS-OFに同梱された時点のCfdOFで環境設定し、同梱Demosを実施し、その結果を取りまとめる。

また、昨年はDEXCS標準チュートリアル問題について別記事で取りまとめていたが、今回は本記事の中で併せて評価する。

 

CfdOF更新方法

これまで、CfdOFを更新するには、GitHubからソースコードをダウンロードして、.local/share/FreeCAD/Mod/CfdOF の内容をそのまま入れ替えるだけで良いとしてきたが、今回はFreeCADのワークベンチの標準的な作法に則った(下図)。

しかしながら、通信状況の問題なのか、すんなりといかない。確認のため何度もやり直してみたが、うまく行く場合もあったが、ほとんどの場合インストールに失敗して以下のエラーメッセージとなる。

そこで、方針を変えて、このエラーメッセージのコマンド実行部分(青色反転部分)をクリップボードにコピー、端末を起動して、クリップボードをペーストしてコマンド実行すれば、すんなりインストールできることを確認した。

 

				
					$ git clone --recurse-submodules https://github.com/jaheyns/CfdOF /home/dexcs/.local/share/FreeCAD/Mod/CfdOF
				
			

但し、コピー先(本例では、/home/dexcs/.local/share/FreeCAD/Mod/)に同名のフォルダがあると、以下のようにエラーとなるので、古いバージョンのフォルダは削除しておく必要があった。

				
					
fatal: destination path '/home/dexcs/.local/share/FreeCAD/Mod/CfdOF' already exists and is not an empty directory.

				
			

Plotモジュールについても、以下同様に更新した。

				
					$ git clone --recurse-submodules https://github.com/FreeCAD/freecad.plot /home/dexcs/.local/share/FreeCAD/Mod/Plot
				
			

因みに、CfdOFのバージョン名は、前回v1.27.10、今回はv1.31.4 となる。

CfdOFの環境設定

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

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

なお、前バージョン(DEXCS2024に同梱したもの)との違いとして、❽のDockerコンテナも利用できるとあるが、これについては検証していない。

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

 

cfMeshについては、DEXCS2025のプロトタイプ版の時点ではインストールされていないので、本インストールで作成したモジュールを、OpenFOAMの標準モジュールに追加して利用できるようにしている(上図右側)。

同梱Demosの実行方法

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

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

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

 

マクロ実行

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

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

OutputPath変更

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

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

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

メッシュ作成

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

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

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

計算実行

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

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

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

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

❻「Paraview」ボタンも計算開始すれば使えるようになる。但し、ParaView起動時に以下の警告メッセージが出る。

無視(右上の「x」ボタンをクリック)して先へ進むと、下図のようになって、フィールド変数がU(?)とされ、節点情報が存在しないが、セル情報は存在するので、これらに変更して可視化はできる。

ParaViewはVer.6.0.0とメジャーバージョンアップしており、デフォルトのカラースケールモードが変更するなど大きく仕様が変更されており、この節点情報がデフォルト表示されないというのも、その一つのようであった(節点情報を表示させるにはフィルター「Cell data to Point data」を使えということのようだ)。

起動時の警告メッセージが鬱陶しいようであれば、以下のファイル

$HOME/.local/share/FreeCAD/Mod/CfdOF/Data/Templates/case/pvScript.py

の36行目

				
					cleantoGrid1Display.ColorArrayName = ['POINTS', 'U']
				
			

を、以下のように変更すれば良い。

				
					cleantoGrid1Display.ColorArrayName = ['CELLS', 'U']
				
			

DEXCS2025の正式リリースまでには、CfdOF本家でも相応の変更がされると思うが、間に合わないようであれば、DEXCS2025は本変更にてリリースする予定。

Demosの概要と実行結果

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

使用した計算環境は、

  • CPU:インテル® Core™ i9-14900K(P-8コア|3.2GHz / E-16コア 2.4GH)
  • メモリ:128GB
  • OS:ubuntu24.04

上に構築したDEXCS2025プロトタイプのVMplayer(右記スペックの)仮想マシンにて実行した。

BatteryCooling

前のバージョンにはなかったもので、本邦初公開となるものである。モデル名が「tesla-4680-battery-cooling」となっており、本物のテスラ製品モデルなのかもしれないが、定かではない。

前バージョンまでのDemoケースhisaFoamを使うもの以外全て等温問題であったのに対して、本例は温度も計算している(ソルバーは、buoyantSimpleFoam)。

メッシュのデフォルトはsnappyHexMeshとなっていたが、cfMeshでもできそう。

Npoints Ncells ExeTime ClockTime
3,772,249
3,300,544
10,974.48
10,986

UAV

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

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

 

Npoints Ncells ExeTime ClockTime
977,477
854,844
195.73
195

Duct

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

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

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

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

Npoints Ncells ExeTime ClockTime
12,960
10,478
0.71
1

Elbow

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

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

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

Npoints Ncells ExeTime ClockTime
5850
2777
0.33

ViscousTubeBundle

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

Npoints Ncells ExeTime ClockTime
31,702
15,138
2.3
3

LESStep

いわゆるバックステップ流れであるが、メッシュをgmshで作成し、plyhedral化しているところがセールスポイントか。但しレイヤーは作成できないところと、粗密調整も出来ないみたいなところは残念である。

解析はLES計算の設定となっていたが、計算はわずか1秒間の助走部流れができるまでで終了する。計算時間を延長した時の結果がどうなるのか気に懸かるところであるが、そこまでは検証していない。

Npoints Ncells ExeTime ClockTime
692,255
115,370
15.87
16

DamBreak3D

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

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

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

Npoints Ncells ExeTime ClockTime
139211
129069
3282.76
3728

Projectile

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

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

先の評価記事では、250ステップあたりで発散していたが、今回(&DEXCS2024でも)は大丈夫であった。

Npoints Ncells ExeTime ClockTime
761,130
712,301
5,372.23
5,510

CfdOF新旧ソースコード比較

 

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

そこで、DEXCS-OFに同梱のkdiff3を使って、最新版(v1.31.4)ソースコードと、DEXCS2024に同梱されたもの(v1.27.10)について調べた結果を右に掲載しておく。

この1年間で多くのモジュールでコード変更されていることがわかる。

最新版の評価結果

何はともあれ、メニューが日本語化されているところが何とも嬉しい。

Demosケースについて

ケースの数が1つ増えたことと、数年前までは動作がおかしいケースもあったが、今回は全てのケースでちゃんと動作することが確認できた。

またこれまでのOpenFOAMの標準ソルバーを使う(projectileのhisaFoamを除く)問題では全て等温問題ケースであったが、非等温問題も取り扱えるようになったということのようだ。

Dexcs標準チュートリアル問題について

基本的に先の記事に示した通りの方法で実行することが出来た。本記事中で詳細手順は説明しないが、DEXCS2025の同梱資料として取りまとめていく予定である。

まとめ

  • DEXCS2025に同梱予定のCfdOFの計算環境設定と、その同梱Demosケースの実行方法について取り纏めた。
  • 8つのDemosケースにつき、概要(解析内容、モデル、解析コンテナ、計算結果など)を取り纏めた。
  • 最新版CfdOFについても評価した。
    • メニューが日本語化(国際化対応)されており、日本人には随分使いやすくなった。
    • 非等温ソルバー(buoyantSimpleFoam)も取り扱えるようになった。
  • CfdOFをDEXCS標準ツールとして採用に向けてのゴールは近づいた感はあるが、まだいくつか注文点がある。
    • GUIで設定できない項目が多くある。これを「編集」⇒ファイルマネージャーを使ってパラメタ変更するのは、初心者向けに難度大。
    • 上記でパラメタ変更した結果を再利用する仕組みが欲しい。
    • これらの課題をDEXCSツールバー(TreeFoamのサブセット)を使って解消できないだろうか?⇒DEXCS2026?
Facebook
X
LinkedIn

コメントする

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

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

上部へスクロール