View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001655 | OpenFOAM | Bug | public | 2015-04-13 13:26 | 2015-06-15 17:56 |
Reporter | Svensen | Assigned To | henry | ||
Priority | normal | Severity | feature | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | GNU/Linux | OS | Ubuntu | OS Version | 14.04 |
Summary | 0001655: foamJob. append output | ||||
Description | It would be nice if foamJob can append the output to the existing log instead of overwriting it. So the whole statistics for the case which was runned several times can be stored in the only one log file | ||||
Tags | No tags attached. | ||||
|
Could you provide a patch for this? |
|
foamJob-append-flag.patch (2,547 bytes)
diff --git a/bin/foamJob b/bin/foamJob index 20793c3..4d33c5d 100755 --- a/bin/foamJob +++ b/bin/foamJob @@ -40,6 +40,7 @@ options: -case <dir> specify alternative case directory, default is the cwd -parallel parallel run of processors -screen also sends output to screen + -append append to log file instead of overwriting it -version <ver> specify an alternative OpenFOAM version -help print the usage @@ -127,6 +128,10 @@ do parallelOpt=true shift ;; + -a | -append) + appendOpt=true + shift + ;; -s | -screen) screenOpt=true shift @@ -239,11 +244,18 @@ then # if [ "$screenOpt" = true ] then - echo "Executing: $mpirun $mpiopts $APPLICATION $(echoArgs "$@") -parallel | tee log" - $mpirun $mpiopts $APPLICATION "$@" -parallel | tee log + [ "$appendOpt" = true ] && teeOpts=" -a" + echo "Executing: $mpirun $mpiopts $APPLICATION $(echoArgs "$@") -parallel | tee$teeOpts log" + $mpirun $mpiopts $APPLICATION "$@" -parallel | tee $teeOpts log else - echo "Executing: $mpirun $mpiopts $APPLICATION $(echoArgs "$@") -parallel > log 2>&1" - $mpirun $mpiopts $APPLICATION "$@" -parallel > log 2>&1 & + if [ "$appendOpt" = true ] + then + echo "Executing: $mpirun $mpiopts $APPLICATION $(echoArgs "$@") -parallel >> log 2>&1" + $mpirun $mpiopts $APPLICATION "$@" -parallel >> log 2>&1 & + else + echo "Executing: $mpirun $mpiopts $APPLICATION $(echoArgs "$@") -parallel > log 2>&1" + $mpirun $mpiopts $APPLICATION "$@" -parallel > log 2>&1 & + fi fi else @@ -252,12 +264,19 @@ else # if [ "$screenOpt" = true ] then - echo "Executing: $APPLICATION $(echoArgs "$@") | tee log &" - $APPLICATION "$@" | tee log & + [ "$appendOpt" = true ] && teeOpts=" -a" + echo "Executing: $APPLICATION $(echoArgs "$@") | tee$teeOpts log &" + $APPLICATION "$@" | tee $teeOpts log & wait $! else - echo "Executing: $APPLICATION $(echoArgs "$@") > log 2>&1 &" - $APPLICATION "$@" > log 2>&1 & + if [ "$appendOpt" = true ] + then + echo "Executing: $APPLICATION $(echoArgs "$@") >> log 2>&1 &" + $APPLICATION "$@" >> log 2>&1 & + else + echo "Executing: $APPLICATION $(echoArgs "$@") > log 2>&1 &" + $APPLICATION "$@" > log 2>&1 & + fi fi fi |
|
Attached quick solution. Not quite sure it is in accord with patch submission guidelines. |
|
@alexeym: Which version of OpenFOAM does the patch you provide apply to? I tried both OpenFOAM-2.3.x and OpenFOAM-dev but it failed for both. Could you provide the complete foamJob script file and I will merge it line by line. |
|
Patch was created for 2.3.1. Just tested, it works for 2.3.1 and 2.3.0. Please find complete foamJob script and terminal output on my RHEL 7 workstation attached. |
|
foamJob (7,177 bytes)
#!/bin/sh #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation # \\/ M anipulation | #------------------------------------------------------------------------------- # License # This file is part of OpenFOAM. # # OpenFOAM 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. # # OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. # # Script # foamJob # # Description # Run an OpenFOAM job in background. # Redirects the output to 'log' in the case directory. # #------------------------------------------------------------------------------ usage() { exec 1>&2 while [ "$#" -ge 1 ]; do echo "$1"; shift; done cat<<USAGE Usage: ${0##*/} [OPTION] <application> ... options: -case <dir> specify alternative case directory, default is the cwd -parallel parallel run of processors -screen also sends output to screen -append append to log file instead of overwriting it -version <ver> specify an alternative OpenFOAM version -help print the usage * run an OpenFOAM job in background. Redirects the output to 'log' in the case directory USAGE exit 1 } #for being able to echo strings that have single quotes echoArgs() { addSpace="" for stringItem in "$@"; do echo -n "${addSpace}" if [ "${stringItem##* }" = "$stringItem" ] then echo -n "$stringItem" addSpace=" " else echo -n "'$stringItem'" addSpace=" " fi done unset stringItem addSpace } unset version # replacement for possibly buggy 'which' findExec() { case "$1" in */*) if [ -x "$1" ] then echo "$1" return 0 fi ;; esac oldIFS=$IFS IFS=':' for d in $PATH do # echo "testing: $d/$1" 1>&2 if [ -x "$d/$1" -a ! -d "$d/$1" ] then # echo "Found exec: $d/$1" 1>&2 IFS=$oldIFS echo "$d/$1" return 0 fi done IFS=$oldIFS echo "" return 1 } # MAIN SCRIPT #~~~~~~~~~~~~ unset parallelOpt screenOpt # parse options while [ "$#" -gt 0 ] do case "$1" in -h | -help) usage ;; -case) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" cd "$2" 2>/dev/null || usage "directory does not exist: '$2'" shift 2 ;; -p | -parallel) parallelOpt=true shift ;; -a | -append) appendOpt=true shift ;; -s | -screen) screenOpt=true shift ;; -v | -version) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" version="$2" shift 2 ;; --) shift break ;; -*) usage "invalid option '$1'" ;; *) break ;; esac done [ "$#" -ge 1 ] || usage "No application specified" # use foamExec for a specified version # also need foamExec for remote (parallel) runs if [ -n "$version" -o "$parallelOpt" = true ] then # when possible, determine if application even exists if [ -z "$version" ] then findExec $1 >/dev/null || usage "Application '$1' not found" fi # use foamExec for dispatching APPLICATION=`findExec foamExec` || usage "'foamExec' not found" [ -n "$version" ] && APPLICATION="$APPLICATION -version $version" # attempt to preserve the installation directory 'FOAM_INST_DIR' if [ -d "$FOAM_INST_DIR" ] then APPLICATION="$APPLICATION -prefix $FOAM_INST_DIR" fi else APPLICATION=`findExec $1` || usage "Application '$1' not found" echo "Application : $1" shift fi if [ "$parallelOpt" = true ] then # parallel # ~~~~~~~~ # # is the case decomposed? # if [ -r "processor0" ] then NPROCS="`/bin/ls -1d processor* | wc -l`" else echo "Case is not currently decomposed" if [ -r system/decomposeParDict ] then echo "system/decomposeParDict exists" echo "Try decomposing with \"foamJob decomposePar\"" exit 1 else echo "Cannot find system/decomposeParDict file required to decompose the case for parallel running." echo "Please consult the User Guide for details of parallel running" exit 1 fi fi # # locate mpirun # mpirun=`findExec mpirun` || usage "'mpirun' not found" mpiopts="-np $NPROCS" # # is the machine ready to run parallel? # echo "Parallel processing using $WM_MPLIB with $NPROCS processors" case "$WM_MPLIB" in *OPENMPI) # add hostfile info for hostfile in \ hostfile \ machines \ system/hostfile \ system/machines \ ; do if [ -r $hostfile ] then mpiopts="$mpiopts -hostfile $hostfile" break fi done ;; esac # # run (in parallel) # if [ "$screenOpt" = true ] then [ "$appendOpt" = true ] && teeOpts=" -a" echo "Executing: $mpirun $mpiopts $APPLICATION $(echoArgs "$@") -parallel | tee$teeOpts log" $mpirun $mpiopts $APPLICATION "$@" -parallel | tee $teeOpts log else if [ "$appendOpt" = true ] then echo "Executing: $mpirun $mpiopts $APPLICATION $(echoArgs "$@") -parallel >> log 2>&1" $mpirun $mpiopts $APPLICATION "$@" -parallel >> log 2>&1 & else echo "Executing: $mpirun $mpiopts $APPLICATION $(echoArgs "$@") -parallel > log 2>&1" $mpirun $mpiopts $APPLICATION "$@" -parallel > log 2>&1 & fi fi else # # run (on single processor) # if [ "$screenOpt" = true ] then [ "$appendOpt" = true ] && teeOpts=" -a" echo "Executing: $APPLICATION $(echoArgs "$@") | tee$teeOpts log &" $APPLICATION "$@" | tee $teeOpts log & wait $! else if [ "$appendOpt" = true ] then echo "Executing: $APPLICATION $(echoArgs "$@") >> log 2>&1 &" $APPLICATION "$@" >> log 2>&1 & else echo "Executing: $APPLICATION $(echoArgs "$@") > log 2>&1 &" $APPLICATION "$@" > log 2>&1 & fi fi fi #------------------------------------------------------------------------------ |
|
foamJob-patch-application.log (642 bytes)
alexeym@daphne in OpenFOAM-2.3.0$ patch -p1 < foamJob-append-flag.patch patching file bin/foamJob alexeym@daphne in OpenFOAM-2.3.0$ foamJob No application specified Usage: foamJob [OPTION] <application> ... options: -case <dir> specify alternative case directory, default is the cwd -parallel parallel run of processors -screen also sends output to screen -append append to log file instead of overwriting it -version <ver> specify an alternative OpenFOAM version -help print the usage * run an OpenFOAM job in background. Redirects the output to 'log' in the case directory |
|
Thanks, I found it worked on 2.3.0 and merged from there. It is easier if patches and/or files are provided for OpenFOAM-2.3.x and/or OpenFOAM-dev to facilitate inclusion in those public repositories and future releases. The updated script (untested) in is OpenFOAM-dev: commit 4c20de71bb8f1d383e2b14f75b565664d78270d2 if there are no problems with it I will include it in OpenFOAM-2.3.x. |
Date Modified | Username | Field | Change |
---|---|---|---|
2015-04-13 13:26 | Svensen | New Issue | |
2015-04-17 15:14 | henry | Note Added: 0004615 | |
2015-04-24 07:40 | alexeym | File Added: foamJob-append-flag.patch | |
2015-04-24 07:42 | alexeym | Note Added: 0004650 | |
2015-04-27 10:10 | henry | Note Added: 0004657 | |
2015-04-27 10:23 | alexeym | Note Added: 0004658 | |
2015-04-27 10:23 | alexeym | File Added: foamJob | |
2015-04-27 10:23 | alexeym | File Added: foamJob-patch-application.log | |
2015-04-27 10:40 | henry | Note Added: 0004659 | |
2015-06-15 17:56 | henry | Status | new => closed |
2015-06-15 17:56 | henry | Assigned To | => henry |
2015-06-15 17:56 | henry | Resolution | open => fixed |