データベースの一括追加(改訂版)

全チュートリアルの実行結果情報(計算時間やディスク使用量)をデータベース化するに際しては、いずれ完全自動化を目指してはいるもの、まだまだ道半ば。先の投稿をベースにログ解析スクリプトを改定(allFilesRev.py)したことにより、手作業量を大幅に少なくすることは出来たが、もう一つ追加の手順が必要となった。半年(マイナスアルファ)に一度の作業では忘れてしまいかねない。そこで備忘録として取り纏めておくこととした。

目次

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

図1.Allrunログ情報データベース化の作業フロー図

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

Allrun の実行

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

シェルの問題

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

スロット数不足

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

Mac の場合

Allrun以前の問題として、foamyHexMesh系のメッシャーを使うケースは(標準的なビルドだけではfoamy系のメッシュツールが作成されないので)要注意であるが、それ以外にcp -r コマンドの挙動がLinuxの場合と異なるので変更する必要がある。これもopenFoam-v2112を対象に具体的なケース名を記しておく。

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

先の投稿 で記したように、改訂版のログ解析スクリプトは、実行前に予めチュートリアルケースの一覧リストを取得し、このチュートリアルケース毎に、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 を編集、シンボリックリンクケースを削除する。

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

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のケースフォルダでないものであったり、特殊な構造をしたケースがいくつか存在する。

  1. IO/dictionary
  2. incompressible/pimpleFoam/LES/planeChannel
  3. incompressible/simpleFoam/turbulentFlatPlate
  4. verificationAndValidation/atmosphericModels/atmDownstreamDevelopment
  5. verificationAndValidation/atmosphericModels/atmForestStability
  6. verificationAndValidation/multiphase/StefanProblem
  7. verificationAndValidation/turbulentInflow/oneCellThickPlaneChannel

第1項は、計算時間もディスク消費も非常に少なく、全体として見れば無視できる割合でしかないが、第2項以下は、そうでもなく、作業量もそれなりに必要になる。

ただ基本的には、resutsフォルダ中にパラメタを変更して計算した結果が収納される構造になっており、スクリプトの例外処理で自動化出来そうな感触はある。

ディスク消費スペースを重複カウント

以下のケースでは、チュートリアルケースそのものがOpenFOAMのケースファイル構造をしており、かつその中にサブケースとしてOpenFOAMのケースフォルダを内包する構造になっている。

  1. IO/fileHandler
  2. compressible/rhoPimpleFoam/laminar/helmholtzResonance
  3. incompressible/boundaryFoam/steadyBoundaryLayer
  4. incompressible/pimpleFoam/LES/planeChannel
  5. incompressible/pimpleFoam/laminar/planarPoiseuille
  6. incompressible/simpleFoam/bump2D
  7. verificationAndValidation/atmosphericModels/atmDownstreamDevelopment
  8. verificationAndValidation/atmosphericModels/atmForestStability
  9. verificationAndValidation/multiphase/StefanProblem
  10. verificationAndValidation/turbulentInflow/oneCellThickPlaneChannel

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

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

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つをインポートするのが良い。

コメントする

メールアドレスが公開されることはありません。