--- MITgcm/tools/tst_2+2 2009/03/23 23:28:13 1.6 +++ MITgcm/tools/tst_2+2 2012/05/08 15:09:26 1.12 @@ -1,22 +1,44 @@ #! /usr/bin/env bash -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/tst_2+2,v 1.6 2009/03/23 23:28:13 jmc Exp $ +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/tst_2+2,v 1.12 2012/05/08 15:09:26 jmc Exp $ # $Name: $ rnp_loc() { # rnp_loc arg_1 arg_2 # rename files with prefix = 'arg_1' to files with prefix = 'arg_2' - echo ' rnp_loc:' $1 $2 + if [ $prt -ge 1 ] ; then echo ' rnp_loc:' $1 $2 ; fi # rnp -s $1 $2 listY=`ls -1 $1*` for yy in $listY do zz=`echo $yy | sed "s/^$1/$2/"` - mv $yy $zz + if [ $prt -ge 2 ] ; then echo ' '$cmdMV $yy $zz ; fi + if test $action = 1 ; then $cmdMV $yy $zz ; fi done } +#----------- + +move_outp() +{ +# move_outp arg_1 +# move mitgcm output files to directory 'arg_1' + if [ $prt -ge 1 ] ; then echo ' move_outp:' $1 ; fi + mv *.data *.meta $1 + listF=`ls -1 *.txt STD???.00?? 2> /dev/null` + if test "x$listF" != x ; then mv $listF $1 ; fi + #- move back sym link: + listL=`find $1 -type l` + ttd=`echo $listL | wc -w` + #echo "ttd=$ttd" + if test $ttd != 0 ; then + #echo "listL='$listL'" + if [ $prt -ge 2 ] ; then echo " mv back:" $listL | sed "s/$1\///g" ; fi + mv $listL . + fi +} + #--------------------------- #- exit status: @@ -27,7 +49,7 @@ # 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 ?) -# 7 -> missing standard output from previous run +# 7 -> missing executable or standard output from previous run # 8 -> missing information (in standard output of previous run) about pickup # 9 -> error in argument list @@ -77,9 +99,11 @@ echo " flag = 2 -> compare std_outp" echo " flag = 3 -> compare pickup files" echo " flag = 4 -> clean-up output files" + echo " flag = NC -> do 0,1,2,3 sequentially (no cleaning)" echo " flag = All -> do 0,1,2,3,4 sequentially" exit 9 ;; esac +if test $flag = 'NC' -o $flag = 'All' ; then Multi=1 ; else Multi=0 ; fi #-- set the run-command : if test "x$cmdEXE" = x @@ -93,8 +117,13 @@ echo "cmdEXE='$cmdEXE'" #========================= -if test $flag = '0' -o $flag = 'All' ; then +if test $flag = '0' -o $Multi = '1' ; then #---------------------------------------------------------------------- +# check for executable: +if test ! -x $gcmEXE ; then + echo "file '$gcmEXE' does not exist or is not executable" + exit 7 +fi # last pickup written (from previous run): if [ $mpi -ge 1 ] then outpRun='STDOUT.0000' @@ -110,43 +139,19 @@ exit 8 else iter=`echo $lastPick | awk '{print $1}'` - zz=`echo $lastPick | awk '{print $2}'` - echo "from previous run std.outp, lastPick='$lastPick' ; iter='$iter' ; zz='$zz'" + sufx=`echo $lastPick | awk '{print $2}'` + echo "from previous run std.outp, lastPick='$lastPick' ; iter='$iter' ; sufx='$sufx'" fi else echo "no standard output file '$outpRun' from previous run" exit 7 fi -#- rename pickup (if needed) -sufx=`printf "%10.10i\n" $iter` -if test $zz = $sufx -then - echo "no need to change pickup sufix" -else -# echo "rename pickup sufix: $zz -> $sufx" - listP=`ls pickup*.${zz}* 2> /dev/null | sed 's/\..*//g' | uniq` - if test "x$listP" = x - then echo ' rename' $zz '->' $sufx ': no file to rename' - else - if [ $prt -ge 1 ] ; then echo ' rename' $zz '->' $sufx 'for all:' $listP ; fi - for yy in $listP - do - listF=`ls -1 $yy.${zz}*` - for xx in $listF - do - new=`echo $xx | sed "s/^$yy\.$zz/$yy.$sufx/"` - if [ $prt -ge 2 ] ; then echo ' '$cmdMV $xx $new ; fi - if test $action = 1 ; then $cmdMV $xx $new ; fi - done - done - fi -fi #------------------------- echo "prepare parameter file 'data.tst' :" cp -p -f data data.tst -listOut='startTime endTime nIter0 nTimeSteps nEndIter chkPtFreq pChkPtFreq globalFiles' -listOut=$listOut' pickupSuff usePickupBeforeC54 mdsioLocalDir' +listOut='startTime endTime nIter0 nTimeSteps nEndIter chkPtFreq pChkPtFreq' +listOut=$listOut' pickupSuff usePickupBeforeC54 mdsioLocalDir pickupStrictlyMatch' #- comment out (in data.tst) all parameters from list: 'listOut' for yy in $listOut do @@ -184,8 +189,6 @@ mv -f *.meta $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": mv -f data $tmpDir #- do not deal with MNC pickup at all: @@ -209,6 +212,30 @@ else if [ $prt -ge 2 ] ; then echo ' : not found' ; echo ' ' ; fi fi fi +#------------------------- +#-- link back pickup files + listS=`ls $tmpDir/pickup*.${sufx}* 2> /dev/null | head -1` + if test "x$listS" != x ; then + if [ $prt -ge 1 ] ; then echo ' link back:' $tmpDir'/pickup*.'${sufx}'*' ; fi + if test $action = 1 ; then ln -s $tmpDir/pickup*.${sufx}* . ; fi + fi +#- rename pickup (if needed) +nIt0c=`printf "%10.10i\n" $iter` +if test $sufx = $nIt0c +then + echo "no need to change pickup sufix" +else + listP=`ls pickup*.${sufx}* 2> /dev/null | sed 's/\..*//g' | uniq` + if test "x$listP" = x + then echo ' rename' $sufx '->' $nIt0c ': no file to rename' + else + if [ $prt -ge 1 ] ; then echo ' rename' $sufx '->' $nIt0c 'for all:' $listP ; fi + for yy in $listP + do + rnp_loc $yy.${sufx} $yy.$nIt0c + done + fi +fi #---------------------------------------------------------------------- fi @@ -242,7 +269,7 @@ #exit #--------------------------- -if test $flag = '1' -o $flag = 'All' ; then +if test $flag = '1' -o $Multi = '1' ; then #---------------------------------------------------------------------- #- check at the end of each run for pickup with prefix: pref='pickup' @@ -263,13 +290,15 @@ cp -p data.tst data echo '==> START RUN 2 x' $Nit 'it' if [ $mpi -ge 1 ] -then +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 +if test ! -s std_outp.2it +then echo "empty or no output file: 'std_outp.2it' => exit" ; exit 1 ; fi mv STDERR.0000 std__err.2it out=`egrep -c 'STOP ABNORMAL END' std_outp.2it` if test $out != 0 @@ -284,23 +313,21 @@ do rnp_loc $xx.ckptA $xx.$num2c done -mv *.data *.meta $dir1 -txtF=`ls -1 *.txt STD???.00?? 2> /dev/null` -if test "x$txtF" != x ; then mv $txtF $dir1 ; fi -listS=`ls $dir1/pickup*.${num0c}* 2> /dev/null | head -1` -if test "x$listS" != x ; then mv $dir1/pickup*.${num0c}* . ; fi +move_outp $dir1 #--- 2nd run ( Nit iter , restart from same Iter = num0 as 1rst run ) 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 +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 +if test ! -s std_outp.1iA +then echo "empty or no output file: 'std_outp.1iA' => exit" ; exit 2 ; fi mv STDERR.0000 std__err.1iA out=`egrep -c 'STOP ABNORMAL END' std_outp.1iA` if test $out != 0 @@ -313,24 +340,22 @@ do rnp_loc $xx.ckptA $xx.$num1c done -mv *.data *.meta $dir2 -txtF=`ls -1 *.txt STD???.00?? 2> /dev/null` -if test "x$txtF" != x ; then mv $txtF $dir2 ; fi -listS=`ls $dir2/pickup*.${num0c}* 2> /dev/null | head -1` -if test "x$listS" != x ; then mv $dir2/pickup*.${num0c}* . ; fi +move_outp $dir2 #--- 3rd run ( Nit iter , restart from 2nd ) ln -s $dir2/pickup*.$num1c.* . sed "s/^ nIter0=$num0/ nIter0=$num1/g" data > data.tmp mv -f data.tmp data echo '==> START RUN 1iB' if [ $mpi -ge 1 ] -then +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 +if test ! -s std_outp.1iB +then echo "empty or no output file: 'std_outp.1iB' => exit" ; exit 3 ; fi mv STDERR.0000 std__err.1iB out=`egrep -c 'STOP ABNORMAL END' std_outp.1iB` if test $out != 0 @@ -343,32 +368,39 @@ do rnp_loc $xx.ckptA $xx.$num2c done -mv *.data *.meta $dir3 -txtF=`ls -1 *.txt STD???.00?? 2> /dev/null` -if test "x$txtF" != x ; then mv $txtF $dir3 ; fi -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.* +# remove pickup*.$mun1c* sym-link: +find . ! -name . -prune -type l -name 'pickup*.'${num1c}'*' -exec rm {} \; +move_outp $dir3 rm data #---------------------------------------------------------------------- fi -if test $flag = '2' -o $flag = 'All' ; then +if test $flag = '2' -o $Multi = '1' ; then #---------------------------------------------------------------------- -echo ' ' ; echo '== compare cg2d_init_res :' -echo ' run 1iA:' - grep "cg2d_init_res" std_outp.1iA \ - | sed 's/.* cg2d_init_res =//' -echo ' run 1iB:' - grep "cg2d_init_res" std_outp.1iB \ - | sed 's/.* cg2d_init_res =//' -echo ' run 2it:' - grep "cg2d_init_res" std_outp.2it \ - | sed 's/.* cg2d_init_res =//' +listCGini="2" +#-- check if using 3-D solver + nn=`grep -i -c "^ *nonHydrostatic *= *\.TRUE\." data.tst` + if [ $nn -eq 0 ] ; then + nn=`grep -i -c "^ *implicitIntGravWave *= *\.TRUE\." data.tst` + fi +if [ $nn -ge 1 ] ; then listCGini="$listCGini 3"; fi +for nn in $listCGini +do + echo ' ' ; echo "== compare cg${nn}d_init_res :" + echo ' run 1iA:' + grep "cg${nn}d_init_res" std_outp.1iA \ + | sed "s/.* cg${nn}d_init_res =//" + echo ' run 1iB:' + grep "cg${nn}d_init_res" std_outp.1iB \ + | sed "s/.* cg${nn}d_init_res =//" + echo ' run 2it:' + grep "cg${nn}d_init_res" std_outp.2it \ + | sed "s/.* cg${nn}d_init_res =//" +done #---------------------------------------------------------------------- fi -if test $flag = '3' -o $flag = 'All' ; then +if test $flag = '3' -o $Multi = '1' ; then #---------------------------------------------------------------------- echo ' ' echo "== diff pickup files : end of 1rst run (2x$Nit it) & end of 3rd run (2nd $Nit it)" @@ -406,6 +438,11 @@ #------------- echo ' ' echo "== clean-up and reset :" + echo '--> remove pickup*.'$num0c'* sym-links:' +#find . ! -name . -prune -type l -name 'pickup*.'${num0c}'*' -exec rm {} \; + listS=`find . ! -name . -prune -type l -name 'pickup*.'${num0c}'*'` + if [ $prt -ge 2 ] ; then echo ' rm' $listS ; fi + rm -f $listS echo '--> remove output dir and output files:' echo ' rm -rf' $dir1 $dir2 $dir3 rm -rf $dir1 $dir2 $dir3