mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
STYLE: cleanup some shell script syntax
This commit is contained in:
106
bin/foamEndJob
106
bin/foamEndJob
@ -85,7 +85,8 @@ setRawEntry() {
|
|||||||
oldLine=`echo "$oldNumLine" | sed -e 's/^[^:]*://'`
|
oldLine=`echo "$oldNumLine" | sed -e 's/^[^:]*://'`
|
||||||
oldKey=`getKey "$oldLine"`
|
oldKey=`getKey "$oldLine"`
|
||||||
oldVal=`getRawEntry $1 "$2"`
|
oldVal=`getRawEntry $1 "$2"`
|
||||||
if [ ! "$oldKey" -o ! "$oldVal" -o ! "$oldLine" ]; then
|
if [ ! "$oldKey" -o ! "$oldVal" -o ! "$oldLine" ]
|
||||||
|
then
|
||||||
echo "setRawStringEntry: entry $2 not found in $1"
|
echo "setRawStringEntry: entry $2 not found in $1"
|
||||||
echo "oldKey=$oldKey"
|
echo "oldKey=$oldKey"
|
||||||
echo "lineNo=$lineNo"
|
echo "lineNo=$lineNo"
|
||||||
@ -134,9 +135,12 @@ getBoolEntry()
|
|||||||
}
|
}
|
||||||
|
|
||||||
# newerFile file1 file2
|
# newerFile file1 file2
|
||||||
newerFile() {
|
# ... could also use if [ $file1 -nt $file2 ] ...
|
||||||
|
newerFile()
|
||||||
|
{
|
||||||
latest=`ls -1 -t $1 $2 2> /dev/null | head -1`
|
latest=`ls -1 -t $1 $2 2> /dev/null | head -1`
|
||||||
if [ "$latest" = $1 ]; then
|
if [ "$latest" = $1 ]
|
||||||
|
then
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
return 1
|
return 1
|
||||||
@ -149,8 +153,8 @@ processExists() {
|
|||||||
ps -u $LOGNAME -o 'pid' | fgrep $1 >/dev/null
|
ps -u $LOGNAME -o 'pid' | fgrep $1 >/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
printUsage() {
|
usage() {
|
||||||
cat << USAGELABEL
|
cat << USAGE
|
||||||
Usage: $PROGNAME [-n] <root> <case> <pid>
|
Usage: $PROGNAME [-n] <root> <case> <pid>
|
||||||
or
|
or
|
||||||
$PROGNAME -c <root> <case>
|
$PROGNAME -c <root> <case>
|
||||||
@ -165,7 +169,8 @@ finish. Restores original controlDict if
|
|||||||
|
|
||||||
The -c option clears any outstanding $PROGNAME for the case.
|
The -c option clears any outstanding $PROGNAME for the case.
|
||||||
|
|
||||||
USAGELABEL
|
USAGE
|
||||||
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -174,7 +179,8 @@ restoreDict() {
|
|||||||
trap 2 3 15
|
trap 2 3 15
|
||||||
|
|
||||||
echo "$PROGNAME : Restoring controlDict from controlDict_bak."
|
echo "$PROGNAME : Restoring controlDict from controlDict_bak."
|
||||||
if [ -r ${controlDict}_bak ]; then
|
if [ -r ${controlDict}_bak ]
|
||||||
|
then
|
||||||
cp ${controlDict}_bak $controlDict
|
cp ${controlDict}_bak $controlDict
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -208,61 +214,69 @@ esac
|
|||||||
#
|
#
|
||||||
# Initial checks
|
# Initial checks
|
||||||
#
|
#
|
||||||
if [ $# -lt 3 ]; then
|
if [ $# -lt 3 ]
|
||||||
printUsage
|
then
|
||||||
exit 1
|
usage
|
||||||
fi
|
fi
|
||||||
|
|
||||||
STOPNOW=''
|
STOPNOW=''
|
||||||
if [ $1 = '-n' ]; then
|
if [ $1 = '-n' ]
|
||||||
|
then
|
||||||
STOPNOW='yes'
|
STOPNOW='yes'
|
||||||
shift
|
shift
|
||||||
fi
|
fi
|
||||||
CLEAR=''
|
CLEAR=''
|
||||||
if [ $1 = '-c' ]; then
|
if [ $1 = '-c' ]
|
||||||
|
then
|
||||||
CLEAR='yes'
|
CLEAR='yes'
|
||||||
shift
|
shift
|
||||||
if [ $# -ne 2 ]; then
|
if [ $# -ne 2 ]
|
||||||
printUsage
|
then
|
||||||
exit 1
|
usage
|
||||||
fi
|
fi
|
||||||
ROOT=$1
|
ROOT=$1
|
||||||
CASE=$2
|
CASE=$2
|
||||||
else
|
else
|
||||||
if [ $# -ne 3 ]; then
|
if [ $# -ne 3 ]
|
||||||
printUsage
|
then
|
||||||
exit 1
|
usage
|
||||||
fi
|
fi
|
||||||
ROOT=$1
|
ROOT=$1
|
||||||
CASE=$2
|
CASE=$2
|
||||||
PID=$3
|
PID=$3
|
||||||
fi
|
fi
|
||||||
CASE=`echo $CASE | sed -e 's!/.*!!'` #strip of processorXXX ending
|
CASE=`echo $CASE | sed -e 's!/.*!!'` # strip of processorXXX ending
|
||||||
|
|
||||||
#- Pid actually running
|
#- Pid actually running
|
||||||
if [ ! "$CLEAR" ]; then
|
if [ ! "$CLEAR" ]
|
||||||
|
then
|
||||||
processExists $PID
|
processExists $PID
|
||||||
if [ $? -ne 0 ] ;then
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
echo "$PROGNAME : process $PID not running."
|
echo "$PROGNAME : process $PID not running."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#- case directory writeable
|
#- case directory writeable
|
||||||
if [ ! -w $ROOT/$CASE ]; then
|
if [ ! -w $ROOT/$CASE ]
|
||||||
|
then
|
||||||
echo "$PROGNAME : $ROOT/$CASE is not writeable."
|
echo "$PROGNAME : $ROOT/$CASE is not writeable."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#- Controldict writeable
|
#- Controldict writeable
|
||||||
controlDict=$ROOT/$CASE/system/controlDict
|
controlDict=$ROOT/$CASE/system/controlDict
|
||||||
if [ ! -w $controlDict ]; then
|
if [ ! -w $controlDict ]
|
||||||
|
then
|
||||||
echo "$PROGNAME : $controlDict is not writeable."
|
echo "$PROGNAME : $controlDict is not writeable."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#- runTimeModifiable
|
#- runTimeModifiable
|
||||||
getBoolEntry $controlDict 'runTimeModifiable'
|
getBoolEntry $controlDict 'runTimeModifiable'
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
echo "$PROGNAME : runTimeModifiable not true in dictionary $controlDict."
|
echo "$PROGNAME : runTimeModifiable not true in dictionary $controlDict."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -270,12 +284,14 @@ fi
|
|||||||
#
|
#
|
||||||
#- Check if another foamEndJob running
|
#- Check if another foamEndJob running
|
||||||
#
|
#
|
||||||
if [ "$CLEAR" ]; then
|
if [ "$CLEAR" ]
|
||||||
|
then
|
||||||
pidFiles=`ls $ROOT/$CASE/.foamEndJob* 2>/dev/null`
|
pidFiles=`ls $ROOT/$CASE/.foamEndJob* 2>/dev/null`
|
||||||
for pidFile in $pidFiles
|
for pidFile in $pidFiles
|
||||||
do
|
do
|
||||||
pid=`cat $pidFile`
|
pid=`cat $pidFile`
|
||||||
if [ "$pid" ]; then
|
if [ "$pid" ]
|
||||||
|
then
|
||||||
echo "$PROGNAME : found $PROGNAME (pid $pid) for Foam process"
|
echo "$PROGNAME : found $PROGNAME (pid $pid) for Foam process"
|
||||||
echo " root: $ROOT"
|
echo " root: $ROOT"
|
||||||
echo " case: $CASE"
|
echo " case: $CASE"
|
||||||
@ -288,11 +304,14 @@ if [ "$CLEAR" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
pidFile=$ROOT/$CASE/.foamEndJob${PID}
|
pidFile=$ROOT/$CASE/.foamEndJob${PID}
|
||||||
if [ -f $pidFile ]; then
|
if [ -f $pidFile ]
|
||||||
|
then
|
||||||
pid=`cat $pidFile`
|
pid=`cat $pidFile`
|
||||||
if [ "$pid" ]; then
|
if [ "$pid" ]
|
||||||
|
then
|
||||||
processExists $pid
|
processExists $pid
|
||||||
if [ $? -eq 0 ] ;then
|
if [ $? -eq 0 ]
|
||||||
|
then
|
||||||
echo "$PROGNAME : found running $PROGNAME (pid $pid) for Foam process"
|
echo "$PROGNAME : found running $PROGNAME (pid $pid) for Foam process"
|
||||||
echo " root: $ROOT"
|
echo " root: $ROOT"
|
||||||
echo " case: $CASE"
|
echo " case: $CASE"
|
||||||
@ -314,28 +333,32 @@ echo $$ > $pidFile
|
|||||||
|
|
||||||
#- startTime
|
#- startTime
|
||||||
startTime=`getEntry $controlDict 'startTime'`
|
startTime=`getEntry $controlDict 'startTime'`
|
||||||
if [ ! "$startTime" ]; then
|
if [ ! "$startTime" ]
|
||||||
|
then
|
||||||
echo "$PROGNAME : startTime not set in dictionary $controlDict."
|
echo "$PROGNAME : startTime not set in dictionary $controlDict."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#- Write interval
|
#- Write interval
|
||||||
writeInterval=`getEntry $controlDict 'writeInterval'`
|
writeInterval=`getEntry $controlDict 'writeInterval'`
|
||||||
if [ ! "$writeInterval" ]; then
|
if [ ! "$writeInterval" ]
|
||||||
|
then
|
||||||
echo "$PROGNAME : writeInterval not set in dictionary $controlDict."
|
echo "$PROGNAME : writeInterval not set in dictionary $controlDict."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#- stopAt
|
#- stopAt
|
||||||
stopAt=`getEntry $controlDict 'stopAt'`
|
stopAt=`getEntry $controlDict 'stopAt'`
|
||||||
if [ ! "$stopAt" ]; then
|
if [ ! "$stopAt" ]
|
||||||
|
then
|
||||||
echo "$PROGNAME : stopAt not set in dictionary $controlDict."
|
echo "$PROGNAME : stopAt not set in dictionary $controlDict."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#- endTime
|
#- endTime
|
||||||
endTime=`getEntry $controlDict 'endTime'`
|
endTime=`getEntry $controlDict 'endTime'`
|
||||||
if [ ! "$endTime" ]; then
|
if [ ! "$endTime" ]
|
||||||
|
then
|
||||||
echo "$PROGNAME : endTime not set in dictionary $controlDict."
|
echo "$PROGNAME : endTime not set in dictionary $controlDict."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -353,7 +376,8 @@ cp $controlDict ${controlDict}_bak
|
|||||||
#- Set up handler to restore controlDict
|
#- Set up handler to restore controlDict
|
||||||
trap restoreDict 2 3 15
|
trap restoreDict 2 3 15
|
||||||
|
|
||||||
if [ "$STOPNOW" ]; then
|
if [ "$STOPNOW" ]
|
||||||
|
then
|
||||||
setRawEntry $controlDict 'stopAt' 'nextWrite'
|
setRawEntry $controlDict 'stopAt' 'nextWrite'
|
||||||
setRawEntry $controlDict 'writeInterval' '1'
|
setRawEntry $controlDict 'writeInterval' '1'
|
||||||
|
|
||||||
@ -385,7 +409,8 @@ if newerFile ${controlDict} ${controlDict}_bak; then
|
|||||||
iter=0
|
iter=0
|
||||||
while newerFile ${controlDict} ${controlDict}_bak
|
while newerFile ${controlDict} ${controlDict}_bak
|
||||||
do
|
do
|
||||||
if [ $iter -ge 120 ]; then
|
if [ $iter -ge 120 ]
|
||||||
|
then
|
||||||
#- 120*5 sec = 10 mins passed. Give up
|
#- 120*5 sec = 10 mins passed. Give up
|
||||||
echo "$PROGNAME : File date not yet ok after 10 mins. Giving up."
|
echo "$PROGNAME : File date not yet ok after 10 mins. Giving up."
|
||||||
break
|
break
|
||||||
@ -412,22 +437,25 @@ while true
|
|||||||
do
|
do
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
if [ ! -r ${controlDict}_bak ]; then
|
if [ ! -r ${controlDict}_bak ]
|
||||||
|
then
|
||||||
echo "$PROGNAME : ${controlDict}_bak dissappeared. Exiting without restore."
|
echo "$PROGNAME : ${controlDict}_bak dissappeared. Exiting without restore."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if newerFile ${controlDict} ${controlDict}_bak; then
|
if newerFile ${controlDict} ${controlDict}_bak
|
||||||
|
then
|
||||||
echo "$PROGNAME : ${controlDict} modified externally. Exiting without restore."
|
echo "$PROGNAME : ${controlDict} modified externally. Exiting without restore."
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
processExists $PID
|
processExists $PID
|
||||||
if [ $? -ne 0 ] ;then
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
#- Job finished
|
#- Job finished
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
#echo "Foam job $PID still running ..."
|
# echo "Foam job $PID still running ..."
|
||||||
done
|
done
|
||||||
|
|
||||||
#- Dictionary restore
|
#- Dictionary restore
|
||||||
|
|||||||
265
bin/foamJob
265
bin/foamJob
@ -30,14 +30,14 @@
|
|||||||
#
|
#
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
usage() {
|
usage() {
|
||||||
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
|
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
|
||||||
cat<<USAGE
|
cat<<USAGE
|
||||||
|
|
||||||
Usage: ${0##*/} [OPTION] <application> ...
|
Usage: ${0##*/} [OPTION] <application> ...
|
||||||
options:
|
options:
|
||||||
-case <dir> specify alternative case directory, default is the cwd
|
-case <dir> specify alternative case directory, default is the cwd
|
||||||
-s also sends output to screen
|
|
||||||
-p parallel run of processors
|
-p parallel run of processors
|
||||||
|
-s also sends output to screen
|
||||||
-v <ver> specify OpenFOAM version
|
-v <ver> specify OpenFOAM version
|
||||||
-help print the usage
|
-help print the usage
|
||||||
|
|
||||||
@ -45,56 +45,46 @@ options:
|
|||||||
Redirects the output to 'log' in the case directory
|
Redirects the output to 'log' in the case directory
|
||||||
|
|
||||||
USAGE
|
USAGE
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
unset version
|
unset version
|
||||||
|
|
||||||
# replacement for possibly buggy 'which'
|
# replacement for possibly buggy 'which'
|
||||||
findExec() {
|
findExec() {
|
||||||
case "$1" in
|
case "$1" in
|
||||||
*/*)
|
*/*)
|
||||||
if [ -x "$1" ] ; then
|
if [ -x "$1" ]
|
||||||
echo "$1"
|
then
|
||||||
return 0
|
echo "$1"
|
||||||
fi
|
return 0
|
||||||
;;
|
fi
|
||||||
esac
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
oldIFS=$IFS
|
oldIFS=$IFS
|
||||||
IFS=':'
|
IFS=':'
|
||||||
for d in $PATH
|
for d in $PATH
|
||||||
do
|
do
|
||||||
# echo "testing: $d/$1" 1>&2
|
# echo "testing: $d/$1" 1>&2
|
||||||
if [ -x "$d/$1" -a ! -d "$d/$1" ] ; then
|
if [ -x "$d/$1" -a ! -d "$d/$1" ]
|
||||||
# echo "Found exec: $d/$1" 1>&2
|
then
|
||||||
IFS=$oldIFS
|
# echo "Found exec: $d/$1" 1>&2
|
||||||
echo "$d/$1"
|
IFS=$oldIFS
|
||||||
return 0
|
echo "$d/$1"
|
||||||
fi
|
return 0
|
||||||
done
|
fi
|
||||||
IFS=$oldIFS
|
done
|
||||||
echo ""
|
IFS=$oldIFS
|
||||||
return 1
|
echo ""
|
||||||
}
|
return 1
|
||||||
|
|
||||||
# grep for $1
|
|
||||||
getPID() {
|
|
||||||
ps -u $LOGNAME -o 'pid,args' | fgrep "$1 " | fgrep -v grep | head -1 | awk '{ print $1 }'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
consultGuide() {
|
|
||||||
cat<<EOF
|
|
||||||
|
|
||||||
Please consult the User Guide for details of parallel running
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# MAIN SCRIPT
|
# MAIN SCRIPT
|
||||||
#~~~~~~~~~~~~
|
#~~~~~~~~~~~~
|
||||||
SCREEN=no
|
unset parallelOpt screenOpt
|
||||||
PARALLEL=no
|
|
||||||
|
|
||||||
|
|
||||||
# parse options
|
# parse options
|
||||||
@ -110,12 +100,12 @@ do
|
|||||||
shift 2
|
shift 2
|
||||||
cd "$caseDir" 2>/dev/null || usage "directory does not exist: '$caseDir'"
|
cd "$caseDir" 2>/dev/null || usage "directory does not exist: '$caseDir'"
|
||||||
;;
|
;;
|
||||||
-s)
|
-p)
|
||||||
SCREEN=yes
|
parallelOpt=true
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-p)
|
-s)
|
||||||
PARALLEL=yes
|
screenOpt=true
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-v)
|
-v)
|
||||||
@ -136,100 +126,119 @@ do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ "$#" -lt 1 ]; then
|
if [ "$#" -lt 1 ]
|
||||||
usage "No application specified"
|
then
|
||||||
|
usage "No application specified"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# use foamExec for a specified version and for remote (parallel) runs
|
# use foamExec for a specified version and for remote (parallel) runs
|
||||||
if [ -n "$version" -o "$PARALLEL" = yes ]; then
|
if [ -n "$version" -o "$parallelOpt" = true ]
|
||||||
APPLICATION=`findExec foamExec`
|
then
|
||||||
if [ $? -ne 0 ]; then
|
APPLICATION=`findExec foamExec`
|
||||||
usage "'foamExec' not found"
|
if [ $? -ne 0 ]
|
||||||
fi
|
then
|
||||||
if [ -n "$version" ]; then
|
usage "'foamExec' not found"
|
||||||
APPLICATION="$APPLICATION -v $version"
|
fi
|
||||||
fi
|
if [ -n "$version" ]
|
||||||
|
then
|
||||||
|
APPLICATION="$APPLICATION -v $version"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
APPLICATION=`findExec $1`
|
APPLICATION=`findExec $1`
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]
|
||||||
usage "Application '$1' executable not found"
|
then
|
||||||
fi
|
usage "Application '$1' executable not found"
|
||||||
echo "Application : $1"
|
fi
|
||||||
shift
|
echo "Application : $1"
|
||||||
|
shift
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$PARALLEL" = no ]; then
|
|
||||||
#
|
if [ "$parallelOpt" = true ]
|
||||||
# RUN ON SINGLE PROCESSOR
|
then
|
||||||
#
|
# parallel
|
||||||
if [ "$SCREEN" = no ]; then
|
# ~~~~~~~~
|
||||||
echo "Executing: $APPLICATION $@ > log 2>&1 &"
|
|
||||||
$APPLICATION $@ > log 2>&1 &
|
#
|
||||||
|
# is the case decomposed?
|
||||||
|
#
|
||||||
|
if [ -r "processor0" ]
|
||||||
|
then
|
||||||
|
NPROCS="`/bin/ls -1d processor* | wc -l`"
|
||||||
else
|
else
|
||||||
echo "Executing: $APPLICATION $@ | tee log &"
|
echo "Case is not currently decomposed"
|
||||||
$APPLICATION $@ | tee log &
|
if [ -r system/decomposeParDict ]
|
||||||
wait $!
|
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`
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
usage "'mpirun' not found"
|
||||||
|
fi
|
||||||
|
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
|
||||||
|
echo "Executing: mpirun $mpiopts $APPLICATION $@ -parallel | tee log"
|
||||||
|
$mpirun $mpiopts $APPLICATION $@ -parallel | tee log
|
||||||
|
else
|
||||||
|
echo "Executing: mpirun $mpiopts $APPLICATION $@ -parallel > log 2>&1"
|
||||||
|
$mpirun $mpiopts $APPLICATION $@ -parallel > log 2>&1 &
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
#
|
||||||
|
# run (on single processor)
|
||||||
|
#
|
||||||
|
if [ "$screenOpt" = true ]
|
||||||
|
then
|
||||||
|
echo "Executing: $APPLICATION $@ | tee log &"
|
||||||
|
$APPLICATION $@ | tee log &
|
||||||
|
wait $!
|
||||||
|
else
|
||||||
|
echo "Executing: $APPLICATION $@ > log 2>&1 &"
|
||||||
|
$APPLICATION $@ > log 2>&1 &
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
|
|
||||||
#
|
|
||||||
# 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."
|
|
||||||
consultGuide
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# LOCATE MPIRUN
|
|
||||||
#
|
|
||||||
mpirun=`findExec mpirun`
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
usage "'mpirun' not found"
|
|
||||||
fi
|
|
||||||
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 [ "$SCREEN" = no ] ; then
|
|
||||||
echo "Executing: mpirun $mpiopts $APPLICATION $@ -parallel > log 2>&1"
|
|
||||||
$mpirun $mpiopts $APPLICATION $@ -parallel > log 2>&1 &
|
|
||||||
else
|
|
||||||
echo "Executing: mpirun $mpiopts $APPLICATION $@ -parallel | tee log"
|
|
||||||
$mpirun $mpiopts $APPLICATION $@ -parallel | tee log
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|||||||
151
bin/mpirunDebug
151
bin/mpirunDebug
@ -40,34 +40,39 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
printUsage() {
|
usage()
|
||||||
echo ""
|
{
|
||||||
echo "Usage: ${0##*/} -np <dd> <executable> <args>"
|
cat<<USAGE
|
||||||
echo ""
|
|
||||||
echo "This will run like mpirun but with each process in an xterm"
|
Usage: ${0##*/} -np <dd> <executable> <args>
|
||||||
|
|
||||||
|
* This will run like mpirun but with each process in an XTerm
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
nProcs=''
|
unset nProcs exec args
|
||||||
exec=''
|
|
||||||
args=''
|
|
||||||
|
|
||||||
while [ "$1" != "" ]; do
|
while [ "$1" != "" ]
|
||||||
|
do
|
||||||
echo "$1"
|
echo "$1"
|
||||||
case $1 in
|
case $1 in
|
||||||
-np)
|
-np)
|
||||||
nProcs=$2
|
nProcs=$2
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
if [ ! "$exec" ]; then
|
if [ ! "$exec" ]
|
||||||
|
then
|
||||||
exec=$1
|
exec=$1
|
||||||
elif [ ! "$args" ]; then
|
elif [ ! "$args" ]
|
||||||
|
then
|
||||||
args="\"$1\""
|
args="\"$1\""
|
||||||
else
|
else
|
||||||
args="$args \"$1\""
|
args="$args \"$1\""
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
esac
|
esac
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
@ -76,27 +81,19 @@ echo "nProcs=$nProcs"
|
|||||||
echo "exec=$exec"
|
echo "exec=$exec"
|
||||||
echo "args=$args"
|
echo "args=$args"
|
||||||
|
|
||||||
if [ ! "$nProcs" ]; then
|
[ "$nProcs" ] || usage
|
||||||
printUsage
|
[ "$args" ] || usage
|
||||||
exit 1
|
[ "$exec" ] || usage
|
||||||
fi
|
|
||||||
if [ ! "$args" ]; then
|
|
||||||
printUsage
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ ! "$exec" ]; then
|
|
||||||
printUsage
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec=`which $exec`
|
exec=`which $exec`
|
||||||
if [ ! -x "$exec" ]; then
|
if [ ! -x "$exec" ]
|
||||||
|
then
|
||||||
echo "Cannot find executable $exec or is not executable"
|
echo "Cannot find executable $exec or is not executable"
|
||||||
printUsage
|
usage
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! "$PWD" ]; then
|
if [ ! "$PWD" ]
|
||||||
|
then
|
||||||
PWD=`pwd`
|
PWD=`pwd`
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -106,43 +103,51 @@ echo "Constructed gdb initialization file $PWD/gdbCommands"
|
|||||||
|
|
||||||
$ECHO "Choose running method: 0)normal 1)gdb+xterm 2)gdb 3)log 4)log+xterm 5)xterm+valgrind: \c"
|
$ECHO "Choose running method: 0)normal 1)gdb+xterm 2)gdb 3)log 4)log+xterm 5)xterm+valgrind: \c"
|
||||||
read method
|
read method
|
||||||
if [ "$method" -ne 0 -a "$method" -ne 1 -a "$method" -ne 2 -a "$method" -ne 3 -a "$method" -ne 4 -a "$method" -ne 5 ]; then
|
case "$method" in
|
||||||
printUsage
|
0 | 1 | 2 | 3 | 4 | 5 )
|
||||||
exit 1
|
# okay
|
||||||
fi
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
$ECHO "Run all processes local or distributed? 1)local 2)remote: \c"
|
$ECHO "Run all processes local or distributed? 1)local 2)remote: \c"
|
||||||
read spawn
|
read spawn
|
||||||
if [ "$spawn" -ne 1 -a "$spawn" -ne 2 ]; then
|
if [ "$spawn" -ne 1 -a "$spawn" -ne 2 ]
|
||||||
printUsage
|
then
|
||||||
exit 1
|
usage
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# check ~/.$WM_PROJECT/$WM_PROJECT_VERSION/
|
# check ~/.$WM_PROJECT/$WM_PROJECT_VERSION/
|
||||||
# check ~/.$WM_PROJECT/
|
# check ~/.$WM_PROJECT/
|
||||||
# check <installedProject>/etc/
|
# check <installedProject>/etc/
|
||||||
if [ "$WM_PROJECT" ]; then
|
if [ "$WM_PROJECT" ]
|
||||||
|
then
|
||||||
|
|
||||||
for i in \
|
for i in \
|
||||||
$HOME/.WM_PROJECT/$WM_PROJECT_VERSION \
|
$HOME/.WM_PROJECT/$WM_PROJECT_VERSION \
|
||||||
$HOME/.WM_PROJECT \
|
$HOME/.WM_PROJECT \
|
||||||
$WM_PROJECT_DIR/etc \
|
$WM_PROJECT_DIR/etc \
|
||||||
;
|
;
|
||||||
do
|
do
|
||||||
if [ -f "$i/bashrc" ]; then
|
if [ -f "$i/bashrc" ]
|
||||||
sourceFoam="$i/bashrc"
|
then
|
||||||
break
|
sourceFoam="$i/bashrc"
|
||||||
fi
|
break
|
||||||
done
|
fi
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Construct test string for remote execution.
|
# Construct test string for remote execution.
|
||||||
# Source OpenFOAM settings if OpenFOAM environment not set.
|
# Source OpenFOAM settings if OpenFOAM environment not set.
|
||||||
# attempt to preserve the installation directory 'FOAM_INST_DIR'
|
# attempt to preserve the installation directory 'FOAM_INST_DIR'
|
||||||
if [ "$FOAM_INST_DIR" ]; then
|
if [ "$FOAM_INST_DIR" ]
|
||||||
sourceFoam='[ "$WM_PROJECT" ] || '"FOAM_INST_DIR=$FOAM_INST_DIR . $sourceFoam"
|
then
|
||||||
|
sourceFoam='[ "$WM_PROJECT" ] || '"FOAM_INST_DIR=$FOAM_INST_DIR . $sourceFoam"
|
||||||
else
|
else
|
||||||
sourceFoam='[ "$WM_PROJECT" ] || '". $sourceFoam"
|
sourceFoam='[ "$WM_PROJECT" ] || '". $sourceFoam"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "**sourceFoam:$sourceFoam"
|
echo "**sourceFoam:$sourceFoam"
|
||||||
@ -160,36 +165,45 @@ do
|
|||||||
geom="-geometry 120x20+$xpos+$ypos"
|
geom="-geometry 120x20+$xpos+$ypos"
|
||||||
node=""
|
node=""
|
||||||
|
|
||||||
if [ .$WM_MPLIB = .OPENMPI ]; then
|
if [ "$WM_MPLIB" = OPENMPI ]
|
||||||
|
then
|
||||||
node="-np 1 "
|
node="-np 1 "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "#!/bin/sh" > $procCmdFile
|
echo "#!/bin/sh" > $procCmdFile
|
||||||
if [ "$method" -eq 0 ]; then
|
case "$method" in
|
||||||
|
0)
|
||||||
echo "$sourceFoam; cd $PWD; $exec $args | tee $procLog" >> $procCmdFile
|
echo "$sourceFoam; cd $PWD; $exec $args | tee $procLog" >> $procCmdFile
|
||||||
echo "${node}$procCmdFile" >> $PWD/mpirun.schema
|
echo "${node}$procCmdFile" >> $PWD/mpirun.schema
|
||||||
elif [ "$method" -eq 1 ]; then
|
;;
|
||||||
|
1)
|
||||||
echo "$sourceFoam; cd $PWD; gdb -command $PWD/gdbCommands $exec 2>&1 | tee $procLog; read dummy" >> $procCmdFile
|
echo "$sourceFoam; cd $PWD; gdb -command $PWD/gdbCommands $exec 2>&1 | tee $procLog; read dummy" >> $procCmdFile
|
||||||
#echo "$sourceFoam; cd $PWD; $exec $args; read dummy" >> $procCmdFile
|
#echo "$sourceFoam; cd $PWD; $exec $args; read dummy" >> $procCmdFile
|
||||||
echo "${node}xterm -font fixed -title 'processor'$proc $geom -e $procCmdFile" >> $PWD/mpirun.schema
|
echo "${node}xterm -font fixed -title 'processor'$proc $geom -e $procCmdFile" >> $PWD/mpirun.schema
|
||||||
elif [ "$method" -eq 2 ]; then
|
;;
|
||||||
|
2)
|
||||||
echo "$sourceFoam; cd $PWD; gdb -command $PWD/gdbCommands >& $procLog" >> $procCmdFile
|
echo "$sourceFoam; cd $PWD; gdb -command $PWD/gdbCommands >& $procLog" >> $procCmdFile
|
||||||
echo "${node}$procCmdFile" >> $PWD/mpirun.schema
|
echo "${node}$procCmdFile" >> $PWD/mpirun.schema
|
||||||
elif [ "$method" -eq 3 ]; then
|
;;
|
||||||
|
3)
|
||||||
echo "$sourceFoam; cd $PWD; $exec $args >& $procLog" >> $procCmdFile
|
echo "$sourceFoam; cd $PWD; $exec $args >& $procLog" >> $procCmdFile
|
||||||
echo "${node}$procCmdFile" >> $PWD/mpirun.schema
|
echo "${node}$procCmdFile" >> $PWD/mpirun.schema
|
||||||
elif [ "$method" -eq 4 ]; then
|
;;
|
||||||
|
4)
|
||||||
echo "$sourceFoam; cd $PWD; $exec $args 2>&1 | tee $procLog; read dummy" >> $procCmdFile
|
echo "$sourceFoam; cd $PWD; $exec $args 2>&1 | tee $procLog; read dummy" >> $procCmdFile
|
||||||
echo "${node}xterm -font fixed -title 'processor'$proc $geom -e $procCmdFile" >> $PWD/mpirun.schema
|
echo "${node}xterm -font fixed -title 'processor'$proc $geom -e $procCmdFile" >> $PWD/mpirun.schema
|
||||||
elif [ "$method" -eq 5 ]; then
|
;;
|
||||||
|
5)
|
||||||
echo "$sourceFoam; cd $PWD; valgrind $exec $args; read dummy" >> $procCmdFile
|
echo "$sourceFoam; cd $PWD; valgrind $exec $args; read dummy" >> $procCmdFile
|
||||||
echo "${node}xterm -font fixed -title 'processor'$proc $geom -e $procCmdFile" >> $PWD/mpirun.schema
|
echo "${node}xterm -font fixed -title 'processor'$proc $geom -e $procCmdFile" >> $PWD/mpirun.schema
|
||||||
fi
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
chmod +x $procCmdFile
|
chmod +x $procCmdFile
|
||||||
|
|
||||||
let column=proc%6
|
let column=proc%6
|
||||||
if [ $proc -ne 0 -a $column -eq 0 ]; then
|
if [ $proc -ne 0 -a $column -eq 0 ]
|
||||||
|
then
|
||||||
((xpos+=600))
|
((xpos+=600))
|
||||||
((ypos=0))
|
((ypos=0))
|
||||||
else
|
else
|
||||||
@ -203,10 +217,13 @@ do
|
|||||||
echo " tail -f $procLog"
|
echo " tail -f $procLog"
|
||||||
done
|
done
|
||||||
|
|
||||||
cmd=""
|
unset cmd
|
||||||
if [ .$WM_MPLIB = .OPENMPI ]; then
|
|
||||||
|
case "$WM_MPLIB" in
|
||||||
|
OPENMPI)
|
||||||
cmd="mpirun -app $PWD/mpirun.schema </dev/null"
|
cmd="mpirun -app $PWD/mpirun.schema </dev/null"
|
||||||
elif [ .$WM_MPLIB = .MPICH ]; then
|
;;
|
||||||
|
MPICH)
|
||||||
cmd="mpiexec"
|
cmd="mpiexec"
|
||||||
for ((proc=0; proc<$nProcs; proc++))
|
for ((proc=0; proc<$nProcs; proc++))
|
||||||
do
|
do
|
||||||
@ -216,12 +233,14 @@ elif [ .$WM_MPLIB = .MPICH ]; then
|
|||||||
echo "#!/bin/sh" > $procXtermCmdFile
|
echo "#!/bin/sh" > $procXtermCmdFile
|
||||||
echo "$procCmd" >> $procXtermCmdFile
|
echo "$procCmd" >> $procXtermCmdFile
|
||||||
chmod +x $procXtermCmdFile
|
chmod +x $procXtermCmdFile
|
||||||
if [ $proc -ne 0 ]; then
|
if [ $proc -ne 0 ]
|
||||||
|
then
|
||||||
cmd="${cmd} :"
|
cmd="${cmd} :"
|
||||||
fi
|
fi
|
||||||
cmd="${cmd} -n 1 ${procXtermCmdFile}"
|
cmd="${cmd} -n 1 ${procXtermCmdFile}"
|
||||||
done < $PWD/mpirun.schema
|
done < $PWD/mpirun.schema
|
||||||
fi
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
echo "Constructed $PWD/mpirun.schema file."
|
echo "Constructed $PWD/mpirun.schema file."
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
Reference in New Issue
Block a user