STYLE: cleanup some shell script syntax

This commit is contained in:
Mark Olesen
2010-03-19 20:02:05 +01:00
parent d978c79e70
commit 4326096153
3 changed files with 289 additions and 233 deletions

View File

@ -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

View File

@ -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
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -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 ""