全チュートリアルの実行結果情報(計算時間やディスク使用量)をデータベース化するに際しては、いずれ完全自動化を目指してはいるもの、まだまだ道半ば。先の投稿をベースにログ解析スクリプトを改定(allFilesRev.py)したことにより、手作業量を大幅に少なくすることは出来たが、もう一つ追加の手順が必要となった。半年(マイナスアルファ)に一度の作業では忘れてしまいかねない。そこで備忘録として取り纏めておくこととした。
目次
作業全体のフローイメージは、以下の通り。
図中の各ステップにおける留意点を番号順に記しておく。
Allrun の実行
使用する計算環境に依存してAllrunが失敗するケースが存在する。これまでは全実行後に失敗したケースのAllrunを手修正して再実行してきたが、事前に判っておれば事前に手修正しておいた方が、トータルの手間は少ない。今の所、事前に失敗が予測されるケースは以下の通り。
シェルの問題
ubuntu の標準シェルはdashなので、これをOpenFOAMの推奨シェルbashに変更していないと、実行できないケースがある。
- incompressible/simpleFoam/turbulentFlatPlate
- heatTransfer/buoyantSimpleFoam/circuitBoardCooling
- mesh/foamyQuadMesh/OpenCFD
- multiphase/overInterDyMFoam/rigidBodyHull/
スロット数不足
高並列のチュートリアルケースも増えてきた。具体的に、openFoam-v2112を対象に8スロットを越えて必要なケース名とスロット数(分割方法)を以下に挙げておく。基本的にはdecomposeParDictを修正すれば動くはずである。
- heatTransfer/chtMultiRegionSimpleFoam/cpuCabinet(10 scotch)
- incompressible/pimpleFoam/laminar/cylinder2D 12(hierarchical)
- incompressible/pimpleFoam/LES/planeChannel 36(scotch)
- incompressible/pimpleFoam/LES/periodicHill 16(scotch)
- incompressible/adjointOptimisationFoam/shapeOptimisation/motorBike 20(hierarchical)
- incompressible/adjointOptimisationFoam/sensitivityMaps/motorBike 20(hierarchical)
- incompressible/lumpedPointMotion/bridge 12(scotch)
- incompressible/lumpedPointMotion/building 12(scotch)
- lagrangian/reactingParcelFoam/airRecirculationRoom 10(scotch)
- lagrangian/MPPICFoam/cyclone 12(simple)
- multiphase/overCompressibleInterDyMFoam/compressibleTwoSimpleRotors12(hierarchical)
Mac の場合
Allrun以前の問題として、foamyHexMesh系のメッシャーを使うケースは(標準的なビルドだけではfoamy系のメッシュツールが作成されないので)要注意であるが、それ以外にcp -r コマンドの挙動がLinuxの場合と異なるので変更する必要がある。これもopenFoam-v2112を対象に具体的なケース名を記しておく。
- incompressible/adjointOptimisationFoam/shapeOptimisation/naca0012 以下の全3ケース
- incompressible/adjointOptimisationFoa/shapeOptimisation/sbend 以下の全11ケース
- incompressible/adjointOptimisationFoam/sensitivityMaps/naca0012 以下の全5ケース
- incompressible/adjointOptimisationFoam/sensitivityMaps/sbend 以下の全4ケース
- lagrangian/reactingParcelFoam/airRecirculationRoom/transient
ログ解析スクリプトの実行
先の投稿 で記したように、改訂版のログ解析スクリプトは、実行前に予めチュートリアルケースの一覧リストを取得し、このチュートリアルケース毎に、OpenFOAMのケースフォルダの解析内容をリストアップしている。
チュートリアルケース一覧リストの取得
チュートリアルケースリストは、ライブラリーから別途チュートリアルケース一式をコピーして実施する。
- Allrunをコピーして、Allprintとし、foamRuntutorials を実行している箇所を、foamPrintTutorials に変更
- foamRunTutorials をコピーして、foamPrintTutorials に変更し、AllrunまたはblockMesh を実行している箇所をコメントアウトし、echo “CASE: $PWD”を追加する。
- mesh/snappyHexMesh, foamyHexMesh, multiphase/cavitatingFoam/LES 下のAllrunを削除(別名変更)その際に、シンボリックリンクのケースがあれば、メモしておく。
- Allprintを実行(./Allprint | grep CASE: | tee tutorials_before.csv)
- tutorials_before.csv を編集、シンボリックリンクケースを削除する。
改訂版ログ解析スクリプトの実行
countLogsAllRev.shの、
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
tutList="./tutLorials_before.csv"
tutResult="./tutorials_after.csv"
of_env=". /usr/lib/openfoam/openfoam2112/etc/bashrc;"
python3 ./allFilesRev.py --of_env "$of_env" --tutResult "$tutResult" "$tutList"
4〜6行目を適宜編集して実行する。
同上、実行時エラーの対処
OpenFOAM-v2112 の場合、incompressible/pimpleFoam/laminar/cylinder2D のケースのログ解析でスクリプトが実行停止する。
これは、blockMeshの実行ログが、Allrunスクリプトで、log.blockMesh.main と、log.blockMesh.coaseMesh に書き換えられており、スクリプトがlog.blockMeshを想定しているのに対し、見つからないことが原因である。
スクリプトの例外処理を追加すれば対処可能であるが、今の所log.blockMesh.main を、log.blockMesh に変更して、エラーを回避している。
ログ情報の整理
上記で得られたtutorials_after.csv は、一部に不具合があるので、手修正作業が必要になるが、改訂版では作業量が大幅に減少した。
ケース名が不適切
AllPrintスクリプトで取得したケース名のうち、以下の2つのケースは、ケース名として不適切であるので、この部分は手修正している。
- combustion/XiFoam/RAS
- ⇒combustion/XiFoam/RAS/moriyoshiHomogeneous
- compressible/sonicLiquidFoam
- ⇒compressible/sonicLiquidFoam/decompositionTank
ケースフォルダ構造がイリーガル
チュートリアルケースの中には、そもそもOpenFOAMのケースフォルダでないものであったり、特殊な構造をしたケースがいくつか存在する。
- IO/dictionary
- incompressible/pimpleFoam/LES/planeChannel
- incompressible/simpleFoam/turbulentFlatPlate
- verificationAndValidation/atmosphericModels/atmDownstreamDevelopment
- verificationAndValidation/atmosphericModels/atmForestStability
- verificationAndValidation/multiphase/StefanProblem
- verificationAndValidation/turbulentInflow/oneCellThickPlaneChannel
第1項は、計算時間もディスク消費も非常に少なく、全体として見れば無視できる割合でしかないが、第2項以下は、そうでもなく、作業量もそれなりに必要になる。
ただ基本的には、resutsフォルダ中にパラメタを変更して計算した結果が収納される構造になっており、スクリプトの例外処理で自動化出来そうな感触はある。
v2206 では、第2項以下の手作業は不要となった。
ディスク消費スペースを重複カウント
以下のケースでは、チュートリアルケースそのものがOpenFOAMのケースファイル構造をしており、かつその中にサブケースとしてOpenFOAMのケースフォルダを内包する構造になっている。
- IO/fileHandler
- compressible/rhoPimpleFoam/laminar/helmholtzResonance
- incompressible/boundaryFoam/steadyBoundaryLayer
- incompressible/pimpleFoam/LES/planeChannel
- incompressible/pimpleFoam/laminar/planarPoiseuille
- incompressible/simpleFoam/bump2D
- verificationAndValidation/atmosphericModels/atmDownstreamDevelopment
- verificationAndValidation/atmosphericModels/atmForestStability
- verificationAndValidation/multiphase/StefanProblem
- verificationAndValidation/turbulentInflow/oneCellThickPlaneChannel
ディスク消費スペース(disk_usage)のカウントは、OpenFOAMのケースファイル単位で実施しているので、これらのケースでは重複してカウントされてしまうので、サブケースとしてリストアップされたdisk_usageの数字を削除する。
v2206では、第3項以下の手作業は不要となった。
データベース用ログ情報の抽出
googleドキュメントの tutorialsシートでの作業が終了したら、caseNameの右隣(サブケース名)の列を削除し、表全体をcsvファイルとしてエクスポートする。なお、このサブケース名の列は、改訂版のスクリプトで新たに追加したもので、次のステップで使用するSQL文への変換ツール(csv2PostSql2.py)での対応が間に合っていないので、こうしているが、csv2PostSql3.py の際には、この作業(列削除)は必要無くなる予定。
また、併せて、当該データセットの付帯情報(OpenFOAMのヴァージョン、計算環境)を記したファイルも作成しておく。
of_tut_dir /media/et/OpenFOAM/OpenFOAM/openfoam2112/tutorials/
of_ver 25
exe_sys 44
execution_date 2022-02-01 00:00:00
2,3 行目はデータベースのID番号であり、新たにデータベースを追加した場合などは、phpMyAdminを使って、wp_postデータを直接参照して確認することになる。
データベースのエクスポート
データベースを追加するには、最新のWordPressのデータベースをエクスポート(図1.)して、これに追加分を加えたデータベースファイルをインポートする。WordPressのデータベースをエクスポートするには、phpMyAdminを使っており、対象データベースは以下の3つ,
- wp_posts
- wp_postmeta
- wp_podsrel
であるが、エクスポートオプションとして、1点デフォルト変更する箇所がある。
データベースの追加
sql文追加用にエクスポートしたcsvファイルと、データセットの付帯情報(.info)ファイルを用意して、csv2PostSql2.py
# coding: utf-8
import datetime
import os
from urllib import parse
#追加csvデータファイル
csvFileName = "./csv/v2112.csv"
infoFileName = "./csv/v2112.info"
#更新前のSQLファイル
fileName = {"key1":"./wp_posts.sql", "key2":"./wp_postmeta.sql", "key3":"./wp_podsrel.sql"}
#更新用のSQLファイル
outputAddSql = {"key1":"./wp_posts_Add.sql", "key2":"./wp_postmeta_Add.sql", "key3":"./wp_podsrel_Add.sql"}
の、7、8行目にその在所を記述する。しかる後に、このスクリプトを実行(putyon3 conv2PostSql2.py)すれば、ダウンロードしたSQLファイル(10行目で定義してある)に対して、WordPress用のSQL文に加工したデータを追加するようになっている。追加後のSQLファイル名は、12行目に定義してある。
なお、スクリプトの実行後において、以下のメッセージが出る場合がある。
./wp_posts_Add.sql ファイルの最終行処理が出来ていないので、手修正が必要です。
これは、追加csvデータの最終データが複数行にまたがる場合(ケースファイル中にサブケースが存在する場合など)に生成される警告文である。追加SQL文の最終行は、;(セミコロン)とする必要があるが、現在のプログラム原理上、上記の場合に対応できない為、已む無く警告文として注意喚起するゆにしたものである。
この場合は、生成された更新用のSQLファイルをテキストエディタで編集し、最終行から20〜30行前あたりで、SQLにINSERT文が終了している箇所において、
(10655, 1, '2022-07-20 20:39:54', '2022-07-20 07:39:54', '', 'weightedFluxExample', '', 'publish', 'closed', 'closed', '', 'weightedFluxExample_10655', '', '', '2022-01-23 15:19:59', '2022-01-23 06:19:59', '', 0, 'http://openfoam.ocse2.com/?post_type=tutorial&p=10655', 0, 'tutorial', '', 0),
(10656, 1, '2022-07-20 20:39:55', '2022-07-20 07:39:55', '', 'oneCellThickPlaneChannel', '', 'publish', 'closed', 'closed', '', 'oneCellThickPlaneChannel_10656', '', '', '2022-01-23 15:19:59', '2022-01-23 06:19:59', '', 0, 'http://openfoam.ocse2.com/?post_type=tutorial&p=10656', 0, 'tutorial', '', 0),
--
-- Indexes for dumped tables
--
行末が,(カンマ)になっているので、これを;(セミコロン)に修正する。
データベースのインポート
前節のスクリプトを実行すると、
- wp_post_Add.sql
- wp_postMeta_Add.sql
- wp_podsrel_add.sql
という3つのSQLファイルが作成されるので、これらをphpMyAdminを使ってインポートして、エラーが生じなければ作業が完了となる。
3つのファイルのインポートの順番は問わないが、前節で述べたインポートエラーの大半は、wp_post_Add.sql をインポートする際に生じるので、これを最初にインポートしてエラーの無いことを確かめてから、残りの2つをインポートするのが良い。
ピンバック: OpenFOAM-v2206 – E.Mogura's OpenFOAM®
ピンバック: foam-extend-5.0 – E.Mogura's OpenFOAM®
ピンバック: OpenFOAM-v2212 – E.Mogura's OpenFOAM®
ピンバック: OpenFOAM-v2306 – E.Mogura's OpenFOAM®
ピンバック: データベースのグラフ化(その1) – E.Mogura's OpenFOAM®
ピンバック: OpenFOAM-v2312 – E.Mogura's OpenFOAM®