ENH: replace tutorials/AutoTest with bin/foamTestTutorial

- additional -serial/-parallel option:
  prefer Allrun-serial or Allrun-parallel if available

- optional -output=DIR to preserve output

ENH: report missing tutorials/ directory in RunFunctions
This commit is contained in:
Mark Olesen 2021-06-08 20:34:02 +02:00
parent c7bde70ecb
commit 853010309d
5 changed files with 114 additions and 58 deletions

View File

@ -6,17 +6,18 @@
# \\ / A nd | www.openfoam.com
# \\/ M anipulation |
#------------------------------------------------------------------------------
# Copyright (C) 2020 OpenCFD Ltd.
# Copyright (C) 2020-2021 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
#
# Script
# tutorials/AutoTest dir [.. dirN]
# foamTestTutorial dir [.. dirN]
#
# Description
# Run foamRunTutorials with specified tutorial directories
# Creates/destroys a temporary directory for each test.
# Creates/destroys a temporary directory for each test unless
# an output directory has been specified.
#
# Environment
# Requires an initialized OpenFOAM environment.
@ -35,13 +36,18 @@ printHelp() {
usage: ${0##*/} [OPTION] dir [.. dirN]
options:
-1 Modify case controlDict to run only one time step (default)
-full Do not modify controlDict (run tutorial to completion)
-debian Any modifications when running with autopkgtest
-1 Run only one time step (modifies controlDict) [default]
-full Run to completion (does not modify controlDict)
-force Force overwrite of existing output directories
-debian Adjust for running with autopkgtest
-serial Prefer Allrun-serial if available
-parallel Prefer Allrun-parallel if available
-output=DIR Output directory (default: a temporary directory)
-help Print the usage
Run foamRunTutorials with specified tutorial directories.
Creates/destroys a temporary directory for each.
Run foamRunTutorials with specified tutorial directories
Creates/destroys a temporary directory for each test unless
an output directory has been specified.
USAGE
exit 0 # A clean exit
@ -62,21 +68,22 @@ die()
#------------------------------------------------------------------------------
unset optDebian optVerbose
unset optAllrun optDebian optForce optVerbose
unset outputDir
optRunLimit=1
# Parse options
while [ "$#" -gt 0 ]
do
case "$1" in
-h*)
printHelp
;;
-h* | -help*) printHelp ;;
-force)
optForce=true
;;
-1)
optRunLimit="${1#-}"
;;
-full)
unset optRunLimit
;;
@ -87,6 +94,14 @@ do
exec 2>&1
;;
-serial | -parallel)
optAllrun="Allrun-${1#-}"
;;
-output=*)
outputDir="${1#*=}"
;;
--)
break
;;
@ -109,9 +124,19 @@ done
[ -n "$FOAM_TUTORIALS" ] || export FOAM_TUTORIALS="$WM_PROJECT_DIR"/tutorials
[ -d "${WM_PROJECT_DIR:?}" ] || die "No OpenFOAM environment: $WM_PROJECT_DIR"
[ -d "$FOAM_TUTORIALS" ] || die "No OpenFOAM tutorials : $FOAM_TUTORIALS"
[ -d "$FOAM_TUTORIALS" ] || die "No OpenFOAM tutorials: $FOAM_TUTORIALS"
#-------------------------------------------------------------------------------
# Resolve the output directory
if [ -n "$outputDir" ]
then
outputDir="$(cd "$outputDir" 2>/dev/null && pwd -L)" || \
die "Cannot resolve output directory"
[ -w "$outputDir" ] || die "Output directory non-writable: $outputDir"
fi
#------------------------------------------------------------------------------
#
@ -149,11 +174,29 @@ do
echo "Run test: $testdir"
set -e
TESTDIR="$(mktemp --directory --suffix=".$suffix")"
trap 'rm -rf $TESTDIR' 0 INT QUIT ABRT PIPE TERM
if [ -n "$outputDir" ]
then
TESTDIR="$outputDir/$suffix"
if [ -d "$TESTDIR" ]
then
if [ "$optForce" = true ]
then
rm -rf "$TESTDIR" # Remove old directory
else
echo "Directory exists: $TESTDIR" 1>&2
exit
fi
fi
mkdir "$TESTDIR"
else
TESTDIR="$(mktemp --directory --suffix=".$suffix")"
trap 'rm -rf $TESTDIR' 0 INT QUIT ABRT PIPE TERM
fi
cp -r "$FOAM_TUTORIALS/$testdir"/* "$TESTDIR"/
cd "$TESTDIR"
cd "$TESTDIR" || exit
# In case the input already had results
foamCleanTutorials > /dev/null 2>&1
if [ -n "$optRunLimit" ]
then
@ -162,19 +205,26 @@ do
set -e
fi
nInput="$(ls | wc -l)"
foamRunTutorials
nOutput="$(ls | wc -l)"
nFilesBefore="$(ls | wc -l)"
if [ "$nInput" = 0 ]
if [ -n "$optAllrun" ] && [ -f ./"$optAllrun" ]
then
./"$optAllrun"
else
foamRunTutorials
fi
nFilesAfter="$(ls | wc -l)"
if [ "$nFilesBefore" = 0 ]
then
echo "No input for $testdir" 1>&2
exit 1
elif [ "$nOutput" = "$nInput" ]
elif [ "$nFilesBefore" = "$nFilesAfter" ]
then
echo "Run failure for $testdir" 1>&2
exit 1
else
# And/or grep for FatalError in log files
echo "run: OK"
fi
) && nPassed=$((nPassed + 1))

View File

@ -8,8 +8,7 @@
# Copyright (C) 2017-2019 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, licensed under GNU General Public License
# <http://www.gnu.org/licenses/>.
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
#
# Script
# LogFunctions

View File

@ -20,7 +20,10 @@
#------------------------------------------------------------------------------
# The normal locations
[ -n "$FOAM_TUTORIALS" ] || export FOAM_TUTORIALS=$WM_PROJECT_DIR/tutorials
[ -n "$FOAM_TUTORIALS" ] || export FOAM_TUTORIALS="$WM_PROJECT_DIR"/tutorials
# Basic sanity checks
[ -d "$FOAM_TUTORIALS" ] || echo "No OpenFOAM tutorials? : $FOAM_TUTORIALS" 1>&2
#------------------------------------------------------------------------------

View File

@ -6,7 +6,7 @@
# \\ / A nd | www.openfoam.com
# \\/ M anipulation |
#------------------------------------------------------------------------------
# Copyright (C) 2019-2020 OpenCFD Ltd.
# Copyright (C) 2019-2021 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
@ -59,7 +59,7 @@ options:
-show-api | -version Print META-INFO api value and exit
-show-patch Print META-INFO patch value and exit
-show-prefix Print project directory and exit
-test-tutorial Forward arguments to tutorials/AutoTest
-test-tutorial Forward arguments to bin/foamTestTutorial
-init=FILE Alternative initialization file (expert option)
-verbose Set FOAM_VERBOSE=true (interactive only)
-help Print the usage
@ -126,7 +126,7 @@ do
exit $?
;;
-test-tutorial) # Run tutorials/AutoTest
-test-tutorial) # Run bin/foamTestTutorial
optTestTut=true
;;
@ -294,7 +294,7 @@ if [ -n "$optTestTut" ]
then
sourceBashrc
exec "$WM_PROJECT_DIR/tutorials/AutoTest" "$@"
exec "$WM_PROJECT_DIR"/bin/foamTestTutorial "$@"
exit $? # Safety
fi

View File

@ -7,11 +7,10 @@
# \\/ M anipulation |
#------------------------------------------------------------------------------
# Copyright (C) 2011-2016 OpenFOAM Foundation
# Copyright (C) 2017-2019 OpenCFD Ltd.
# Copyright (C) 2017-2021 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, licensed under GNU General Public License
# <http://www.gnu.org/licenses/>.
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
#
# Script
# Alltest
@ -25,10 +24,7 @@
#------------------------------------------------------------------------------
cd "${0%/*}" || exit # Run from this directory
usage()
{
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
printHelp() {
cat<<USAGE
usage: ${0##*/} [OPTION]
@ -39,14 +35,14 @@ options:
-default Sets up a default scheme on all schemes
-git Use git to retrieve the tutorials
-no-git Do not use git to retrieve the tutorials
-root dir Root directory to start tests from (non-git only)
-root=DIR Root directory to start tests from (non-git only)
-help Print the usage
Quickly tests the tutorials and writes out the scheme/solver information.
Detects and uses 'git' to obtain a fresh set of files when possible.
USAGE
exit 1
exit 0 # A clean exit
}
# Report error and exit
@ -74,12 +70,13 @@ unset optForce
while [ "$#" -gt 0 ]
do
case "$1" in
-h | -help)
usage
;;
-f | -force)
optForce=true
-h* | -help*) printHelp ;;
-f | -force) optForce=true ;;
-root=*)
rootDir="${1#*=}"
;;
-r | -root)
[ "$#" -ge 2 ] || die "'$1' option requires an argument"
rootDir="$2"
@ -141,10 +138,27 @@ snGradSchemes { default corrected; }
EOF
}
#
# Modify case controlDicts to run only one time step
#
modifyCaseControlDict()
{
for dict in $(find . -name "controlDict*" -type f)
do
cp -f "${dict}" "${dict}.orig"
sed \
-e 's/\(startFrom[ \t]*\)\([A-Za-z]*\);/\1 latestTime;/' \
-e 's/\(stopAt[ \t]*\)\([A-Za-z]*\);/\1 nextWrite;/' \
-e 's/\(writeControl[ \t]*\)\([A-Za-z]*\);/\1 timeStep;/' \
-e 's/\(writeInterval[ \t]*\)\([-.0-9A-Za-z]*\);/\1 '"$optRunLimit"';/' \
"${dict}.orig" > "${dict}"
done
}
#------------------------------------------------------------------------------
#
# Locate the user or project controlDict to adjust
#
unset ETC_CONTROL_DICT
if [ "$adjustDebugSwitches" = true ]
then
@ -194,7 +208,7 @@ then
if [ "$optForce" = true ]
then
echo "Removing old directory: $TEST_RUN_DIR" 1>&2
rm -rf $TEST_RUN_DIR
rm -rf "$TEST_RUN_DIR"
else
echo "Directory already exists: $TEST_RUN_DIR" 1>&2
echo " use -force to remove" 1>&2
@ -273,17 +287,7 @@ fi
echo "Modifying the case controlDicts to run only one time step" 1>&2
echo 1>&2
for CD in $(find . -name "controlDict*" -type f)
do
cp -f "${CD}" "${CD}.orig"
sed \
-e 's/\(startFrom[ \t]*\)\([a-zA-Z]*\);/\1 latestTime;/g' \
-e 's/\(stopAt[ \t]*\)\([a-zA-Z]*\);/\1 nextWrite;/g' \
-e 's/\(writeControl[ \t]*\)\([a-zA-Z]*\);/\1 timeStep;/g' \
-e 's/\(writeInterval[ \t]*\)\([0-9a-zA-Z.-]*\);/\1 1;/g' \
"${CD}.orig" > "${CD}"
done
modifyCaseControlDict
if [ "$useDefaultSchemes" = true ]
then