From 7d2a9fad1ae1b2260092f8b3a033de9f2d3c36d6 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Thu, 17 Jun 2021 10:09:39 +0200 Subject: [PATCH] ENH: add auto-detect 0/ to foamCleanTutorials - in the 'auto' mode (now the default), it will use cleanCase and also remove the 0/ directory if a 0.orig/ directory also exists. This corresponds to a frequent idiom and can be used quite safely for most cases. ENH: add -serial / -parallel preference for foamRunTutorials --- bin/foamCleanTutorials | 109 +++++++++++++++++++++++++++-------------- bin/foamRunTutorials | 108 +++++++++++++++++++++++++++------------- bin/foamTestTutorial | 13 +++-- 3 files changed, 152 insertions(+), 78 deletions(-) diff --git a/bin/foamCleanTutorials b/bin/foamCleanTutorials index 39eb05dc2d9..7f63ff43ee7 100755 --- a/bin/foamCleanTutorials +++ b/bin/foamCleanTutorials @@ -7,7 +7,7 @@ # \\/ M anipulation | #------------------------------------------------------------------------------ # Copyright (C) 2011 OpenFOAM Foundation -# 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. @@ -16,8 +16,8 @@ # foamCleanTutorials # # Description -# Run either Allwclean, Allclean or default cleanCase in current directory -# and all its subdirectories. +# Recursively clean an OpenFOAM case directory, +# using Allclean, Allwclean (when present) or regular cleanCase. # #------------------------------------------------------------------------------ . ${WM_PROJECT_DIR:?}/bin/tools/CleanFunctions # Tutorial clean functions @@ -34,17 +34,24 @@ printHelp() { Usage: ${0##*/} [OPTION] ${0##*/} [OPTION] directory options: - -0 use cleanCase0 instead of cleanCase - -case <dir> specify starting directory, default is cwd - -self avoid Allclean script (prevent infinite recursion) - -help print the usage + -0 Perform cleanCase, remove 0/ unconditionally + -auto Perform cleanCase, remove 0/ if 0.orig/ exists [default] + -no-auto Perform cleanCase only + -case=DIR Specify starting directory, default is cwd + -self Avoid Allclean script (prevent infinite recursion) + -help Print the usage -Recursively clean an OpenFOAM case directory. -By default uses Allclean, Allwclean when present. -The -skipFirst option is the same as -self. +Recursively clean an OpenFOAM case directory, using Allclean or Allwclean +when present. + +In the default 'auto' mode, it will use cleanCase and will automatically +remove the 0/ directory if a corresponding 0.orig directory exists. + +Equivalent options: + | -case=DIR | -case DIR | USAGE - exit 0 # clean exit + exit 0 # A clean exit } # Report error and exit @@ -63,15 +70,43 @@ die() #------------------------------------------------------------------------------ # Parse options -unset skipSelf clean0 +unset skipSelf +cleanType=auto + if [ "$#" -gt 0 ] then case "$1" in - -h | -help*) + (- | --) + shift + break # Stop option parsing + ;; + (-h | -help* | --help*) printHelp ;; + -auto) + cleanType="auto" + ;; + -no-auto) + cleanType="noauto" + ;; -0) - clean0=true + cleanType="0" + ;; + + ## long-option (internal dispatch form) + --clean=0 | --clean=auto | --clean=noauto) + cleanType="${1#*=}" + ;; + --clean=*) + echo "$0: unknown setting: $1" 1>&2 + ;; + + -case=*) + caseName="${1#*=}" + cd "$caseName" 2>/dev/null || { + echo "${0##*}: No such directory $caseName" 1>&2 + exit 2 + } ;; -case) [ "$#" -ge 2 ] || die "'$1' option requires an argument" @@ -84,10 +119,6 @@ then -self* | -skipFirst) skipSelf=true ;; - --) - shift - break - ;; *) cd "$1" 2>/dev/null || { echo "${0##*}: No such directory $1" 1>&2 @@ -95,46 +126,48 @@ then } ;; esac + shift fi -unset exitCode +# Use specialized script(s), but not on self if [ -z "$skipSelf" ] then - # Use specialized script(s) - if [ -f Allwclean ] + if [ -f ./Allwclean ] then ./Allwclean - exitCode="$?" - elif [ -f Allclean ] + exit "$?" + elif [ -f ./Allclean ] then ./Allclean - exitCode="$?" + exit "$?" fi fi - -if [ -n "$exitCode" ] -then - exit "$exitCode" -elif [ -d system ] +if [ -d system ] then - # Normal case - if [ "$clean0" = true ] - then - cleanCase0 - else - cleanCase - fi + # Tutorial case + cleanCase + case "$cleanType" in + (auto) + [ -d 0.orig ] && rm -rf 0 ;; + (0) + rm -rf 0 ;; + esac + elif [ -d Make ] then - # Normal application + # Application cleanApplication + else # Recurse into subdirectories for caseName in * do - ( cd "$caseName" 2>/dev/null && "$thisScript" ) + ( + cd "$caseName" 2>/dev/null \ + && "$thisScript" ${cleanType:+--clean=$cleanType} + ) done fi diff --git a/bin/foamRunTutorials b/bin/foamRunTutorials index d64576ce8ab..aee01174a81 100755 --- a/bin/foamRunTutorials +++ b/bin/foamRunTutorials @@ -7,7 +7,7 @@ # \\/ M anipulation | #------------------------------------------------------------------------------ # Copyright (C) 2011-2016 OpenFOAM Foundation -# Copyright (C) 2018-2020 OpenCFD Ltd. +# Copyright (C) 2018-2021 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, distributed under GPL-3.0-or-later. @@ -16,7 +16,7 @@ # foamRunTutorials # # Description -# Recursively run Allrun/Alltest or blockMesh+application, +# Recursively run Allrun/Alltest or blockMesh and application, # starting with the current directory or the specified -case directory. # # For tutorials that are known to run poorly, an Allrun-optional @@ -40,17 +40,22 @@ printHelp() { Usage: ${0##*/} [OPTION] options: - -case <dir> specify starting directory, default is cwd - -self avoid Allrun, Alltest script (prevent infinite recursion) - -test prefer Alltest script, pass -test argument to scripts - -help print the usage + -case=DIR Specify starting directory, default is cwd + -serial Prefer Allrun-serial if available + -parallel Prefer Allrun-parallel if available + -test Prefer Alltest script, pass -test argument to scripts + -self Avoid initial Allrun, Alltest scripts + (prevent infinite recursion) + -help Print the usage -Recursively run Allrun/Alltest or blockMesh+application, -starting with the current directory or the specified -case directory. -The -skipFirst option is the same as -self. +Recursively run Allrun/Alltest (or blockMesh + application) +starting from the current directory or the specified -case directory. + +Equivalent options: + | -case=DIR | -case DIR | USAGE - exit 0 # clean exit + exit 0 # A clean exit } # Report error and exit @@ -69,14 +74,44 @@ die() #------------------------------------------------------------------------------ # Parse options -unset passArgs runTests skipSelf +unset passArgs runTests runType skipSelf while [ "$#" -gt 0 ] do case "$1" in - -h | -help*) + (- | --) + shift + break # Stop option parsing + ;; + (-h* | -help* | --help*) printHelp ;; + + ## Prefer serial or parallel + -serial | -parallel) + runType="${1#*-}" + ;; + + -test) + passArgs="-test" + runTests=true + ;; + + ## long-option (internal dispatch form) + --run=serial | --run=parallel) + runType="${1#*=}" + ;; + --run=*) + echo "$0: unknown setting: $1" 1>&2 + ;; + + -case=*) + caseName="${1#*=}" + cd "$caseName" 2>/dev/null || { + echo "${0##*}: No such directory $caseName" 1>&2 + exit 2 + } + ;; -case) [ "$#" -ge 2 ] || die "'$1' option requires an argument" shift @@ -85,19 +120,11 @@ do exit 2 } ;; - -test) - passArgs="-test" - runTests=true - ;; # Avoid infinite recursion when invoked from an Allrun/Alltest script -self* | -skipFirst) skipSelf=true ;; - --) - shift - break - ;; *) break ;; @@ -106,34 +133,43 @@ do done -unset exitCode +# Use specialized script(s), but not on self if [ -z "$skipSelf" ] then # Use specialized script(s) if [ "$runTests" = true ] && [ -f Alltest ] then ./Alltest $passArgs $* - exitCode="$?" - elif [ -f Allrun ] - then - ./Allrun $passArgs $* - exitCode="$?" + exit "$?" elif [ -f Allrun-optional ] then echo "Skipped optional case $PWD" - exitCode=0 + exit 0 + fi + + # Prefer -serial or -parallel when available? + if [ -n "$runType" ] + then + if [ -f ./"Allrun-${runType}" ] + then + ./"Allrun-${runType}" $passArgs $* + exit "$?" + fi + fi + if [ -f ./Allrun ] + then + ./Allrun $passArgs $* + exit "$?" fi fi -if [ -n "$exitCode" ] -then - exit "$exitCode" -elif [ -d system ] +if [ -d system ] then # Run normal case with blockMesh and the application runApplication blockMesh runApplication $(getApplication) + else # Loop over sub-directories and compile any applications for caseName in * @@ -143,12 +179,14 @@ else ( compileApplication "$caseName" ) fi done - FOAM_TARGETS=$(for d in *; do [ -d "$d" ] && echo "$d"; done | xargs) + + subdirs=$(for d in *; do [ -d "$d" ] && echo "$d"; done | xargs) # Run all cases which have not already been run - $make -k -f $WM_PROJECT_DIR/bin/tools/MakefileDirs \ - FOAM_TARGETS="$FOAM_TARGETS" \ - FOAM_APP="$thisScript" FOAM_ARGS="$passArgs $*" + "$make" -k -f "${WM_PROJECT_DIR:?}"/bin/tools/MakefileDirs \ + FOAM_TARGETS="$subdirs" \ + FOAM_APP="$thisScript" \ + FOAM_ARGS="$passArgs ${runType:+--run=$runType} $*" fi #------------------------------------------------------------------------------ diff --git a/bin/foamTestTutorial b/bin/foamTestTutorial index e47daecc120..a2e94a217a5 100755 --- a/bin/foamTestTutorial +++ b/bin/foamTestTutorial @@ -76,7 +76,14 @@ optRunLimit=1 while [ "$#" -gt 0 ] do case "$1" in - -h* | -help*) printHelp ;; + (- | --) + shift + break # Stop option parsing + ;; + + (-h* | -help* | --help*) + printHelp + ;; -force) optForce=true @@ -102,10 +109,6 @@ do outputDir="${1#*=}" ;; - --) - break - ;; - -*) die "unknown option $1" ;; -- GitLab