OpenFOAM-v2506のAllrunの結果を公開した。総ケース数492(490)、使用ディスク容量:1028GB(約1TB)、総計算時間:約20日(20日)であった。かっこ()内数字はv2412のもの。
計算開始:2025年7月8日9時5分 / 計算終了:2025年7月28日18時39分
Table of Contents
ケースサマリー
基本的に、先の記事に記した方法で、ほぼログ解析まで問題なく実行できた。実行エラーしたケース、残された手作業項目等についても、簡単に取り纏めておく。
新規追加されたケース(v2412比)
並列数が16以上のケース
- IO/cavity_parProfiling 20->14
- incompressible/adjointOptimisationFoam/sensitivityMaps/motorBike 20->16
- incompressible/adjointOptimisationFoam/topologyOptimisation/monoFluidAero/laminar/3DBox/losses 60->16
- incompressible/adjointOptimisationFoam/topologyOptimisation/monoFluidAero/laminar/3DBox/losses-mass 60->16-
- incompressible/adjointOptimisationFoam/topologyOptimisation/monoFluidAero/laminar/3DBox/losses-mass-uniformity 60->16
- incompressible/adjointOptimisationFoam/topologyOptimisation/monoFluidAero/laminar/3DBox/losses-mass-uniformity-SQP 60->16
- incompressible/adjointOptimisationFoam/topologyOptimisation/monoFluidAero/laminar/3DBox/losses-mass-uniformity-SQP-extraVars 60->16
- incompressible/pimpleFoam/LES/NACA4412 16(1)
- incompressible/pimpleFoam/LES/planeChannel 36->15
- incompressible/pimpleFoam/LES/periodicHill 16
- incompressible/pimpleFoam/LES/wallMountedHump 16
もっと速く!
これらのケースにはAllrunは含まれないので、普通にtutorialsケーストップレベルのAllrunを実行すると単体実行されてしまう。しかし、decomposedParDictが同梱されているので、foamRunTutorial コマンドで実行すると並列計算されることになり、本来は並列計算を想定したケースと考えた方が良さそうである。
そこでこれらのケースには並列計算用のAllrunを同梱して実施している。
同様のケースは他にもあるが、総計算時間に対する寄与度の大きいこれらのケースを対象にしたということで、今後増えるかもしれない。
実行エラーしたケース
ログファイル(testLoopReport, logs)中に”ERROR”の出力があったもの
- lagrangian/reactingParcelFoam/verticalChannelLTS(注1)
- mesh/snappyHexMesh/motorBike_leakDetection(注2)
- mesh/snappyHexMesh/rotated_block(注1)
“ERROR”出力は無かったが、計算が発散終了していたもの(v2412以前でも同様)
- combustion/PDRFoam/flamePropagationWithObstacles
- mesh/foamyHexMesh/flange
- mesh/foamyHexMesh/mixerVessel
v2412ではエラーだったのが解消された
- multiphase/overCompressibleInterDyMFoam/compressibleTwoSimpleRotors
- multiphase/reactingMultiphaseEulerFoam/laminar/mixerVessel2D
(注1)Allrunでは正常に計算できていた(ERRORはAllTest)
(注2)ERRORが出ること自体は問題無い
手作業項目
- Allrun実行前
- チュートリアルリスト作成
- プロセッサ数が不足するケースでのdecomposeParDict変更
- AllTest実行し、ERRORケース確認
- ログ解析スクリプト実行前
- incompressible/pimpleFoam?laminar/cylinder2D ケースの、log.blockMesh.main をlog.blockMesh に変更
- ログ解析スクリプト実行後
- ケース名変更
- combustion/XiFoam/RAS⇒combustion/XiFoam/RAS/moriyoshiHomogeneous
- compressible/sonicLiquidFoam⇒compressible/sonicLiquidFoam/decompositionTank
- ディスクスペースの重複カウント修正
- IO/fileHandler
- compressible/rhoPimpleFoam/laminar/helmholtzResonance
- ケース名変更
データベースのグラフ化例
別記事で記した通り、上記データベース化されたデータはバックボーン(phpMyAdmin)で動的にグラフ化できるようになっているが、現在のところ閲覧者が動的にグラフを作成する仕組みまでは出来ていない。HP管理者が、本結果(OpenFOAM-v2506)を中心に様々な観点で作成したグラフをいくつか紹介しておく。
チュートリアル数の推移

使用したSQL構文
ディスク使用量の推移

使用したSQL構文
所要計算時間の推移

使用したSQL構文
カテゴリ別チュートリアル数比較(v2412比)
使用したSQL構文
カテゴリ別ディスク使用量の比較(v2412比)

使用したSQL構文
カテゴリ別計算時間の比較(v2412比)
個別ケース毎計算時間比較(v2412比)
個別ケース毎ディスク使用量比較(v2412比)
挙動が変化したケース(v2412比)
上図で、変化のなかったライン(x1)から大きく乖離したケースについて番号付きの角矢印記号を付しておいた。以下の項目中の行頭()中の数字はその番号に併せてある。また、赤字で記したものは、計算時間が短くなったもので、それ以外は長くなっている。
計算が正常終了(v2412では異常終了)
計算が異常終了
実行時並列数が異なる
- (20)IO/cavity_parProfiling (設定ミス)
同上、Allrun変更(単体計算⇒4並列計算)
clockTime異常(exeTimeは変化なし)
- (6)multiphase/interFoam/laminar/waves/mangroveInteraction
- (9)multiphase/interFoam laminar/waves/cnoidal
- (11)multiphase/interFoam/laminar/waves/stokesV
- (12)multiphase/interFoam/laminar/waves/stokesI
- (14)multiphase/interIsoFoam/iobasin
並列数の設定ミス
その他原因不明
- (1)incompressible/pimpleFoam/LES/planeChannel
- (3)discreteMethods/dsmcFoam/supersonicCorner
- (4)incompressible/lumpedPointMotion/bridge
- (5)multiphase/overCompressibleInterDyMFoam/compressibleTwoSimpleRotors
- (10)incompressible/adjointOptimisationFoam/topologyOptimisation/monoFluidAero/turbulent/1_Inlet_2_Outlet/levelSet/R_20x_NB_01
- (13)multiphase/interFoam/laminar/oscillatingBox
- (15)incompressible/pimpleFoam/RAS/oscillatingInletACMI2D
- (16)mesh/foamyHexMesh/flange
後のまつり(データ整理してからわかった事)
今回の計算サーバーはコア数が16であるので、並列数「16」以下となるようsystem/decomposeParDict を変更して実行したが、一部に設定ミスがあったので、次回の参考とすべく、ここに記しておく(v2412の記事にも記してあったが、またやらかしてしまった)。
IO/cavity_partProfiling
デフォルトでは、decomposeParDict が以下に示すようにnumberOfSubdomains 「20」( Np=20 )となっており、これを 「8」 として実行したが、エラー終了してしまった。
numberOfSubdomains 20;
method scotch;
coeffs
{
// Divide into 20/10=2 nodes
domains (10);
// Inside a node the communication weight is 1% of that inbetween nodes
domainWeights (0.01);
}
method が scotch となっていたので、この numberOfDomains 数字だけを変えれば良いだろうと早とちりした。よく見れば、その下の coeffs のブロックも書き換えが必要であった。
incompressible/adjointOptimisationFoam/sensitivityMaps/motorBike
iincompressible/adjointOptimisationFoam/shapeOptimisation/motorBike
上記2つのケースは、デフォルトで並列数「20」の計算になっているが、これを見落とした。理由は、多並列計算ケースを抽出するのに、decomposeParDict をテキストサーチしていたのだが、これらのケースは、decomposeParDict でなく、decomposeParDict.20 というファイルで並列数が指定されていた為。
今回、上のケースは修正できていたが、下のケースを忘れていた
もっと速く!
上記ケースは、decomposeParDict で16が指定されているが、同梱のAllrunでは単体計算することになる。一方、Allrun-parallelも同梱されており、こちらを使えば並列計算となり、1時間以上の短縮は見込まれる。
その他気付いた点
foamyHexMesh
foamyHexMesh は永らくの間、開発が中断されていたと思われていたのが、v2412の記事で、わずかであるが変化があった…と記したが、今回は元通り(まともに使えない)に戻っている。計算システム依存性があったということかもしれない。
補足(SQL文、備忘録)
SQL-1
select `ver_name` version,
count(*) postcount,
sum(`clockTime`)/3600 clockHr,
case when exe_system = 4 then 0.5* sum(`diskUsage`)/1000000
else sum(`diskUsage`)/1000000
end as du,
sum(`clockTime`)/3600 ,
`name` exeSys,
`release_date`
from `wp_of_tutorials`
JOIN wp_of_ver ON wp_of_tutorials.of_ver = wp_of_ver.id
JOIN wp_of_exe_system ON wp_of_tutorials.exe_system=wp_of_exe_system.id
group by `exe_system`, `of_ver`
order by `release_date`
SQL-4
select `ver_name` version,
category,
count(*) postcount,
sum(`diskUsage`)/1000,
sum(`clockTime`)/3600 ,
`name` exeSys,
`release_date`,
case when exe_system = 4 then 0.5* sum(`diskUsage`)/1000000
else sum(`diskUsage`)/1000000
end as du
from `wp_of_tutorials`
JOIN wp_of_ver ON wp_of_tutorials.of_ver = wp_of_ver.id
JOIN wp_of_exe_system ON wp_of_tutorials.exe_system=wp_of_exe_system.id
where wp_of_ver.id in (33, 34)
group by `exe_system`, `of_ver` ,`category`
order by `release_date`
SQL-5
DROP TABLE IF EXISTS of_temp;
create table of_temp as
with old_data
as( select category as o_category, solver as o_solver, model as o_model, caseName as o_caseName,diskUsage as o_diskUsage ,exeTime as o_exeTime ,clockTime as o_clockTime from `wp_of_tutorials` where of_ver in (33) and exe_system in (8))
select new.category, new.solver, new.model, new.caseName, new.diskUsage, old.o_diskUsage, new.exeTime, old.o_exeTime , new.clockTime, old.o_clockTime
from
wp_of_tutorials as new
inner join old_data old
on new.category = old.o_category
and new.solver = old.o_solver
and new.model = old.o_model
and new.caseName = old.o_caseName
where new.of_ver in (34)
order by new.category, new.solver, new.model, new.caseName
;
select category, solver, model, caseName, diskUsage/1000, o_diskUsage/1000, exeTime, o_exeTime , clockTime, o_clockTime from of_temp
where clockTime > 0;
SQL-6
DROP TABLE IF EXISTS of_temp;
create table of_temp as
with old_data
as( select category as o_category, solver as o_solver, model as o_model, caseName as o_caseName,diskUsage as o_diskUsage ,exeTime as o_exeTime ,clockTime as o_clockTime from `wp_of_tutorials` where of_ver in (33) and exe_system in (8))
select new.category, new.solver, new.model, new.caseName, new.diskUsage, old.o_diskUsage, new.exeTime, old.o_exeTime , new.clockTime, old.o_clockTime
from
wp_of_tutorials as new
inner join old_data old
on new.category = old.o_category
and new.solver = old.o_solver
and new.model = old.o_model
and new.caseName = old.o_caseName
where new.of_ver in (34)
order by new.category, new.solver, new.model, new.caseName
;
select category, solver, model, caseName, diskUsage/1000, o_diskUsage/1000, exeTime, o_exeTime , clockTime, o_clockTime from of_temp
where diskUsage > 0;








