#!/bin/sh # $Header: /home/ubuntu/mnt/e9_copy/MITgcm_contrib/jmc_script/Attic/tst1+1,v 1.13 2007/11/25 21:14:57 jmc dead $ # $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 # rnp -s $1 $2 listY=`ls -1 $1*` for yy in $listY do zz=`echo $yy | sed "s/^$1/$2/"` mv $yy $zz done } #--------------------------- #- input : # 1) data.tst = parameter file "data" for 2.Nit iter run # 2) here or in dir temp : pickup(_cd).0..0{num0}.001.001.data NbArg=$# if test -r data.tst ; then # Nit = Nb of iter of 2nd & 3rd run (1rst one is 2 x Nit iter long) Dbl=`sed -n 's/nTimeSteps=//p' data.tst | sed 's/,//g'` Nit=`expr $Dbl / 2` else echo '=> Need a readable "data.tst" file for the 2 x Nit iterations run' Nit=2 ; NbArg=0; fi case $NbArg in 1) ;; *) echo "Usage: `basename $0` flag" 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 = 1 -> do the 3 runs" echo " flag = 2 -> compare std_outp" echo " flag = 3 -> compare pickup files" exit ;; esac flag=$1 num0=`sed -n 's/nIter0=//p' data.tst | sed 's/,//g' | sed 's/ //g'` #num0="72000" # list of pickup(s) that are needed for a restart : #listP='pickup pickup_cd pickup_nh pickup_ic pickup_land pickup_seaice' #- executable: mpi=0 if [ $mpi -ge 1 ] then gcmExc=run_ifc_mpi else gcmExc=mitgcmuv fi #- dir where to put the results : dir1=res_2it dir2=res_1iA dir3=res_1iB #--------------------------- Dbl=`expr $Nit + $Nit` num1=`expr $num0 + $Nit` num2=`expr $num0 + $Dbl` num0c=`printf "%10.10i\n" $num0` num1c=`printf "%10.10i\n" $num1` num2c=`printf "%10.10i\n" $num2` echo $num0 $num1 $num2 echo $num0c $num1c $num2c echo 'gcmExc='$gcmExc #exit #--------------------------- if test $flag = 1 ; then #------------ if test -d $dir1 -o -d $dir2 -o -d $dir3 then echo -n 'remove dir: ' if test -d $dir1 ; then echo -n $dir1 ' , ' ; rm -r $dir1 ; fi if test -d $dir2 ; then echo -n $dir2 ' , ' ; rm -r $dir2 ; fi if test -d $dir3 ; then echo -n $dir3 ' , ' ; rm -r $dir3 ; fi echo ' ' fi mkdir $dir1 $dir2 $dir3 rm -f STDERR.0000 cp -p data.tst data numF=`ls temp/pickup*.${num0c}* 2> /dev/null | grep -c pickup` if test $numF != 0 ; then ln -s temp/pickup*.${num0c}* . 2> /dev/null ; fi 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 fi mv STDERR.0000 std__err.2it if test -f pickup.ckptA.001.001.data then out=`egrep -c 'STOP ABNORMAL END' std_outp.2it` else out=9 ; fi if test $out != 0 ; then echo 'RUN 2it STOP before END => exit' ; exit ; fi echo '==> END RUN 2 x' $Nit 'it' listP=`ls pickup*.ckptA* | sed 's/\..*//g' | uniq` echo ' listP=' $listP for xx in $listP do 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 listS=`ls $dir1/pickup*.${num0c}* 2> /dev/null | head -1` if test "x$listS" != x ; then mv $dir1/pickup*.${num0c}* . ; fi #-- sed "s/^ nTimeSteps=$Dbl/ nTimeSteps=$Nit/g" data.tst > data echo '==> START RUN 1iA' if [ $mpi -ge 1 ] then ./$gcmExc std_outp.1iA > TTT.out.1iA 2>&1 else ./$gcmExc > std_outp.1iA fi mv STDERR.0000 std__err.1iA if test -f pickup.ckptA.001.001.data then out=`egrep -c 'STOP ABNORMAL END' std_outp.1iA` else out=9 ; fi if test $out != 0 ; then echo 'RUN 1iA STOP before END => exit' ; exit ; fi echo '==> END RUN 1iA' for xx in $listP do 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 listS=`ls $dir2/pickup*.${num0c}* 2> /dev/null | head -1` if test "x$listS" != x ; then rm $dir2/pickup*.${num0c}* ; fi #-- 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 ./$gcmExc std_outp.1iB > TTT.out.1iB 2>&1 else ./$gcmExc > std_outp.1iB fi mv STDERR.0000 std__err.1iB if test -f pickup.ckptA.001.001.data then out=`egrep -c 'STOP ABNORMAL END' std_outp.1iB` else out=9 ; fi if test $out != 0 ; then echo 'RUN 1iB STOP before END => exit' ; exit ; fi echo '==> END RUN 1iB' for xx in $listP do 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 rm $dir3/pickup*.$num1c.* exit #------------ fi if test $flag = 2 ; 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 =//' exit #------------ fi if test $flag = 3 ; then #------------ listP=`( cd $dir1 ; ls pickup*.$num2c* | sed 's/\..*//g' | uniq )` chkmeta='Y' for yy in $listP do listY=`(cd $dir1 ; ls $yy.$num2c.*.data | sed "s/$yy\.$num2c\.//" | sed "s/\.data//")` zz=$yy.$num2c echo '--> file='$zz', listY='$listY for xx in $listY do echo diff $dir1/$zz.$xx.data $dir3 diff $dir1/$zz.$xx.data $dir3 out=$? if test $out != 0 then echo 'Diff outp=' $out ' ==> stop' exit ; fi if test $chkmeta = 'Y' then echo diff $dir1/$zz.$xx.meta $dir3 diff $dir1/$zz.$xx.meta $dir3 out=$? if test $out != 0 then echo 'Diff outp=' $out ' ==> stop' exit ; fi fi done done exit #------------ fi