#---------------------------------*- sh -*------------------------------------- # ========= | # \\ / F ield | foam-extend: Open Source CFD # \\ / O peration | Version: 4.0 # \\ / A nd | Web: http://www.foam-extend.org # \\/ M anipulation | For copyright notice see file Copyright #------------------------------------------------------------------------------ # License # This file is part of foam-extend. # # foam-extend is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # foam-extend is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with foam-extend. If not, see . # # Script # RunFunctions # # Description # #------------------------------------------------------------------------------ getApplication () { grep application system/controlDict | sed "s/application *\([a-zA-Z]*\);/\1/" } runApplication () { LOG_NAME= while getopts "l:" OPTFLAG ; do LOG_NAME=$OPTARG shift $((OPTIND-1)) ; OPTIND=1 done APP_RUN=$1; shift APP_NAME=${APP_RUN##*/} if [ -z $LOG_NAME ] ; then LOG_NAME=log.$APP_NAME fi if [ -f $LOG_NAME ] ; then echo "$APP_NAME already run on $PWD: remove log file to run" else echo "Running $APP_NAME on $PWD" cat system/fvSchemes > $LOG_NAME cat system/fvSolution >> $LOG_NAME $APP_RUN $* >> $LOG_NAME 2>&1 fi } runParallel () { LOG_NAME= while getopts "l:" OPTFLAG ; do LOG_NAME=$OPTARG shift $((OPTIND-1)) ; OPTIND=1 done APP_RUN=$1; shift APP_NAME=${APP_RUN##*/} if [ -z $LOG_NAME ] ; then LOG_NAME=log.$APP_NAME fi if [ "$WM_OSTYPE" = "MSWindows" ] then APP_RUN="${APP_RUN}.exe" fi if [ -f $LOG_NAME ] ; then echo "$APP_NAME already run on $PWD: remove log file to run" else echo "Running $APP_NAME in parallel on $PWD using $1 processes" if [ -z "$WM_MPIRUN_PROG" ] then mpirunProg=mpirun else # Allow eccentric systems to override the hardcoded mpirun mpirunProg=$WM_MPIRUN_PROG fi cat system/fvSchemes > $LOG_NAME cat system/fvSolution >> $LOG_NAME ( $mpirunProg -np $1 $APP_RUN -parallel < /dev/null > $LOG_NAME 2>&1 ) fi } compileApplication () { echo "Compiling $1 application" if ! [ -x "$(command -v lockfile)" ]; then # Missing lockfile command. Tough luck. # Without a proper lockfile command, we cannot properly serialize # wmake commands. Some tutorials might fail when many are run # simultaneously, and some of them depend on the compilation of a # common application. echo "Warning: Missing lockfile command. Your compilation may fail." if [ "$WM_USE_CMAKE" = "1" ]; then (cd $1; cmake .; make) else wmake $1 fi else # We make sure to serialize the compilation in case we are called simultaneously lockFilename="./compileApplication.lock" if [ -d "$1" ]; then lockFilename=$1/$lockFilename fi # We wait for the lock release at most 10 x 10 seconds = 100 seconds lockfile -10 -r 10 $lockFilename if [ "$WM_USE_CMAKE" = "1" ]; then (cd $1; cmake .; make) else wmake $1 fi rm -rf $lockFilename fi } compileLibrary () { echo "Compiling $1 library" if [ "$WM_USE_CMAKE" = "1" ]; (cd $1; cmake .; make) then wmake libso $1 fi } cloneCase () { if [ -d $2 ] ; then echo "Case already cloned: remove case directory $2 to clone" else echo "Cloning $2 case from $1" mkdir $2 cpfiles="0 system constant" for f in $cpfiles do cp -r $1/$f $2 done fi } makeFsiCaseLinks () { if [ "$WM_OSTYPE" = "MSWindows" ] then cd $1 cd system cp -r ../../$2/system $2 cd ../constant cp -r ../../$2/constant $2 cd ../0 cp -r ../../$2/0 $2 cd ../.. else cd $1 cd system ln -s ../../$2/system $2 cd ../constant ln -s ../../$2/constant $2 cd ../0 ln -s ../../$2/0 $2 cd ../.. fi } makeFsiResultsLinks () { if [ "$WM_OSTYPE" = "MSWindows" ] then cd $1 TIME_DIRS=`foamInfoExec -times | sed '1,/constant/d'` echo "makeFsiResultsLinks for" $TIME_DIRS cd ../$2 for T in $TIME_DIRS do cp -r ../$1/${T}/solid ${T} done cd .. else cd $1 TIME_DIRS=`foamInfoExec -times | sed '1,/constant/d'` echo "makeFsiResultsLinks for" $TIME_DIRS cd ../$2 for T in $TIME_DIRS do ln -s ../$1/${T}/solid ${T} done cd .. fi } #------------------------------------------------------------------------------