Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Development
openfoam
Commits
43260961
Commit
43260961
authored
Mar 19, 2010
by
Mark Olesen
Browse files
STYLE: cleanup some shell script syntax
parent
d978c79e
Changes
3
Hide whitespace changes
Inline
Side-by-side
bin/foamEndJob
View file @
43260961
...
...
@@ -85,7 +85,8 @@ setRawEntry() {
oldLine
=
`
echo
"
$oldNumLine
"
|
sed
-e
's/^[^:]*://'
`
oldKey
=
`
getKey
"
$oldLine
"
`
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
"oldKey=
$oldKey
"
echo
"lineNo=
$lineNo
"
...
...
@@ -134,9 +135,12 @@ getBoolEntry()
}
# newerFile file1 file2
newerFile
()
{
# ... could also use if [ $file1 -nt $file2 ] ...
newerFile
()
{
latest
=
`
ls
-1
-t
$1
$2
2> /dev/null |
head
-1
`
if
[
"
$latest
"
=
$1
]
;
then
if
[
"
$latest
"
=
$1
]
then
return
0
else
return
1
...
...
@@ -149,8 +153,8 @@ processExists() {
ps
-u
$LOGNAME
-o
'pid'
| fgrep
$1
>
/dev/null
}
printU
sage
()
{
cat
<<
USAGE
LABEL
u
sage
()
{
cat
<<
USAGE
Usage:
$PROGNAME
[-n] <root> <case> <pid>
or
$PROGNAME
-c <root> <case>
...
...
@@ -165,7 +169,8 @@ finish. Restores original controlDict if
The -c option clears any outstanding
$PROGNAME
for the case.
USAGELABEL
USAGE
exit
1
}
...
...
@@ -174,7 +179,8 @@ restoreDict() {
trap
2 3 15
echo
"
$PROGNAME
: Restoring controlDict from controlDict_bak."
if
[
-r
${
controlDict
}
_bak
]
;
then
if
[
-r
${
controlDict
}
_bak
]
then
cp
${
controlDict
}
_bak
$controlDict
fi
...
...
@@ -208,61 +214,69 @@ esac
#
# Initial checks
#
if
[
$#
-lt
3
]
;
then
printUsage
exit
1
if
[
$#
-lt
3
]
then
usage
fi
STOPNOW
=
''
if
[
$1
=
'-n'
]
;
then
if
[
$1
=
'-n'
]
then
STOPNOW
=
'yes'
shift
fi
CLEAR
=
''
if
[
$1
=
'-c'
]
;
then
if
[
$1
=
'-c'
]
then
CLEAR
=
'yes'
shift
if
[
$#
-ne
2
]
;
then
printUsage
exit
1
if
[
$#
-ne
2
]
then
usage
fi
ROOT
=
$1
CASE
=
$2
else
if
[
$#
-ne
3
]
;
then
printUsage
exit
1
if
[
$#
-ne
3
]
then
usage
fi
ROOT
=
$1
CASE
=
$2
PID
=
$3
fi
CASE
=
`
echo
$CASE
|
sed
-e
's!/.*!!'
`
#strip of processorXXX ending
CASE
=
`
echo
$CASE
|
sed
-e
's!/.*!!'
`
#
strip of processorXXX ending
#- Pid actually running
if
[
!
"
$CLEAR
"
]
;
then
if
[
!
"
$CLEAR
"
]
then
processExists
$PID
if
[
$?
-ne
0
]
;
then
if
[
$?
-ne
0
]
then
echo
"
$PROGNAME
: process
$PID
not running."
exit
1
fi
fi
#- case directory writeable
if
[
!
-w
$ROOT
/
$CASE
]
;
then
if
[
!
-w
$ROOT
/
$CASE
]
then
echo
"
$PROGNAME
:
$ROOT
/
$CASE
is not writeable."
exit
1
fi
#- Controldict writeable
controlDict
=
$ROOT
/
$CASE
/system/controlDict
if
[
!
-w
$controlDict
]
;
then
if
[
!
-w
$controlDict
]
then
echo
"
$PROGNAME
:
$controlDict
is not writeable."
exit
1
fi
#- runTimeModifiable
getBoolEntry
$controlDict
'runTimeModifiable'
if
[
$?
-ne
0
]
;
then
if
[
$?
-ne
0
]
then
echo
"
$PROGNAME
: runTimeModifiable not true in dictionary
$controlDict
."
exit
1
fi
...
...
@@ -270,12 +284,14 @@ fi
#
#- Check if another foamEndJob running
#
if
[
"
$CLEAR
"
]
;
then
if
[
"
$CLEAR
"
]
then
pidFiles
=
`
ls
$ROOT
/
$CASE
/.foamEndJob
*
2>/dev/null
`
for
pidFile
in
$pidFiles
do
pid
=
`
cat
$pidFile
`
if
[
"
$pid
"
]
;
then
if
[
"
$pid
"
]
then
echo
"
$PROGNAME
: found
$PROGNAME
(pid
$pid
) for Foam process"
echo
" root:
$ROOT
"
echo
" case:
$CASE
"
...
...
@@ -288,11 +304,14 @@ if [ "$CLEAR" ]; then
fi
pidFile
=
$ROOT
/
$CASE
/.foamEndJob
${
PID
}
if
[
-f
$pidFile
]
;
then
if
[
-f
$pidFile
]
then
pid
=
`
cat
$pidFile
`
if
[
"
$pid
"
]
;
then
if
[
"
$pid
"
]
then
processExists
$pid
if
[
$?
-eq
0
]
;
then
if
[
$?
-eq
0
]
then
echo
"
$PROGNAME
: found running
$PROGNAME
(pid
$pid
) for Foam process"
echo
" root:
$ROOT
"
echo
" case:
$CASE
"
...
...
@@ -314,28 +333,32 @@ echo $$ > $pidFile
#- startTime
startTime
=
`
getEntry
$controlDict
'startTime'
`
if
[
!
"
$startTime
"
]
;
then
if
[
!
"
$startTime
"
]
then
echo
"
$PROGNAME
: startTime not set in dictionary
$controlDict
."
exit
1
fi
#- Write interval
writeInterval
=
`
getEntry
$controlDict
'writeInterval'
`
if
[
!
"
$writeInterval
"
]
;
then
if
[
!
"
$writeInterval
"
]
then
echo
"
$PROGNAME
: writeInterval not set in dictionary
$controlDict
."
exit
1
fi
#- stopAt
stopAt
=
`
getEntry
$controlDict
'stopAt'
`
if
[
!
"
$stopAt
"
]
;
then
if
[
!
"
$stopAt
"
]
then
echo
"
$PROGNAME
: stopAt not set in dictionary
$controlDict
."
exit
1
fi
#- endTime
endTime
=
`
getEntry
$controlDict
'endTime'
`
if
[
!
"
$endTime
"
]
;
then
if
[
!
"
$endTime
"
]
then
echo
"
$PROGNAME
: endTime not set in dictionary
$controlDict
."
exit
1
fi
...
...
@@ -353,7 +376,8 @@ cp $controlDict ${controlDict}_bak
#- Set up handler to restore controlDict
trap
restoreDict 2 3 15
if
[
"
$STOPNOW
"
]
;
then
if
[
"
$STOPNOW
"
]
then
setRawEntry
$controlDict
'stopAt'
'nextWrite'
setRawEntry
$controlDict
'writeInterval'
'1'
...
...
@@ -385,7 +409,8 @@ if newerFile ${controlDict} ${controlDict}_bak; then
iter
=
0
while
newerFile
${
controlDict
}
${
controlDict
}
_bak
do
if
[
$iter
-ge
120
]
;
then
if
[
$iter
-ge
120
]
then
#- 120*5 sec = 10 mins passed. Give up
echo
"
$PROGNAME
: File date not yet ok after 10 mins. Giving up."
break
...
...
@@ -412,22 +437,25 @@ while true
do
sleep
5
if
[
!
-r
${
controlDict
}
_bak
]
;
then
if
[
!
-r
${
controlDict
}
_bak
]
then
echo
"
$PROGNAME
:
${
controlDict
}
_bak dissappeared. Exiting without restore."
exit
1
fi
if
newerFile
${
controlDict
}
${
controlDict
}
_bak
;
then
if
newerFile
${
controlDict
}
${
controlDict
}
_bak
then
echo
"
$PROGNAME
:
${
controlDict
}
modified externally. Exiting without restore."
exit
0
fi
processExists
$PID
if
[
$?
-ne
0
]
;
then
if
[
$?
-ne
0
]
then
#- Job finished
break
fi
#echo "Foam job $PID still running ..."
#
echo "Foam job $PID still running ..."
done
#- Dictionary restore
...
...
bin/foamJob
View file @
43260961
...
...
@@ -30,14 +30,14 @@
#
#------------------------------------------------------------------------------
usage
()
{
while
[
"$#"
-ge
1
]
;
do
echo
"
$1
"
;
shift
;
done
cat
<<
USAGE
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
-s also sends output to screen
-p parallel run of processors
-s also sends output to screen
-v <ver> specify OpenFOAM version
-help print the usage
...
...
@@ -45,56 +45,46 @@ options:
Redirects the output to 'log' in the case directory
USAGE
exit
1
exit
1
}
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
}
# grep for $1
getPID
()
{
ps
-u
$LOGNAME
-o
'pid,args'
| fgrep
"
$1
"
| fgrep
-v
grep
|
head
-1
|
awk
'{ print $1 }'
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
}
consultGuide
()
{
cat
<<
EOF
Please consult the User Guide for details of parallel running
EOF
}
# MAIN SCRIPT
#~~~~~~~~~~~~
SCREEN
=
no
PARALLEL
=
no
unset
parallelOpt screenOpt
# parse options
...
...
@@ -110,12 +100,12 @@ do
shift
2
cd
"
$caseDir
"
2>/dev/null
||
usage
"directory does not exist: '
$caseDir
'"
;;
-
s
)
SCREEN
=
yes
-
p
)
parallelOpt
=
true
shift
;;
-
p
)
PARALLEL
=
yes
-
s
)
screenOpt
=
true
shift
;;
-v
)
...
...
@@ -136,100 +126,119 @@ do
esac
done
if
[
"$#"
-lt
1
]
;
then
usage
"No application specified"
if
[
"$#"
-lt
1
]
then
usage
"No application specified"
fi
# use foamExec for a specified version and for remote (parallel) runs
if
[
-n
"
$version
"
-o
"
$PARALLEL
"
=
yes
]
;
then
APPLICATION
=
`
findExec foamExec
`
if
[
$?
-ne
0
]
;
then
usage
"'foamExec' not found"
fi
if
[
-n
"
$version
"
]
;
then
APPLICATION
=
"
$APPLICATION
-v
$version
"
fi
if
[
-n
"
$version
"
-o
"
$parallelOpt
"
=
true
]
then
APPLICATION
=
`
findExec foamExec
`
if
[
$?
-ne
0
]
then
usage
"'foamExec' not found"
fi
if
[
-n
"
$version
"
]
then
APPLICATION
=
"
$APPLICATION
-v
$version
"
fi
else
APPLICATION
=
`
findExec
$1
`
if
[
$?
-ne
0
]
;
then
usage
"Application '
$1
' executable not found"
fi
echo
"Application :
$1
"
shift
APPLICATION
=
`
findExec
$1
`
if
[
$?
-ne
0
]
then
usage
"Application '
$1
' executable not found"
fi
echo
"Application :
$1
"
shift
fi
if
[
"
$PARALLEL
"
=
no
]
;
then
#
# RUN ON SINGLE PROCESSOR
#
if
[
"
$SCREEN
"
=
no
]
;
then
echo
"Executing:
$APPLICATION
$@
> log 2>&1 &"
$APPLICATION
$@
>
log 2>&1 &
if
[
"
$parallelOpt
"
=
true
]
then
# parallel
# ~~~~~~~~
#
# is the case decomposed?
#
if
[
-r
"processor0"
]
then
NPROCS
=
"
`
/bin/ls
-1d
processor
*
|
wc
-l
`
"
else
echo
"Executing:
$APPLICATION
$@
| tee log &"
$APPLICATION
$@
|
tee
log &
wait
$!
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
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
"
#
# 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
#
# 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
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
else
#
# 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
#------------------------------------------------------------------------------
bin/mpirunDebug
View file @
43260961
...
...
@@ -40,34 +40,39 @@ else
fi
printUsage
()
{
echo
""
echo
"Usage:
${
0
##*/
}
-np <dd> <executable> <args>"
echo
""
echo
"This will run like mpirun but with each process in an xterm"
usage
()
{
cat
<<
USAGE
Usage:
${
0
##*/
}
-np <dd> <executable> <args>
* This will run like mpirun but with each process in an XTerm
USAGE
exit
1
}
nProcs
=
''
exec
=
''
args
=
''
unset
nProcs
exec
args
while
[
"
$1
"
!=
""
]
;
do
while
[
"
$1
"
!=
""
]
do
echo
"
$1
"
case
$1
in
-np
)
-np
)
nProcs
=
$2
shift
;;
*
)
if
[
!
"
$exec
"
]
;
then
*
)
if
[
!
"
$exec
"
]
then
exec
=
$1
elif
[
!
"
$args
"
]
;
then
elif
[
!
"
$args
"
]
then
args
=
"
\"
$1
\"
"
else
args
=
"
$args
\"
$1
\"
"
fi
;;
esac
shift
done
...
...
@@ -76,27 +81,19 @@ echo "nProcs=$nProcs"
echo
"exec=
$exec
"
echo
"args=
$args
"
if
[
!
"
$nProcs
"
]
;
then
printUsage
exit
1
fi
if
[
!
"
$args
"
]
;
then
printUsage
exit
1
fi
if
[
!
"
$exec
"
]
;
then
printUsage
exit
1