[Re:14] Reboot : ゼロから始める OpenFOAM @ windows  計算終了、再開をしてみる

計算をしていると、いろんな苦難、試練がやってきます。

計算が少しずつ進んでいるのに、メインテナンスで停電します、や、
発雷、落雷に弱い変電システムの瞬電や、れ以外にもウッカリWindows 自動更新による再起動や、I2C接続の外部記憶機器がゼネストしたり、はてはデバイスエラーのブルーバック、まで。それ以外にもいろんなことが起こるのは想定しないといけません。COTSな民生品機器は、徳わからないことも起こります。

もちろん、 OpenFOAM も対応できるようにはなっています。

【解決】

単CPU処理の時

hogehoge> sinplefoam
hogehoge> pmplefoam

ワーキングディレクトリィを間違わないように、キーワードの大文字小文字も間違わないように、そうして継続しようとしたらエラーが出たら、 log ファイルを確認して、原因がわからなくても3回、ソルバー実行コマンドを、実行。

MPU処理の時

hogehoge> mpirun -np 3 pimplefoam -parallel
hogehoge> mpirun -np 2 simplefoam -parallel

mpirun っていうコマンドの中で、ソルバーを起動させるイメージですね。オプション -np で使用するコア数の数字を指定しています。最後の -parallel オプションは、ソルバーへのメッセージだそうです。

【解説】

アプローチとして、まずは素直に

simplefoem

とか、

pinplefoam

とかを実行すれば、都合よく controlDict に書かれた使用を読み込んで、うまくあとはやってくれる、っていうのが理想です。でも実際には、とりあえずやみくもに? コンソールで上記のこまんどぉ打ち込んでも、致命的エラーで動きません。

$ pimplefoam
/*—————————————————————————*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 8
\\/ M anipulation |
\*—————————————————————————*/
/* Windows 32 and 64 bit porting by blueCAPE: http://www.bluecape.com.pt *\
| Based on Windows porting (2.0.x v4) by Symscape: http://www.symscape.com |
\*—————————————————————————*/
Build : 8-53cd1468e263
Exec : C:/AP/Develop/BLUECF~2/OpenFOAM-8/platforms/mingw_w64GccDPInt32Opt/bin/pimplefoam.exe
Date : Apr 18 2021
Time : 21:11:17
Host : “LAPTOP-3P0SOHGT”
PID : 11864
I/O : uncollated
Case : D:/work/0_calc/disk3corebynaly1
nProcs : 1
SigFpe : Enabling floating point exception trapping (FOAM_SIGFPE).
fileModificationChecking : Monitoring run-time modified files using timeStampMaster (fileModificationSkew 10)
allowSystemOperations : Allowing user-supplied system call operations

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create time

–> FOAM FATAL IO ERROR:
latestTime is not in enumeration:
4
(
endTime
nextWrite
noWriteNow
writeNow
)

file: D:/HOGEHOGE/system/controlDict/stopAt at line 12.

From function Enum Foam::NamedEnum<Enum, nEnum>::read(Foam::Istream&) const [with Enum = Foam::Time::stopAtControl; unsigned int nEnum = 4]
in file ./containers/NamedEnum/NamedEnum.T.C at line 69.

FOAM exiting

 

これを読み解けば、解決方法がわかるはずです。

 

「latestTime is not in enumeration:」

なるほど、、、きっと「latestTime」はキーワードにはないから次の四つから選べ、と言いたいんでしょうか。でも、最新の計算結果から再開するときは、「latestTime」でよかったんでは?

$ pimpleFoam
/*—————————————————————————*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 5.x |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*—————————————————————————*/
/* Windows 32 and 64 bit porting by blueCAPE: http://www.bluecape.com.pt *\
| Based on Windows porting (2.0.x v4) by Symscape: http://www.symscape.com |
\*—————————————————————————*/
Build : 5.x-963176928289
Exec : C:/AP/develop/BLUECF~1/OpenFOAM-5.x/platforms/mingw_w64GccDPInt32Opt/bin/pimpleFoam.exe
Date : Apr 19 2021
Time : 12:45:43
Host : “FSET-PROT01”
PID : 8388
I/O : uncollated
Case : J:/0_calc/▒~▒▒/▒~▒▒/diskUnturthin
nProcs : 1
SigFpe : Enabling floating point exception trapping (FOAM_SIGFPE).
fileModificationChecking : Monitoring run-time modified files using timeStampMaster (fileModificationSkew 10)
allowSystemOperations : Allowing user-supplied system call operations

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create time

Create mesh for time = 6.424

なんか時間は認識しているような。。。設定は、さっきと一緒のような気がするのですが。

 

 

 

 

 

#!/bin/sh
cd ${0%/*} || exit 1
. $WM_PROJECT_DIR/bin/tools/RunFunctions
show_help() {
echo “Usage: Allrun [OPTIONS]”
echo “options:”
echo ” -m, –onlyMesh make only meshes”
echo ” -h, –help print the usage”
echo “”
exit 1
}
get_num_labels() ( set -f; set — $1; echo $# )
monitor() {
local solverPID=$1
local logFile=$2

while [ ! -f $logFile ]; do
sleep 1
done
sleep 3

# Note that the numLabels includes “#”
local labels
labels=$(grep -E ‘^#’ $logFile | tail -1)
if [ “x$labels” = “x” ]; then
labels=”# Step”
fi
local numLabels=$(get_num_labels “$labels”)
local numColumn=$(tail -1 $logFile | awk ‘{ print NF}’)

local i=0
while [ “$numLabels” -le “$numColumn” ]; do
i=$(expr $i + 1)
labels=”$labels data$i”
numLabels=$(get_num_labels “$labels”)
done

local xAxisLabel=$(echo $labels | cut -d ” ” -f2)
labels=$(echo $labels | cut -d ” ” -f3-)

local gnuplotFile=$(mktemp)
echo “set term x11 1 font \”helvetica,17\” linewidth 1.5 persist noraise” > $gnuplotFile
echo “set logscale y” >> $gnuplotFile
echo “set title \”Residuals\”” >> $gnuplotFile
echo “set xlabel \”$xAxisLabel\”” >> $gnuplotFile
echo “plot \\” >> $gnuplotFile
local field
local line
i=1
for field in $labels; do
i=$(expr $i + 1)
line=”\”$logFile\” using 1:${i} with lines title \”$field\””
if [ $i -lt $numColumn ]; then
line=”$line, \\”
fi
echo $line >> $gnuplotFile
done
echo “pause 1” >> $gnuplotFile
echo “reread” >> $gnuplotFile

touch $logFile
gnuplot $gnuplotFile &
local gnuplotPID=$!

while ps -p $solverPID > /dev/null; do
sleep 1
done

sleep 5
kill -9 $gnuplotPID
rm $gnuplotFile
}
optionOld=$OPTIND
OPTIND=1
onlyMesh=0
while getopts “hm-:” opt; do
case “$opt” in
-)
case “${OPTARG}” in
help) show_help;;
onlyMesh) onlyMesh=true;;
esac ;;
m) onlyMesh=true;;
h) show_help;;
esac
done
shift $((OPTIND-1))
OPTIND=$optionOld
runApplication blockMesh
runApplication surfaceFeatureExtract

runApplication decomposePar
runParallel snappyHexMesh -overwrite
runApplication reconstructParMesh -constant -mergeTol 1e-6
rm -rf ./processor*
mv log.decomposePar log.decomposePar-meshing
mv log.reconstructParMesh log.reconstructParMesh-meshing
if [ “$onlyMesh” = true ] ; then
exit 0
fi

runApplication decomposePar
residualsFile=”postProcessing/residuals(U,p,k,epsilon)/0/residuals.dat”
if [ -f $residualsFile ] ; then
rm -f $residualsFile
fi
if [ -n “$DISPLAY” ] && [ -x “$(command -v gnuplot)” ]; then
runParallel $(getApplication) &
monitor $! $residualsFile
else
runParallel $(getApplication)
fi
runApplication reconstructParMesh -constant -mergeTol 1e-6
runApplication reconstructPar
rm -rf ./processor*