From 9c38ad6ae49a69e1d3cdb65a9e8a35cfb06652c3 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Thu, 21 Dec 2017 14:17:20 +0100 Subject: [PATCH] TUT: relocate tutorial log analysis as functions for reuse in modules - removed some unneeded tutorial files --- bin/tools/CleanFunctions | 17 +- bin/tools/LogFunctions | 120 ++ bin/tools/RunFunctions | 17 +- tutorials/Allclean | 15 +- tutorials/Allrun | 113 +- .../planeTransport/constant/faMesh/faBoundary | 212 --- .../planeTransport/constant/faMesh/faceLabels | 1224 ----------------- 7 files changed, 143 insertions(+), 1575 deletions(-) create mode 100644 bin/tools/LogFunctions delete mode 100644 tutorials/finiteArea/surfactantFoam/planeTransport/constant/faMesh/faBoundary delete mode 100644 tutorials/finiteArea/surfactantFoam/planeTransport/constant/faMesh/faceLabels diff --git a/bin/tools/CleanFunctions b/bin/tools/CleanFunctions index 431c52f383..2f546b4f84 100644 --- a/bin/tools/CleanFunctions +++ b/bin/tools/CleanFunctions @@ -6,20 +6,8 @@ # \\/ M anipulation | Copyright (C) 2015-2017 OpenCFD Ltd. #------------------------------------------------------------------------------ # License -# This file is part of OpenFOAM. -# -# OpenFOAM is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenFOAM. If not, see . +# This file is part of OpenFOAM, licensed under GNU General Public License +# . # # Script # CleanFunctions @@ -158,6 +146,7 @@ cleanFaMesh () ) } + cleanApplication() { echo "Cleaning application $PWD" diff --git a/bin/tools/LogFunctions b/bin/tools/LogFunctions new file mode 100644 index 0000000000..820ab4a27f --- /dev/null +++ b/bin/tools/LogFunctions @@ -0,0 +1,120 @@ +#!/bin/sh +#------------------------------------------------------------------------------ +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2017 OpenCFD Ltd. +# \\/ M anipulation | +#------------------------------------------------------------------------------ +# License +# This file is part of OpenFOAM, licensed under GNU General Public License +# . +# +# Script +# LogFunctions +# +# Description +# Miscellaneous functions for running tutorials in a loop and for +# analyzing the output. +# +# Output is normally summarized as 'testLoopReport' +# +#------------------------------------------------------------------------------ + +# logReport +# Extracts useful info from log file. +logReport() +{ + local logfile=$1 + + # logfile is path/to/case/log.application + caseName=$(dirname $logfile | sed -e 's/\(.*\)\.\///g') + app=$(echo $logfile | sed -e 's/\(.*\)log\.//g') + appAndCase="Application $app - case $caseName" + + if grep -q "FOAM FATAL" $logfile + then + echo "$appAndCase: ** FOAM FATAL ERROR **" + return 1 + fi + + # Check for solution singularity on U equation + for eqn in Ux Uy Uz + do + if grep -q -E "${eqn}[:| ]*solution singularity" $logfile + then + if [ "$eqn" = Uz ] + then + # Can only get here if Ux,Uy,Uz all failed + echo "$appAndCase: ** Solution singularity **" + return 1 + fi + else + break + fi + done + + if grep -q -E "^[\t ]*[Ee]nd" $logfile + then + # Extract time from this type of content + ## ExecutionTime = 60.2 s ClockTime = 63 s --> "60.2 s" + completionTime=$(tail -10 $logfile | \ + sed -n -e '/Execution/{s/^[^=]*=[ \t]*//; s/\( s\) .*$/\1/; p}') + + echo "$appAndCase: completed${completionTime:+ in }$completionTime" + else + echo "$appAndCase: unconfirmed completion" + fi +} + + +# Collect and analyse all log files +collectLogs() +{ + echo "Collecting log files..." 1>&2 + rm -f logs testLoopReport > /dev/null 2>&1 + touch logs testLoopReport + + local appDir log logFiles + + for appDir in * + do + [ -d $appDir ] || continue + echo -n " $appDir..." 1>&2 + + logFiles=$(find -L $appDir -name 'log.*' -type f) + if [ -n "$logFiles" ] + then + echo 1>&2 + else + echo " (no logs)" 1>&2 + continue + fi + + # Sort logs by time-stamp + for log in $(echo $logFiles | xargs ls -rt) + do + # Concatenate and summarize logs + cat "$log" >> logs 2>/dev/null + logReport $log + done + echo + done > testLoopReport +} + + +removeLogs() +{ + echo "Removing backup files" + + find . \( \ + -name '*~' -o -name '*.bak' \ + -name core -o -name 'core.[1-9]*' \ + -name '*.pvs' -o -name '*.foam' -o -name '*.OpenFOAM' \ + \) -type f -delete + + rm -f logs testLoopReport > /dev/null 2>&1 +} + + +#------------------------------------------------------------------------------ diff --git a/bin/tools/RunFunctions b/bin/tools/RunFunctions index 55ab42d175..d9712dea2c 100644 --- a/bin/tools/RunFunctions +++ b/bin/tools/RunFunctions @@ -6,26 +6,15 @@ # \\/ M anipulation | Copyright (C) 2015-2017 OpenCFD Ltd. #------------------------------------------------------------------------------ # License -# This file is part of OpenFOAM. -# -# OpenFOAM is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenFOAM. If not, see . +# This file is part of OpenFOAM, licensed under GNU General Public License +# . # # Script # RunFunctions # # Description # Miscellaneous functions for running tutorial cases +# #------------------------------------------------------------------------------ # The normal locations diff --git a/tutorials/Allclean b/tutorials/Allclean index 0eea9fb549..bbaca026e2 100755 --- a/tutorials/Allclean +++ b/tutorials/Allclean @@ -1,18 +1,11 @@ #!/bin/sh -cd ${0%/*} || exit 1 # Run from this directory +cd ${0%/*} || exit 1 # Run from this directory +. $WM_PROJECT_DIR/bin/tools/LogFunctions # Tutorial log-file functions echo "--------" +removeLogs + echo "Cleaning tutorials ..." -echo "Removing backup files" - -find . \( \ - -name '*~' -o -name '*.bak' \ - -name core -o -name 'core.[1-9]*' \ - -name '*.pvs' -o -name '*.OpenFOAM' \ - \) -type f -delete - -rm -f logs testLoopReport > /dev/null 2>&1 - foamCleanTutorials cases echo "--------" diff --git a/tutorials/Allrun b/tutorials/Allrun index 0a731b3fc9..77d185e928 100755 --- a/tutorials/Allrun +++ b/tutorials/Allrun @@ -7,26 +7,14 @@ # \\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd. #------------------------------------------------------------------------------ # License -# This file is part of OpenFOAM. -# -# OpenFOAM is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenFOAM. If not, see . +# This file is part of OpenFOAM, licensed under GNU General Public License +# . # # Script # Allrun # # Description -# Runs tutorial cases and summarizes the outcome as 'testLoopReport' +# Run tutorial cases and summarize the outcome as 'testLoopReport' # #------------------------------------------------------------------------------ cd ${0%/*} || exit 1 # Run from this directory @@ -43,27 +31,26 @@ options: -collect Collect logs only. Can be useful for aborted runs. -help print the usage -* Runs tutorial cases and summarizes the outcome as 'testLoopReport' +Run tutorial cases and summarize the outcome as 'testLoopReport' USAGE exit 1 } #------------------------------------------------------------------------------ +unset optCollect -unset optCollectOnly - -# parse options +# Parse options while [ "$#" -gt 0 ] do case "$1" in - -h | -help) + -h | -help*) usage ;; -collect) - optCollectOnly=true + optCollect=true ;; - -test) # Known options that should be passed through + -test) # Known options to pass through break ;; -*) @@ -77,87 +64,13 @@ do done #------------------------------------------------------------------------------ +. $WM_PROJECT_DIR/bin/tools/LogFunctions # Tutorial log-file functions -# logReport -# Extracts useful info from log file. -logReport() -{ - local logfile=$1 - - # logfile is path/to/case/log.application - caseName=$(dirname $logfile | sed -e 's/\(.*\)\.\///g') - app=$(echo $logfile | sed -e 's/\(.*\)log\.//g') - appAndCase="Application $app - case $caseName" - - if grep -q "FOAM FATAL" $logfile - then - echo "$appAndCase: ** FOAM FATAL ERROR **" - return 1 - fi - - # Check for solution singularity on U equation - for eqn in Ux Uy Uz - do - if grep -q -E "${eqn}[:| ]*solution singularity" $logfile - then - if [ "$eqn" = Uz ] - then - # Can only get here if Ux,Uy,Uz all failed - echo "$appAndCase: ** Solution singularity **" - return 1 - fi - else - break - fi - done - - if grep -q -E "^[\t ]*[Ee]nd" $logfile - then - # Extract time from this type of content - ## ExecutionTime = 60.2 s ClockTime = 63 s --> "60.2 s" - completionTime=$(tail -10 $logfile | \ - sed -n -e '/Execution/{s/^[^=]*=[ \t]*//; s/\( s\) .*$/\1/; p}') - - echo "$appAndCase: completed${completionTime:+ in }$completionTime" - else - echo "$appAndCase: unconfirmed completion" - fi -} - -if [ -z "$optCollectOnly" ] +if [ -z "$optCollect" ] then - # Recursively run all tutorials - foamRunTutorials -skipFirst $* + foamRunTutorials -skipFirst $* # Run tutorials recursively fi - -# Analyse all log files -echo "Collecting log files..." 1>&2 -rm -f logs testLoopReport > /dev/null 2>&1 -touch logs testLoopReport - -for appDir in * -do - [ -d $appDir ] || continue - echo -n " $appDir..." 1>&2 - - logs=$(find -L $appDir -name 'log.*' -type f) - if [ -n "$logs" ] - then - echo 1>&2 - else - echo " (no logs)" 1>&2 - continue - fi - - # Sort logs by time-stamp - for log in $(echo $logs | xargs ls -rt) - do - # Concatenate and summarize logs - cat "$log" >> logs 2>/dev/null - logReport $log - done - echo -done > testLoopReport +collectLogs #------------------------------------------------------------------------------ diff --git a/tutorials/finiteArea/surfactantFoam/planeTransport/constant/faMesh/faBoundary b/tutorials/finiteArea/surfactantFoam/planeTransport/constant/faMesh/faBoundary deleted file mode 100644 index ed1236d475..0000000000 --- a/tutorials/finiteArea/surfactantFoam/planeTransport/constant/faMesh/faBoundary +++ /dev/null @@ -1,212 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class faBoundaryMesh; - location "constant/faMesh"; - object faBoundary; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -3 -( - inlet - { - type patch; - edgeLabels List