データベースの一括追加(再改定版)(工事中)

全チュートリアルの実行結果情報(計算時間やディスク使用量)をデータベース化するに際しては、完全自動化を目指しつつ、様々な紆余曲折を経て、いまだ道半ばである。

本記事の主眼であるデータベースに一括追加の方法についても、先の改訂版の記事では、今となってはシステムが移行したことによる不要な情報も多く残っており、これに頼っていたのでは手作業や手戻りの時間がなかなか減ってくれない。

そこで本記事は、2025年8月(OpenFOAM-v2506まで終了)以降のデータベース作成に際し、簡潔な要領書になることを目標に執筆した。

Table of Contents

作業全体のフローイメージは、以下の通り。

図中の各ステップにおける留意点を番号順に記しておく。

Allrun の実行

使用する計算環境に依存してAllrunが失敗するケースが存在する。これまでは全実行後に失敗したケースのAllrunを手修正して再実行してきたが、事前に判っておれば事前に手修正しておいた方が、トータルの手間は少ない。今の所、事前に失敗が予測されるケースは以下の通り。

シェルの問題

ubuntu の標準シェルはdashなので、これをOpenFOAMの推奨シェルbashに変更していないと、実行できないケースがある。

スロット数不足

高並列のチュートリアルケースも増えてきた。具体的に、openFoam-v2112を対象に8スロットを越えて必要なケース名とスロット数(分割方法)を以下に挙げておく。基本的にはdecomposeParDictを修正すれば動くはずである。

ログ解析スクリプトの実行

先の投稿 で記したように、改訂版のログ解析スクリプトは、実行前に予めチュートリアルケースの一覧リストを取得し、このチュートリアルケース毎に、OpenFOAMのケースフォルダの解析内容をリストアップしている。

チュートリアルケース一覧リストの取得

チュートリアルケースリストは、ライブラリーから別途チュートリアルケース一式をコピーして実施する。

  1. Allrunをコピーして、Allprintとし、foamRuntutorials を実行している箇所を、foamPrintTutorials に変更
  2. foamRunTutorials をコピーして、foamPrintTutorials に変更し、AllrunまたはblockMesh を実行している箇所をコメントアウトし、echo “CASE: $PWD”を追加する。
  3.  mesh/snappyHexMesh, foamyHexMesh, multiphase/cavitatingFoam/LES 下のAllrunを削除(別名変更)その際に、シンボリックリンクのケースがあれば、メモしておく。
  4. Allprintを実行(./Allprint | grep CASE: | tee tutorials_before.csv)
  5. tutorials_before.csv を編集、シンボリックリンクケースを削除する。

改訂版ログ解析スクリプトの実行

countLogsAllRevNp.shの、

				
					#!/bin/sh
cd ${0%/*} || exit 1    # run from this directory

tutList="./tutLorials_before.csv"
tutResult="./tutorials_afterNp.csv"
of_env=". /usr/lib/openfoam/openfoam2512/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のケースファイル構造をしており、かつその中にサブケースとしてOpenFOAMのケースフォルダを内包する構造になっている。

  1. IO/fileHandler
  2. compressible/rhoPimpleFoam/laminar/helmholtzResonance

ディスク消費スペース(disk_usage)のカウントは、OpenFOAMのケースファイル単位で実施しているので、これらのケースでは重複してカウントされてしまうので、サブケースとしてリストアップされたdisk_usageの数字を削除する。

v2512では、第1項の手作業は不要となった。

データベース用ログ情報の抽出

googleドキュメントの tutorialsシートでの作業が終了したら、caseNameの右隣(サブケース名)の列を削除し、表全体をcsvファイルとしてエクスポートする。この際、csvの形式として、ファイル区切りは「,」(カンマ)、文字区切りは無しとしておくこと(下図参照)

また、併せて、当該データセットの付帯情報(OpenFOAMのヴァージョン、計算環境)を記したファイル(.infos)も作成しておく。

				
					of_ver	35
exe_sys	8
				
			

これらはデータベースのID番号であり、新たにデータベースを追加した場合などは、phpMyAdminを使って、wp_of_ver, wp_of_exe_system データを直接追加編集なりしたデータを参照して確認することになる。

データベースのエクスポート

データベースを追加するには、最新のWordPressのデータベース(wp_of_tutorials)をエクスポートして、これに追加分を加えたデータベースファイルをインポートする。WordPressのデータベースをエクスポートするには、オプションとして1点デフォルト変更する箇所がある。

データベースの追加

sql文追加用にエクスポートしたcsvファイルと、データセットの付帯情報(.infos)ファイルを用意して、csv2PostSqlNp.py

				
					# coding: utf-8
import datetime
import os
from urllib import parse

#追加csvデータファイル
csvFileName = "./csv/v2512Np.csv"
infoFileName = "./csv/v2512.infos"
#更新前のSQLファイル
fileName = {"key1":"./wp_of_tutorials.sql"}
#更新用のSQLファイル
outputAddSql = {"key1":"./wp_of_tutorials_Add.sql"}
				
			

の、7、8行目にその在所を記述する。しかる後に、このスクリプトを実行(putyon3 conv2PostSqlNp.py)すれば、ダウンロードしたSQLファイル(10行目で定義してある)に対して、WordPress用のSQL文に加工したデータを追加するようになっている。追加後のSQLファイル名は、12行目に定義してある。

データベースのインポート

前節のスクリプトを実行すると、

  • wp_of_tutorials_Add.sql

というSQLファイルが作成されるので、これをphpMyAdminを使ってインポートして、エラーが生じなければ作業が完了となる。

ただしv2512の場合には、以下のエラーが出た。

メッセージに従って該当行を見ると、以下のようになっていた。

				
					(13904, 8, 35, 'IO', '', '', 'dictionary', , 0, 0, 0, 0, 0),
				
			

「0」が4つ続く前のブランクが問題で、ここは並列数が入るカラムで数字でないといけない。そこで以下のように修正してOKとなった。

				
					(13904, 8, 35, 'IO', '', '', 'dictionary', 1, 0, 0, 0, 0, 0),
				
			

コメントを残す

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

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

上部へスクロール