#!/bin/sh #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | www.openfoam.com # \\/ M anipulation | #------------------------------------------------------------------------------ # Copyright (C) 2011-2016 OpenFOAM Foundation # Copyright (C) 2018-2021 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, distributed under GPL-3.0-or-later. # # Script # foamRunTutorials # # Description # 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 # placeholder can be used instead of the usual Allrun script. # When this is detected, the case will be skipped. # #------------------------------------------------------------------------------ . ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions # Tutorial run functions # Normally use standard "make" make="make" thisScript="$0" if [ "/${thisScript#/}" != "$thisScript" ] then thisScript="$PWD/$thisScript" fi printHelp() { cat <&2 echo echo "Error encountered:" while [ "$#" -ge 1 ]; do echo " $1"; shift; done echo echo "See '${0##*/} -help' for usage" echo exit 1 } #------------------------------------------------------------------------------ # Parse options unset passArgs runTests runType skipSelf while [ "$#" -gt 0 ] do unset caseDir case "$1" in (- | --) 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=*) caseDir="${1#*=}" ;; -case) caseDir="$2" [ -n "$#" -ge 2 ] || die "'$1' option requires an argument" shift ;; # Avoid infinite recursion when invoked from an Allrun/Alltest script -self* | -skipFirst) skipSelf=true ;; *) break ;; esac shift if [ -n "$caseDir" ] then cd "$caseDir" 2>/dev/null || { echo "${0##*/}: No such directory $caseDir" 1>&2 exit 2 } fi done # Use specialized script(s), but not on self if [ -z "$skipSelf" ] then # Use specialized script(s) if [ "$runTests" = true ] && [ -f Alltest ] then ./Alltest $passArgs $* exit "$?" elif [ -f Allrun-optional ] then echo "Skipped optional case $PWD" 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 [ -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 * do if [ -d "$caseName/Make" ] then ( compileApplication "$caseName" ) fi done 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="$subdirs" \ FOAM_APP="$thisScript" \ FOAM_ARGS="$passArgs ${runType:+--run=$runType} $*" fi #------------------------------------------------------------------------------