#!/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) 2017-2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License # . # # Script # Alltest # # Description # Quickly test the tutorials and write out the scheme/solver information # # Environment # The entire OpenFOAM environment (WM_PROJECT_DIR, etc) # #------------------------------------------------------------------------------ cd "${0%/*}" || exit # Run from this directory usage() { exec 1>&2 while [ "$#" -ge 1 ]; do echo "$1"; shift; done cat<&2 echo echo "Error encountered:" while [ "$#" -ge 1 ]; do echo " $1"; shift; done echo echo "See '${0##*/} -help' for usage" echo exit 1 } #------------------------------------------------------------------------------ rootDir="./" adjustDebugSwitches=false useDefaultSchemes=false useGit=auto unset optForce # Parse options while [ "$#" -gt 0 ] do case "$1" in -h | -help) usage ;; -f | -force) optForce=true ;; -r | -root) [ "$#" -ge 2 ] || die "'$1' option requires an argument" rootDir="$2" shift ;; -git) useGit=true ;; -no-git) unset useGit ;; -debug) adjustDebugSwitches=true ;; -default) useDefaultSchemes=true ;; *) die "Unknown option/argument: '$1'" ;; esac shift done # Sets FOAM_TUTORIALS directory location, as required . "${WM_PROJECT_DIR:?}"/bin/tools/RunFunctions #------------------------------------------------------------------------------ # # Set up a default scheme on all schemes # setDefaultFvSchemes() { cat<&1 echo "Not adjusting DebugSwitches ..." 2>&1 unset ETC_CONTROL_DICT else grep DebugSwitches "${ETC_CONTROL_DICT}" 1> /dev/null 2>&1 || { echo "No DebugSwitches to adjust in ${ETC_CONTROL_DICT}" 1>&2 unset ETC_CONTROL_DICT } fi else echo "No main (user or project) controlDict to adjust" 1>&2 unset ETC_CONTROL_DICT fi fi TEST_RUN_DIR=../tutorialsTest FV_SCHEMES=\ " \ gradScheme \ divScheme \ laplacianScheme \ interpolationScheme \ snGradScheme \ " SCHEMES_FILE="FvSchemes" SCHEMES_TEMP="FvSchemes.temp" SOLVERS_FILE="FvSolution" SOLVERS_TEMP="FvSolution.temp" # # MAIN # if [ -d "$TEST_RUN_DIR" ] then if [ "$optForce" = true ] then echo "Removing old directory: $TEST_RUN_DIR" 1>&2 rm -rf $TEST_RUN_DIR else echo "Directory already exists: $TEST_RUN_DIR" 1>&2 echo " use -force to remove" 1>&2 exit 1 fi fi # Remove old build/ directory buildDir="$WM_PROJECT_DIR/build/$WM_OPTIONS/${TEST_RUN_DIR##*/}" if [ -d "$buildDir" ] then echo "Removing old build directory: $buildDir" 1>&2 rm -rf "$buildDir" fi unset gitbase if [ -n "$useGit" ] then if git rev-parse --is-inside-work-tree > /dev/null 2>&1 then gitbase="$(git rev-parse --show-toplevel 2>/dev/null)" fi case "$useGit" in auto) if [ -n "$gitbase" ] then echo "Detected git repository" 1>&2 else echo "No git repository detected" 1>&2 fi ;; true) [ -n "$gitbase" ] || die "Not in a git repository" ;; esac fi if [ -n "$gitbase" ] then echo "Copying the tutorials from current git branch" 1>&2 mkdir -p "$TEST_RUN_DIR" ( cd "$gitbase/tutorials" && git archive --format=tar HEAD . ) | \ ( cd "$TEST_RUN_DIR" && tar -xf - ) else echo "Copying the tutorials directory" 1>&2 cp -a "$rootDir" "$TEST_RUN_DIR" fi cd "$TEST_RUN_DIR" || exit # Generate Alltest script (replacement for this one) echo "Generating Alltest script" 1>&2 echo '#!/bin/sh' >| Alltest echo 'exec "${0%/*}/Allrun" -test "$@"' >> Alltest # Adjust etc controlDict, and clean up on termination and on Ctrl-C if [ -f "${ETC_CONTROL_DICT}" ] then trap 'mv ${ETC_CONTROL_DICT}.orig ${ETC_CONTROL_DICT} 2>/dev/null; exit 0' \ EXIT TERM INT echo "Modifying DebugSwitches: ${ETC_CONTROL_DICT}" 1>&2 cp -f "${ETC_CONTROL_DICT}" "${ETC_CONTROL_DICT}.orig" sed \ -e 's/\(fvSchemes[ \t]*\)\([0-9]\);/\1 1;/g' \ -e 's/"\(solution[ \t]*\)\([0-9]\);/\1 1;/g' \ "${ETC_CONTROL_DICT}.orig" > "${ETC_CONTROL_DICT}" 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 if [ "$useDefaultSchemes" = true ] then echo "Modifying the fvSchemes to contain only default schemes" 1>&2 for FV_SC in $(find . -name fvSchemes -type f) do for S in $FV_SCHEMES do cp -f "${FV_SC}" "${FV_SC}.orig" sed -e /"${S}"/,/$p/d "${FV_SC}.orig" > "${FV_SC}" done setDefaultFvSchemes >> "${FV_SC}" done fi [ -f Allrun ] || cp -f "${FOAM_TUTORIALS:?}/Allrun" . echo "Starting Allrun -test" 1>&2 echo " $PWD" 1>&2 echo 1>&2 exec ./Allrun -test #------------------------------------------------------------------------------