[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*