foam-extend が約3年ぶりに更新されたの事、早速Allrunをやってみた。
総ケース数 275、総ClockTime 313時間、ディスク使用量 480GBであった(E.Mogura’s ServerRT)。
実は、foam-extend系については、これまでAllrunの記録が残っていない。3.0については実施した記憶は残っているが、4.1はそもそも実施していない。次の更新がいつになるかわからないが、Gitの更新情報によれば、Jasakさん、いまだ健在でご活躍、可能性はありそうだ。次に備えてAllrun記録の(省力)化に向けての要点を取り纏めておく。
Table of Contents
はじめに
そもそも、Jasakさんがほとんど一人でメンテしているようなプロジェクトなので、ESI版やFoundation版に比べると、チュートリアルケースそのものが作り込まれていない。その結果これまでESI版を題材に作成してきた拙作のログ解析システムでは処理しきれず、手作業を余儀なくされた箇所が多々あったので、まずはチュートリアルケースそのものの問題について記しておく。
なお、”問題”などと偉そうな書き方をしているが、あくまでログ解析の自動化処理という観点で配慮して頂きたいという意味であり、Allrunが動かないとか、その種の問題ではない点、お断りしておく(ESI版やFoundation版に比べて、途中で発散するケースもやや多いがその問題は別で、後述する)。
Allrunスクリプトに起因するケース名取得不具合
ESI版、Foundation版では、ケースファイルの一覧リストを取得するのに、
mesh/snappyHexMesh, foamyHexMesh, multiphase/cavitatingFoam/LES 下のAllrun
を削除(または別名に変更)すれば、独自のハックスクリプトAllrunPrintを使って、大凡一覧リストを作成できていたが、これに加えて、
compressible/rhoCentralFoam 下のAllrunも対象になる。加えて、
incompressible/icoFoam 下にもAllrunファイルが存在する(ESI版、Foundation版では存在しない)が、ここは手作業でケースファイル取得するしかなかった。
つまり、上図の下段2つのケース(ESI版、Foundation版)では、icoFoam/cavity 下にAllrunが収納されており、このスクリプトにより3つのケース(cavity, cvityClipped, cavityGrade)が実行されると共に、新たに2つのケース(cavityFine, cavityHighRe)が作成されるようになっている。したがてチュートリアルケースとしては、icoFoam/cavity を1つのケースとしてカウントするように集計することになり、elbow や、cavityMappingTest は別ケースとしてカウントされ、まずまず理にはかなっていよう。
一方、上段のextend版ケースでは、Allrunをそのまま使うと、ソルバー名(icoFoam)を名前とするケースファイルが一つカウントされるだけになってしまう。かといって、Allrunを削除(または改名)してAllprint(名前取得)すると、それぞれ個別にケースファイル名がカウントされるが、Allrun実行後に作成される2つのケースを別物としてカウントするのにも無理がある。
したがって、今回はAllrunをそのままにして、一旦1つのケースとして取り扱い、ログ解析は個別のケースについて実行できているので、ログ解析の実行後に、cavity関連の5つのケースをまとめて1つのケースになるよう集計方法を変更した。
ここは問題
加えて本スクリプト(/incompressible/icoFoam/Allrun)には1点、(本当の)問題があった。
mixingPlane/ 以下に3つのケースが存在するが、これらのケースに対する実行法が指定されていない。各ケースにはAllrunが収納されているので、全体のAllrunを実行した後に(実行されていないことに気づいた後で)個別に実行した。
チュートリアルケース名の手修正
ESI版、Foundation版においても、ログ解析スクリプトを実行した後においてケース名を変更するケースが存在した。
- combustion/XiFoam/RAS⇒combustion/XiFoam/RAS/moriyoshiHomogeneous
- compressible/sonicLiquidFoam⇒compressible/sonicLiquidFoam/decompositionTank
これに加えて、ソルバー名が不適切なものも含めて、以下多くあった。
- カテゴリimmersedBoundary, overset に含まれるケースは、ソルバー名が明示されない
- 加えて overset では、…Test というサブカテゴリともすべきフォルダ分類があり、これをどう取り扱うかが悩ましいが、model名として取り扱うことにした。
- multiphase/interFoam/laminar, multipase/interFoam/RAS フォルダ直下にAllrunが存在し、ケース名が、laminar, RAS となってしまい不適切⇒damBreak に変更, model名付け替え
system/controlDictの不全に起因する手作業
controlDictファイル中に、application 名を定義していないケースが多く存在した。
現在のログ解析システムはこの名前を読み取って相応のログファイル中に記された計算時間情報を取得している。したがって、これ(application)が定義されていないことには取得しようがなく、手作業で読み取るしかなかった。
- compressible/dbnsFoam/forwardStep
- compressible/dbnsFoam/shockTube
- compressible/dbnsTurbFoam/naca0012
- compressible/steadyCompressibleFoam/2bump
- compressible/steadyCompressibleFoam/transonicBump
- compressible/steadyCompressibleMRFFoam/simpleRotorStator
- compressible/steadyCompressibleSRFFoam/bentBlade
- compressible/steadyCompressibleSRFFoam/simpleBlade
- coupled/blockCoupledScalarTransportFoam/blockCoupledSwirlTest
- finiteArea/surfactantFoam/sphereTransport/sphereTransport
- heatTransfer/chtMultiRegionFoam/multiRegionHeater
- immersedBoundary/pimpleDyMFom/movingCylinderInChannelIco
- immersedBoundary/pimpleDyMFom/movingCylinderInChannelIcoFine
- incompressible/RichardsonFoam/oneDimensionalSoilTransport
incompressible/channelFoam/channel395 - incompressible/icoDyMSimpleFoam/movingConeTopo
- lagrangian/porousExplicitSourceReactingParcelFoam/verticalChannel
- mesh/cfMesh/ 以下全(14)ケース
- mesh/moveDynamicMesh/circCylinder3dHex
- mesh/moveDynamicMesh/movingCylinders
- multiSolver/multiSolverDemo/parTeeFitting2d
- multiphase/cavitatingFoam/ras/throttle
- multiphase/compressibleInterFoam/les/depthCharge2D
- multiphase/compressibleInterFoam/les/depthCharge3D
- overset/movingMeshTests/pimpleDyMOversetFoam/movingCylinderInChannelpimpleDyMOversetFoam
- solidMechanics/deprecatedTutorials/icoFsiFoam/flappingConsoleSmall
- solidMechanics/elasticThermalSolidFoam/hotCylinder
- surfaceTracking/bubbleInterTrackFoam/bubble2D_r0.75mm
- surfaceTracking/interTrackFoam/sloshing2D
controlDictファイル中のapplication 名は、無くとも(Allrun中で定義してあるので)実行に差し支えはない。extend版の次回がある時に事前にわかっているケースについて、その部分を追記するという手作業を踏むか、今回のように手作業で読み取るのが楽なのか?悩ましい判断である。Allrun中に定義してあるapplication名を取得する方法もやってやれない事は無さそうだが、extend版だけの為にこれをするのもなぁ・・・
checkMeshツールについて
メッシュの節点、要素数情報は、OpenFOAM標準のcheckMeshを実行し、そのログ情報から取得しているが、extend版のcheckMeshツールの出力が、ESI版やFoundation版とは異なっていた。
def getPointsAndCells(selectDir):
fileName = selectDir + "/checkMesh.log"
points = ""
cells = ""
if os.path.isfile(fileName) == True:
f=open(fileName)
for line in f.readlines():
lineList = line.split()
if len(lineList) >= 2:
#if lineList[0] == "points:":
if lineList[1] == "points:":
#points = lineList[1]
points = lineList[2]
if points[-1] == ";":
points = points[:-1]
if lineList[0] == "cells:":
cells = lineList[1]
if cells[-1] == ";":
cells = cells[:-1]
#break
f.close()
return [points,cells]
現在のESI版やFoundation版では、10, 12行目を使用しており、11, 13行目はコメントアウトしている。多分、古いバージョンでは上の方法でやっていたので、ソースがこの形で残っており、extend版でコメントマーク(#)を入れ替えただけである(つまり、extend版は古いものをそのまま使っている?)。
実行エラーケース
Alltestの全実行ログ(testLoopReport)から、抽出されたエラーケースは、
- incompressible/icoFoam/cavityGrade
- multiphase/interFoam/ras/damBreakFine
だけであったが、計算時間が異常に少ないケースのログを見直したところ、発散終了しているのがわかったケースとして、
- heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges
- immersedBoundary/simpleFoam/pitzDailyTurbulent
- immersedBoundary/pimpleDyMFom/refiningMovingCylinderInChannelTurbulent
- incompressible/MRFSimpleFoam/mixerVessel2D
- incompressible/channelFoam/channel395
- incompressible/icoFoam/cavityGrade
- incompressible/pimpleDyMFoam/mixerGgi3D
- multiphase/interFoam/ras/damBreak
- multiphase/interMixingFoam/laminar/damBreak
また、最後まで計算終了していたが、結果が異常であったケースとして、
- incompressible/pUCoupledFoam/backwardFacingStepTurbulent
- incompressible/pimpleDyMFoam/wingMotion
など、ESI版やFoundation版に比べると、明らかに異常ケースが多い。全部は調べきれていないので、他にもあるかもしれない。
旧バージョン(extend-4.1)との比較
extend-4.1と比べて新規に追加されたケース
- basic/PODSolver/1DPODstep
- basic/sixDOFSolver/geometricSixDOF
- heatTransfer/buoyantBoussinesqSimpleFoam/volumetricHeating
- heatTransfer/buoyantPimpleFoam/buoyantChannel
- heatTransfer/buoyantPimpleFoam/hotRoom
- heatTransfer/thermalFoam/thermalSandwich
- incompressible/pimpleDyMFoam/mixerGgi3D
廃止されたケース
- compressible/steadyCompressibleMRFFoam/bentRotorStator
- heatTransfer/buoyantPisoFoam/hotRoom
これらの中で、個人的にそそられたのは、mixerGgi3D くらいであったが、本ケースは計算実行エラーが生じていたので、4.1から5.0へ更新されたからといって、目に惹くようなものは無いということになる。
但し、extend-4.1について実際の計算は実施しておらず、単にケースファイルの名前で比較しただけである。ひょっとして、計算時間が速くなっていたり、異常計算が正常になったり・・・というケースもあるかもしれない。
その他雑感
extend版というと、ESI版やFoundation版と比べると、特別なカテゴリに特化して開発が注力されているような印象がある。たとえば、solidMechanics, immersedBoundary, overset などである。しかし、extend-5.0 においてこれらに関して、新しいケースが追加されたということは無かった。
特にextend版固有のものとして期待しているimmersedBoundaryや、pUCoupledソルバーの中には依然として計算が正常に実行できないままのものがあることもわかった。チュートリアルレベルでそうだとすると、いまだ実用展開が躊躇われる。