3 |
# $Header$ |
# $Header$ |
4 |
# $Name$ |
# $Name$ |
5 |
|
|
6 |
|
run_mpi() |
7 |
|
{ |
8 |
|
# run_mpi output_file |
9 |
|
echo "execute: '$RUNMPI'" |
10 |
|
$RUNMPI |
11 |
|
if test $# = 1 |
12 |
|
then mv STDOUT.0000 $1 |
13 |
|
echo 'mv STDOUT.0000' $1 |
14 |
|
fi |
15 |
|
} |
16 |
|
|
17 |
rnp_loc() |
rnp_loc() |
18 |
{ |
{ |
19 |
# rnp_loc arg_1 arg_2 |
# rnp_loc arg_1 arg_2 |
30 |
|
|
31 |
#--------------------------- |
#--------------------------- |
32 |
|
|
|
#- default: |
|
|
Nit=2 |
|
|
prt=1 # 1 = print some informations ; 2 = print more informations |
|
|
action=1 |
|
|
cmd='mv -f' |
|
|
tmpDir='temp_tst' |
|
|
|
|
|
#- executable: |
|
|
mpi=0 |
|
|
if [ $mpi -ge 1 ] |
|
|
then gcmExc=run_ifc_mpi |
|
|
else gcmExc=mitgcmuv |
|
|
fi |
|
|
|
|
33 |
#- exit status: |
#- exit status: |
34 |
# 0 -> test is successful |
# 0 -> test is successful |
35 |
# 1 -> fail in 1rst run |
# 1 -> fail in 1rst run |
36 |
# 2 -> fail in 2nd run |
# 2 -> fail in 2nd run |
37 |
# 3 -> fail in 3rd run |
# 3 -> fail in 3rd run |
38 |
# 4 -> pickup*.data (written at the end of 2+2 & 4 it run) are different |
# 4 -> pickup*.data (written at the end of 2+2 & 4 it run) are different |
39 |
# 5 -> pickup*.meta (written at the end of 2+2 & 4 it run) are different |
# 5 -> pickup*.meta (written at the end of 2+2 & 4 it run) are different |
40 |
# 6 -> missing 'data.tst' file (removed or not yet generated ?) |
# 6 -> missing 'data.tst' file (removed or not yet generated ?) |
42 |
# 8 -> missing information (in standard output of previous run) about pickup |
# 8 -> missing information (in standard output of previous run) about pickup |
43 |
# 9 -> error in argument list |
# 9 -> error in argument list |
44 |
|
|
45 |
|
#- default: |
46 |
|
Nit=2 |
47 |
|
prt=1 # 1 = print some informations ; 2 = print more informations |
48 |
|
action=1 |
49 |
|
cmdMV='mv -f' |
50 |
|
tmpDir='temp_tst' |
51 |
|
|
52 |
|
#- default executable, command-line , using MPI: |
53 |
|
gcmEXE=./mitgcmuv |
54 |
|
cmdEXE= |
55 |
|
mpi=0 |
56 |
|
|
57 |
nArg=$# |
nArg=$# |
58 |
if [ $nArg -ge 3 ] |
prev= |
59 |
then |
for xx ; do |
60 |
if test $2 = '-exe' ; then gcmExc=$3 ; nArg=`expr $nArg - 2` ; fi |
#echo "xx='$xx'" |
61 |
if test $1 = '-exe' ; then gcmExc=$2 ; shift ; shift ; nArg=$# ; fi |
# If the previous option needs an argument, assign it. |
62 |
fi |
if test -n "$prev"; then |
63 |
|
eval "$prev=\$xx" |
64 |
|
prev= |
65 |
|
nArg=`expr $nArg - 2` |
66 |
|
continue |
67 |
|
fi |
68 |
|
|
69 |
|
case $xx in |
70 |
|
-mpi ) mpi=1 ; nArg=`expr $nArg - 1` ;; |
71 |
|
-exe ) prev=gcmEXE ;; |
72 |
|
-command ) prev=cmdEXE ;; |
73 |
|
*) flag=$xx ;; |
74 |
|
esac |
75 |
|
done |
76 |
|
echo "cmdEXE='$cmdEXE' ; RUNMPI='$RUNMPI'" |
77 |
|
echo "nArg=$nArg ; mpi=$mpi ; flag='$flag'" |
78 |
|
|
79 |
case $nArg in |
case $nArg in |
80 |
1) ;; |
1) ;; |
81 |
*) echo "Usage: `basename $0` flag [-exe EXECUTABLE]" |
*) echo "Usage: `basename $0` flag [-mpi] [-exe EXECUTABLE] [-command COMMAND]" |
82 |
echo " Check restart: compare 1 run of 2 x $Nit it long" |
echo " Check restart: compare 1 run of 2 x $Nit it long" |
83 |
echo " with 2 consecutive runs of $Nit it long each" |
echo " with 2 consecutive runs of $Nit it long each" |
84 |
echo " where: flag = 0 -> prepare (from a previous run) pickup & data files" |
echo " where: flag = 0 -> prepare (from a previous run) pickup & data files" |
85 |
echo " flag = 1 -> do the 3 runs (with EXECUTABLE, default=mitgcmuv)" |
echo " flag = 1 -> do the 3 runs (using COMMAND" |
86 |
|
echo " or simply using EXECUTABLE, default=$gcmEXE)" |
87 |
echo " flag = 2 -> compare std_outp" |
echo " flag = 2 -> compare std_outp" |
88 |
echo " flag = 3 -> compare pickup files" |
echo " flag = 3 -> compare pickup files" |
89 |
echo " flag = 4 -> clean-up output files" |
echo " flag = 4 -> clean-up output files" |
90 |
echo " flag = All -> do 0,1,2,3,4 sequentially" |
echo " flag = All -> do 0,1,2,3,4 sequentially" |
91 |
exit 9 ;; |
exit 9 ;; |
92 |
esac |
esac |
|
flag=$1 |
|
93 |
|
|
94 |
|
#-- set the run-command : |
95 |
|
if test "x$cmdEXE" = x |
96 |
|
then |
97 |
|
RUNMPI="mpirun -machinefile ../../mf -v -np 2 $gcmEXE" |
98 |
|
cmdEXE=$gcmEXE |
99 |
|
else |
100 |
|
RUNMPI="$cmdEXE" |
101 |
|
fi |
102 |
|
if [ $mpi -ge 1 ] ; then cmdEXE=run_mpi ; fi |
103 |
|
echo "cmdEXE='$cmdEXE' ; RUNMPI='$RUNMPI'" |
104 |
#========================= |
#========================= |
105 |
|
|
106 |
if test $flag = '0' -o $flag = 'All' ; then |
if test $flag = '0' -o $flag = 'All' ; then |
107 |
#---------------------------------------------------------------------- |
#---------------------------------------------------------------------- |
108 |
# last pickup written (from previous run): |
# last pickup written (from previous run): |
109 |
if [ $mpi -ge 1 ] |
if [ $mpi -ge 1 ] |
110 |
then outpRun='STDOUT.0000' |
then outpRun='STDOUT.0000' |
111 |
else outpRun='output.txt' |
else outpRun='output.txt' |
112 |
fi |
fi |
113 |
if test -r $outpRun |
if test -r $outpRun |
114 |
then |
then |
115 |
# grep ' %CHECKPOINT ' $outpRun | tail -1 |
# grep ' %CHECKPOINT ' $outpRun | tail -1 |
116 |
lastPick=`grep ' %CHECKPOINT ' $outpRun | sed 's/^.*%CHECKPOINT //' | tail -1` |
lastPick=`grep ' %CHECKPOINT ' $outpRun | sed 's/^.*%CHECKPOINT //' | tail -1` |
117 |
if test "x$lastPick" = x |
if test "x$lastPick" = x |
118 |
then |
then |
119 |
echo "no pickup information written in '$outpRun' from previous run" |
echo "no pickup information written in '$outpRun' from previous run" |
120 |
exit 8 |
exit 8 |
121 |
else |
else |
123 |
zz=`echo $lastPick | awk '{print $2}'` |
zz=`echo $lastPick | awk '{print $2}'` |
124 |
echo "from previous run std.outp, lastPick='$lastPick' ; iter='$iter' ; zz='$zz'" |
echo "from previous run std.outp, lastPick='$lastPick' ; iter='$iter' ; zz='$zz'" |
125 |
fi |
fi |
126 |
else |
else |
127 |
echo "no standard output file '$outpRun' from previous run" |
echo "no standard output file '$outpRun' from previous run" |
128 |
exit 7 |
exit 7 |
129 |
fi |
fi |
146 |
for xx in $listF |
for xx in $listF |
147 |
do |
do |
148 |
new=`echo $xx | sed "s/^$yy\.$zz/$yy\.$sufx/"` |
new=`echo $xx | sed "s/^$yy\.$zz/$yy\.$sufx/"` |
149 |
if [ $prt -ge 2 ] ; then echo ' '$cmd $xx $new ; fi |
if [ $prt -ge 2 ] ; then echo ' '$cmdMV $xx $new ; fi |
150 |
if test $action = 1 ; then $cmd $xx $new ; fi |
if test $action = 1 ; then $cmdMV $xx $new ; fi |
151 |
done |
done |
152 |
done |
done |
153 |
fi |
fi |
183 |
sed "/^ *\&PARM03/a \ nIter0=$iter," data.tst > data.tmp_$$ |
sed "/^ *\&PARM03/a \ nIter0=$iter," data.tst > data.tmp_$$ |
184 |
mv -f data.tmp_$$ data.tst |
mv -f data.tmp_$$ data.tst |
185 |
echo "prepare file 'data.tst' : done" |
echo "prepare file 'data.tst' : done" |
186 |
if [ $prt -ge 1 ] ; then |
if [ $prt -ge 1 ] ; then |
187 |
echo ' diff data.tst data' ; diff data.tst data ; echo ' ' ; |
echo ' diff data.tst data' ; diff data.tst data ; echo ' ' ; |
188 |
fi |
fi |
189 |
#---- clean up current dir: move output to temp_tst dir: |
#---- clean up current dir: move output to temp_tst dir: |
193 |
mv -f *.data $tmpDir |
mv -f *.data $tmpDir |
194 |
mv -f *.meta $tmpDir |
mv -f *.meta $tmpDir |
195 |
mv -f *.txt $tmpDir |
mv -f *.txt $tmpDir |
196 |
|
mv -f STD???.0[0-9][0-9][0-9] $tmpDir |
197 |
listS=`ls $tmpDir/pickup*.${sufx}* 2> /dev/null | head -1` |
listS=`ls $tmpDir/pickup*.${sufx}* 2> /dev/null | head -1` |
198 |
if test "x$listS" != x ; then mv $tmpDir/pickup*.${sufx}* . ; fi |
if test "x$listS" != x ; then mv $tmpDir/pickup*.${sufx}* . ; fi |
199 |
#- move main parameter file "data": |
#- move main parameter file "data": |
212 |
for ll in $listN |
for ll in $listN |
213 |
do |
do |
214 |
sed "$ll s/^./#&/" data.pkg > data.tmp_$$ |
sed "$ll s/^./#&/" data.pkg > data.tmp_$$ |
215 |
if [ $prt -ge 1 ] ; then echo ' changes in data.pkg' |
if [ $prt -ge 1 ] ; then echo ' changes in data.pkg' |
216 |
diff data.tmp_$$ data.pkg ; echo ' ' ; fi |
diff data.tmp_$$ data.pkg ; echo ' ' ; fi |
217 |
mv -f data.tmp_$$ data.pkg |
mv -f data.tmp_$$ data.pkg |
218 |
done |
done |
248 |
num2c=`printf "%10.10i\n" $num2` |
num2c=`printf "%10.10i\n" $num2` |
249 |
echo " start-end iter: $num0 , $num1 , $num2" |
echo " start-end iter: $num0 , $num1 , $num2" |
250 |
echo " sufix: '$num0c' '$num1c' '$num2c'" |
echo " sufix: '$num0c' '$num1c' '$num2c'" |
251 |
echo ' gcmExc='$gcmExc |
echo ' cmdEXE='$cmdEXE |
252 |
#exit |
#exit |
253 |
#--------------------------- |
#--------------------------- |
254 |
|
|
273 |
cp -p data.tst data |
cp -p data.tst data |
274 |
echo '==> START RUN 2 x' $Nit 'it' |
echo '==> START RUN 2 x' $Nit 'it' |
275 |
if [ $mpi -ge 1 ] |
if [ $mpi -ge 1 ] |
276 |
then ./$gcmExc std_outp.2it > TTT.out.2it 2>&1 |
then $cmdEXE std_outp.2it > TTT.out.2it 2>&1 |
277 |
else ./$gcmExc > std_outp.2it |
else $cmdEXE > std_outp.2it |
278 |
fi |
fi |
279 |
mv STDERR.0000 std__err.2it |
mv STDERR.0000 std__err.2it |
280 |
out=`egrep -c 'STOP ABNORMAL END' std_outp.2it` |
out=`egrep -c 'STOP ABNORMAL END' std_outp.2it` |
298 |
sed "s/^ nTimeSteps=$Dbl/ nTimeSteps=$Nit/g" data.tst > data |
sed "s/^ nTimeSteps=$Dbl/ nTimeSteps=$Nit/g" data.tst > data |
299 |
echo '==> START RUN 1iA' |
echo '==> START RUN 1iA' |
300 |
if [ $mpi -ge 1 ] |
if [ $mpi -ge 1 ] |
301 |
then ./$gcmExc std_outp.1iA > TTT.out.1iA 2>&1 |
then $cmdEXE std_outp.1iA > TTT.out.1iA 2>&1 |
302 |
else ./$gcmExc > std_outp.1iA |
else $cmdEXE > std_outp.1iA |
303 |
fi |
fi |
304 |
mv STDERR.0000 std__err.1iA |
mv STDERR.0000 std__err.1iA |
305 |
out=`egrep -c 'STOP ABNORMAL END' std_outp.1iA` |
out=`egrep -c 'STOP ABNORMAL END' std_outp.1iA` |
323 |
mv -f data.tmp data |
mv -f data.tmp data |
324 |
echo '==> START RUN 1iB' |
echo '==> START RUN 1iB' |
325 |
if [ $mpi -ge 1 ] |
if [ $mpi -ge 1 ] |
326 |
then ./$gcmExc std_outp.1iB > TTT.out.1iB 2>&1 |
then $cmdEXE std_outp.1iB > TTT.out.1iB 2>&1 |
327 |
else ./$gcmExc > std_outp.1iB |
else $cmdEXE > std_outp.1iB |
328 |
fi |
fi |
329 |
mv STDERR.0000 std__err.1iB |
mv STDERR.0000 std__err.1iB |
330 |
out=`egrep -c 'STOP ABNORMAL END' std_outp.1iB` |
out=`egrep -c 'STOP ABNORMAL END' std_outp.1iB` |
364 |
|
|
365 |
if test $flag = '3' -o $flag = 'All' ; then |
if test $flag = '3' -o $flag = 'All' ; then |
366 |
#---------------------------------------------------------------------- |
#---------------------------------------------------------------------- |
367 |
echo ' ' |
echo ' ' |
368 |
echo "== diff pickup files : end of 1rst run (2x$Nit it) & end of 3rd run (2nd $Nit it)" |
echo "== diff pickup files : end of 1rst run (2x$Nit it) & end of 3rd run (2nd $Nit it)" |
369 |
listP=`( cd $dir1 ; ls pickup*.$num2c* | sed 's/\..*//g' | uniq )` |
listP=`( cd $dir1 ; ls pickup*.$num2c* | sed 's/\..*//g' | uniq )` |
370 |
chkmeta='Y' |
chkmeta='Y' |
386 |
echo ' diff' $dir1/$zz.$xx.meta $dir3 |
echo ' diff' $dir1/$zz.$xx.meta $dir3 |
387 |
diff $dir1/$zz.$xx.meta $dir3 |
diff $dir1/$zz.$xx.meta $dir3 |
388 |
out=$? |
out=$? |
389 |
if test $out != 0 ; then |
if test $out != 0 ; then |
390 |
echo 'Diff outp=' $out ' ==> stop' |
echo 'Diff outp=' $out ' ==> stop' |
391 |
exit 5 |
exit 5 |
392 |
fi |
fi |
398 |
|
|
399 |
if test $flag = '4' -o $flag = 'All' ; then |
if test $flag = '4' -o $flag = 'All' ; then |
400 |
#------------- |
#------------- |
401 |
echo ' ' |
echo ' ' |
402 |
echo "== clean-up and reset :" |
echo "== clean-up and reset :" |
403 |
echo '--> remove output dir and output files:' |
echo '--> remove output dir and output files:' |
404 |
echo ' rm -rf' $dir1 $dir2 $dir3 |
echo ' rm -rf' $dir1 $dir2 $dir3 |