#!/bin/sh #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation # \\/ M anipulation | Copyright (C) 2017-2018 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 # #------------------------------------------------------------------------------ cd ${0%/*} || exit 1 # 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 } #------------------------------------------------------------------------------ ROOT="./" unset DEFAULT_SCHEMES useGit=auto # Parse options while [ "$#" -gt 0 ] do case "$1" in -h | -help) usage ;; -r | -root) [ "$#" -ge 2 ] || die "'$1' option requires an argument" ROOT="$2" shift ;; -git) useGit=true ;; -no-git) unset useGit ;; -d | -default) DEFAULT_SCHEMES=true ;; *) die "Unknown option/argument: '$1'" ;; esac shift done # Set FOAM_TUTORIALS directory location, as required. . $WM_PROJECT_DIR/bin/tools/RunFunctions #------------------------------------------------------------------------------ # # Set up a default scheme on all schemes # setDefaultFvSchemes() { cat<&2 rm -rf $TEST_RUN_DIR 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 if [ -e ${MAIN_CONTROL_DICT}.orig ] then die "File ${MAIN_CONTROL_DICT}.orig already exists" \ "Did Alltest fail in some way and then run again?" 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 "$TUTORIALS_DIR" "$TEST_RUN_DIR" fi echo 1>&2 # Clean up on termination and on Ctrl-C trap 'mv ${MAIN_CONTROL_DICT}.orig ${MAIN_CONTROL_DICT} 2>/dev/null; exit 0' \ EXIT TERM INT cp -f "${MAIN_CONTROL_DICT}" "${MAIN_CONTROL_DICT}.orig" echo "Modifying ${MAIN_CONTROL_DICT}" 1>&2 sed \ -e s/"\(fvSchemes[ \t]*\)\([0-9]\);"/"\1 1;"/g \ -e s/"\(solution[ \t]*\)\([0-9]\);"/"\1 1;"/g \ "${MAIN_CONTROL_DICT}.orig" > "${MAIN_CONTROL_DICT}" cd "${TEST_RUN_DIR}" || exit 1 echo "Modifying the controlDicts to run only one time step" 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 [ "$DEFAULT_SCHEMES" = 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 cp -f $FOAM_TUTORIALS/Allrun . ./Allrun -test sed -e :a -e '/\\$/N; s/\\\n//; ta' Allrun > temp APPLICATIONS=\ $(grep "applications=" temp | sed 's/applications=\"\([A-Za-z \t]*\)\"/\1/g') rm $SCHEMES_FILE > /dev/null 2>&1 for APP in $APPLICATIONS do echo $APP >> $SCHEMES_FILE echo "$APP: " | tr -d "\n" >> $SOLVERS_FILE for ST in $FV_SCHEMES do rm $SCHEMES_TEMP $SOLVERS_TEMP > /dev/null 2>&1 echo " ${ST}" >> $SCHEMES_FILE for LOG in $(find ${APP} -name "log.${APP}" -type f) do for S in $(grep ${ST} ${LOG} | cut -d" " -f4) do echo " ${S}" >> $SCHEMES_TEMP done echo $(grep solver ${LOG} | cut -d" " -f4) >> $SOLVERS_TEMP done if [ -f $SCHEMES_TEMP ] then cat $SCHEMES_TEMP | sort -u >> $SCHEMES_FILE fi done cat $SOLVERS_TEMP | tr " " "\n" | sort -u | tr "\n" " " >> $SOLVERS_FILE echo "" >> $SOLVERS_FILE done #------------------------------------------------------------------------------