--- MITgcm/tools/tst_2+2 2007/12/25 22:07:54 1.1 +++ MITgcm/tools/tst_2+2 2009/02/28 20:56:07 1.4 @@ -1,6 +1,6 @@ #! /usr/bin/env bash -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/tst_2+2,v 1.1 2007/12/25 22:07:54 jmc Exp $ +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/tst_2+2,v 1.4 2009/02/28 20:56:07 jmc Exp $ # $Name: $ rnp_loc() @@ -19,25 +19,11 @@ #--------------------------- -#- 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 - #- exit status: # 0 -> test is successful -# 1 -> fail in 1rst run -# 2 -> fail in 2nd run -# 3 -> fail in 3rd run +# 1 -> fail in 1rst run +# 2 -> fail in 2nd run +# 3 -> fail in 3rd run # 4 -> pickup*.data (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 # 6 -> missing 'data.tst' file (removed or not yet generated ?) @@ -45,43 +31,81 @@ # 8 -> missing information (in standard output of previous run) about pickup # 9 -> error in argument list +#- default: +Nit=2 +prt=1 # 1 = print some informations ; 2 = print more informations +action=1 +cmdMV='mv -f' +tmpDir='temp_tst' +wait2run=0 # if needs sometime for file system syncro on all nodes + +#- default executable, command-line , using MPI: +gcmEXE=./mitgcmuv +cmdEXE= +mpi=0 + nArg=$# -if [ $nArg -ge 3 ] -then - if test $2 = '-exe' ; then gcmExc=$3 ; nArg=`expr $nArg - 2` ; fi - if test $1 = '-exe' ; then gcmExc=$2 ; shift ; shift ; nArg=$# ; fi -fi +prev= +for xx ; do + #echo "xx='$xx'" + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + eval "$prev=\$xx" + prev= + nArg=`expr $nArg - 2` + continue + fi + + case $xx in + -mpi ) mpi=1 ; nArg=`expr $nArg - 1` ;; + -exe ) prev=gcmEXE ;; + -command ) prev=cmdEXE ;; + *) flag=$xx ;; + esac +done +#echo "cmdEXE='$cmdEXE'" +#echo "nArg=$nArg ; mpi=$mpi ; flag='$flag'" case $nArg in 1) ;; - *) echo "Usage: `basename $0` flag [-exe EXECUTABLE]" + *) echo "Usage: `basename $0` flag [-mpi] [-exe EXECUTABLE] [-command COMMAND]" echo " Check restart: compare 1 run of 2 x $Nit it long" echo " with 2 consecutive runs of $Nit it long each" echo " where: flag = 0 -> prepare (from a previous run) pickup & data files" - echo " flag = 1 -> do the 3 runs (with EXECUTABLE, default=mitgcmuv)" + echo " flag = 1 -> do the 3 runs (using COMMAND" + echo " or simply using EXECUTABLE, default=$gcmEXE)" echo " flag = 2 -> compare std_outp" echo " flag = 3 -> compare pickup files" echo " flag = 4 -> clean-up output files" echo " flag = All -> do 0,1,2,3,4 sequentially" exit 9 ;; esac -flag=$1 +#-- set the run-command : +if test "x$cmdEXE" = x +then + if [ $mpi -ge 1 ] ; then + cmdEXE="mpirun -machinefile ../../mf -v -np 2 $gcmEXE" + else + cmdEXE=$gcmEXE + fi +fi +echo "cmdEXE='$cmdEXE'" #========================= if test $flag = '0' -o $flag = 'All' ; then #---------------------------------------------------------------------- # last pickup written (from previous run): -if [ $mpi -ge 1 ] +if [ $mpi -ge 1 ] then outpRun='STDOUT.0000' else outpRun='output.txt' fi -if test -r $outpRun +if test -r $outpRun then # grep ' %CHECKPOINT ' $outpRun | tail -1 lastPick=`grep ' %CHECKPOINT ' $outpRun | sed 's/^.*%CHECKPOINT //' | tail -1` - if test "x$lastPick" = x - then + if test "x$lastPick" = x + then echo "no pickup information written in '$outpRun' from previous run" exit 8 else @@ -89,7 +113,7 @@ zz=`echo $lastPick | awk '{print $2}'` echo "from previous run std.outp, lastPick='$lastPick' ; iter='$iter' ; zz='$zz'" fi -else +else echo "no standard output file '$outpRun' from previous run" exit 7 fi @@ -112,8 +136,8 @@ for xx in $listF do new=`echo $xx | sed "s/^$yy\.$zz/$yy\.$sufx/"` - if [ $prt -ge 2 ] ; then echo ' '$cmd $xx $new ; fi - if test $action = 1 ; then $cmd $xx $new ; fi + if [ $prt -ge 2 ] ; then echo ' '$cmdMV $xx $new ; fi + if test $action = 1 ; then $cmdMV $xx $new ; fi done done fi @@ -149,7 +173,7 @@ sed "/^ *\&PARM03/a \ nIter0=$iter," data.tst > data.tmp_$$ mv -f data.tmp_$$ data.tst echo "prepare file 'data.tst' : done" -if [ $prt -ge 1 ] ; then +if [ $prt -ge 1 ] ; then echo ' diff data.tst data' ; diff data.tst data ; echo ' ' ; fi #---- clean up current dir: move output to temp_tst dir: @@ -158,7 +182,8 @@ mkdir $tmpDir mv -f *.data $tmpDir mv -f *.meta $tmpDir - mv -f *.txt $tmpDir + mv -f *.txt $tmpDir 2> /dev/null + mv -f STD???.0[0-9][0-9][0-9] $tmpDir listS=`ls $tmpDir/pickup*.${sufx}* 2> /dev/null | head -1` if test "x$listS" != x ; then mv $tmpDir/pickup*.${sufx}* . ; fi #- move main parameter file "data": @@ -177,7 +202,7 @@ for ll in $listN do sed "$ll s/^./#&/" data.pkg > data.tmp_$$ - if [ $prt -ge 1 ] ; then echo ' changes in data.pkg' + if [ $prt -ge 1 ] ; then echo ' changes in data.pkg' diff data.tmp_$$ data.pkg ; echo ' ' ; fi mv -f data.tmp_$$ data.pkg done @@ -213,7 +238,7 @@ num2c=`printf "%10.10i\n" $num2` echo " start-end iter: $num0 , $num1 , $num2" echo " sufix: '$num0c' '$num1c' '$num2c'" -echo ' gcmExc='$gcmExc +echo ' cmdEXE='$cmdEXE #exit #--------------------------- @@ -238,8 +263,12 @@ cp -p data.tst data echo '==> START RUN 2 x' $Nit 'it' if [ $mpi -ge 1 ] -then ./$gcmExc std_outp.2it > TTT.out.2it 2>&1 -else ./$gcmExc > std_outp.2it +then + sleep $wait2run + $cmdEXE > TTT.out.2it 2>&1 + mv STDOUT.0000 std_outp.2it + cat TTT.out.2it +else $cmdEXE > std_outp.2it fi mv STDERR.0000 std__err.2it out=`egrep -c 'STOP ABNORMAL END' std_outp.2it` @@ -255,16 +284,21 @@ rnp_loc $xx.ckptA $xx.$num2c done mv *.0??.0??.* $dir1 -txtF=`ls -1 *.txt 2> /dev/null` -mv R?.data R?.meta DR?.data DR?.meta $txtF $dir1 +txtF=`ls -1 *.txt STD???.00?? 2> /dev/null` +mv R?.data R?.meta DR?.data DR?.meta PHref{C,F}.??ta $txtF $dir1 listS=`ls $dir1/pickup*.${num0c}* 2> /dev/null | head -1` if test "x$listS" != x ; then mv $dir1/pickup*.${num0c}* . ; fi #--- 2nd run ( Nit iter , restart from same Iter = num0 as 1rst run ) -sed "s/^ nTimeSteps=$Dbl/ nTimeSteps=$Nit/g" data.tst > data +sed "s/^ nTimeSteps=$Dbl/ nTimeSteps=$Nit/g" data.tst > data.tmp +mv -f data.tmp data echo '==> START RUN 1iA' if [ $mpi -ge 1 ] -then ./$gcmExc std_outp.1iA > TTT.out.1iA 2>&1 -else ./$gcmExc > std_outp.1iA +then + sleep $wait2run + $cmdEXE > TTT.out.1iA 2>&1 + mv STDOUT.0000 std_outp.1iA + cat TTT.out.1iA +else $cmdEXE > std_outp.1iA fi mv STDERR.0000 std__err.1iA out=`egrep -c 'STOP ABNORMAL END' std_outp.1iA` @@ -278,8 +312,8 @@ rnp_loc $xx.ckptA $xx.$num1c done mv *.0??.0??.* $dir2 -txtF=`ls -1 *.txt 2> /dev/null` -mv R?.data R?.meta DR?.data DR?.meta $txtF $dir2 +txtF=`ls -1 *.txt STD???.00?? 2> /dev/null` +mv R?.data R?.meta DR?.data DR?.meta PHref{C,F}.??ta $txtF $dir2 listS=`ls $dir2/pickup*.${num0c}* 2> /dev/null | head -1` if test "x$listS" != x ; then mv $dir2/pickup*.${num0c}* . ; fi #--- 3rd run ( Nit iter , restart from 2nd ) @@ -288,8 +322,12 @@ mv -f data.tmp data echo '==> START RUN 1iB' if [ $mpi -ge 1 ] -then ./$gcmExc std_outp.1iB > TTT.out.1iB 2>&1 -else ./$gcmExc > std_outp.1iB +then + sleep $wait2run + $cmdEXE > TTT.out.1iB 2>&1 + mv STDOUT.0000 std_outp.1iB + cat TTT.out.1iB +else $cmdEXE > std_outp.1iB fi mv STDERR.0000 std__err.1iB out=`egrep -c 'STOP ABNORMAL END' std_outp.1iB` @@ -303,8 +341,8 @@ rnp_loc $xx.ckptA $xx.$num2c done mv *.0??.0??.* $dir3 -txtF=`ls -1 *.txt 2> /dev/null` -mv R?.data R?.meta DR?.data DR?.meta $txtF $dir3 +txtF=`ls -1 *.txt STD???.00?? 2> /dev/null` +mv R?.data R?.meta DR?.data DR?.meta PHref{C,F}.??ta $txtF $dir3 listS=`ls $dir3/pickup*.${num0c}* 2> /dev/null | head -1` if test "x$listS" != x ; then mv $dir3/pickup*.${num0c}* . ; fi rm $dir3/pickup*.$num1c.* @@ -329,7 +367,7 @@ if test $flag = '3' -o $flag = 'All' ; then #---------------------------------------------------------------------- -echo ' ' +echo ' ' echo "== diff pickup files : end of 1rst run (2x$Nit it) & end of 3rd run (2nd $Nit it)" listP=`( cd $dir1 ; ls pickup*.$num2c* | sed 's/\..*//g' | uniq )` chkmeta='Y' @@ -351,7 +389,7 @@ echo ' diff' $dir1/$zz.$xx.meta $dir3 diff $dir1/$zz.$xx.meta $dir3 out=$? - if test $out != 0 ; then + if test $out != 0 ; then echo 'Diff outp=' $out ' ==> stop' exit 5 fi @@ -363,13 +401,14 @@ if test $flag = '4' -o $flag = 'All' ; then #------------- -echo ' ' +echo ' ' echo "== clean-up and reset :" echo '--> remove output dir and output files:' echo ' rm -rf' $dir1 $dir2 $dir3 rm -rf $dir1 $dir2 $dir3 echo ' rm -f' std_????.?i? rm -f std_????.?i? + rm -f TTT.out.?i? 2> /dev/null echo ' rm -f' data.pkg data.tst rm -f data.pkg data.tst #- move back files from temp_tst dir: