| 1 | 
jmc | 
1.8 | 
#! /usr/bin/env bash | 
| 2 | 
jmc | 
1.1 | 
 | 
| 3 | 
jmc | 
1.9 | 
# $Header: /u/gcmpack/MITgcm_contrib/jmc_script/tst_2+2_cpl,v 1.8 2010/10/22 03:10:56 jmc Exp $ | 
| 4 | 
jmc | 
1.2 | 
# $Name:  $ | 
| 5 | 
  | 
  | 
 | 
| 6 | 
jmc | 
1.3 | 
rnp_loc() | 
| 7 | 
  | 
  | 
{ | 
| 8 | 
  | 
  | 
#   rnp_loc arg_1 arg_2 | 
| 9 | 
  | 
  | 
#   rename files with prefix = 'arg_1' to files with prefix = 'arg_2' | 
| 10 | 
  | 
  | 
    echo 'rnp_loc:' $1 $2 | 
| 11 | 
  | 
  | 
#   rnp -s $1 $2 | 
| 12 | 
jmc | 
1.4 | 
    listY=`ls -1 $1*` | 
| 13 | 
  | 
  | 
    for yy in $listY | 
| 14 | 
jmc | 
1.3 | 
    do | 
| 15 | 
jmc | 
1.4 | 
      zz=`echo $yy | sed "s/^$1/$2/"` | 
| 16 | 
  | 
  | 
      mv $yy $zz | 
| 17 | 
jmc | 
1.3 | 
    done | 
| 18 | 
  | 
  | 
} | 
| 19 | 
  | 
  | 
 | 
| 20 | 
  | 
  | 
dif_tiles() | 
| 21 | 
  | 
  | 
{ | 
| 22 | 
jmc | 
1.4 | 
#   dif_data_loc dd1 dd2 file | 
| 23 | 
  | 
  | 
#   for all tiles  ==> do diff dd1/file dd2/file' | 
| 24 | 
  | 
  | 
    dd1=$1 ; dd2=$2 ; zz=$3 | 
| 25 | 
jmc | 
1.9 | 
    chkmeta='N' | 
| 26 | 
jmc | 
1.4 | 
    listY=`(cd $dd1 ; ls $zz.*.data | sed "s/$zz\.//" | sed "s/\.data//")` | 
| 27 | 
  | 
  | 
    echo '--> file='$zz', listY='$listY | 
| 28 | 
  | 
  | 
    for yy in $listY | 
| 29 | 
jmc | 
1.3 | 
    do | 
| 30 | 
jmc | 
1.4 | 
      echo diff $dd1/$zz.$yy.data $dd2 | 
| 31 | 
  | 
  | 
      diff $dd1/$zz.$yy.data $dd2 | 
| 32 | 
jmc | 
1.3 | 
      out=$? | 
| 33 | 
  | 
  | 
      if test $out != 0 | 
| 34 | 
  | 
  | 
      then echo 'Diff outp=' $out ' ==> stop' | 
| 35 | 
  | 
  | 
       exit ; fi | 
| 36 | 
jmc | 
1.9 | 
      if test $chkmeta = 'Y' ; then | 
| 37 | 
jmc | 
1.4 | 
       echo diff $dd1/$zz.$yy.meta $dd2 | 
| 38 | 
  | 
  | 
       diff $dd1/$zz.$yy.meta $dd2 | 
| 39 | 
jmc | 
1.3 | 
       out=$? | 
| 40 | 
jmc | 
1.9 | 
       if test $out != 0 ; then echo 'Diff outp=' $out ' ==> stop' ; exit ; fi | 
| 41 | 
jmc | 
1.3 | 
      fi | 
| 42 | 
  | 
  | 
    done | 
| 43 | 
  | 
  | 
} | 
| 44 | 
  | 
  | 
 | 
| 45 | 
jmc | 
1.9 | 
move_outp() | 
| 46 | 
  | 
  | 
{ | 
| 47 | 
  | 
  | 
#   move_outp arg_1 | 
| 48 | 
  | 
  | 
#   move mitgcm output files to directory 'arg_1' | 
| 49 | 
  | 
  | 
    if [ $prt -ge 1 ] ; then echo ' move_outp:' $1 ; fi | 
| 50 | 
  | 
  | 
    mv *.data *.meta $1 | 
| 51 | 
  | 
  | 
    listF=`ls -1 *.txt STD???.0000 *.log 2> /dev/null` | 
| 52 | 
  | 
  | 
    if test "x$listF" != x ; then mv $listF $1 ; fi | 
| 53 | 
  | 
  | 
    #- move back sym link: | 
| 54 | 
  | 
  | 
    listL=`find $1 -type l` | 
| 55 | 
  | 
  | 
    ttd=`echo $listL | wc -w` | 
| 56 | 
  | 
  | 
    #echo "ttd=$ttd" | 
| 57 | 
  | 
  | 
    if test $ttd != 0 ; then | 
| 58 | 
  | 
  | 
      #echo "listL='$listL'" | 
| 59 | 
  | 
  | 
      shortList=`ls $listL | sed "s|$1/||"` | 
| 60 | 
  | 
  | 
      if [ $prt -ge 2 ] ; then echo "  mv back:" $shortList ; fi | 
| 61 | 
  | 
  | 
      mv $listL . | 
| 62 | 
  | 
  | 
    fi | 
| 63 | 
  | 
  | 
} | 
| 64 | 
  | 
  | 
 | 
| 65 | 
  | 
  | 
#=============================================================================== | 
| 66 | 
  | 
  | 
 | 
| 67 | 
  | 
  | 
if test -f input_ocn/data.tst ; then | 
| 68 | 
jmc | 
1.2 | 
 noc0=`sed -n 's/nIter0=//p' input_ocn/data.tst | sed 's/,//g' | sed 's/ //g'` | 
| 69 | 
  | 
  | 
 Dbl=`sed -n 's/nTimeSteps=//p' input_ocn/data.tst | sed 's/,//g'` | 
| 70 | 
  | 
  | 
 NiOc=`expr $Dbl / 2` | 
| 71 | 
  | 
  | 
 Nit=$NiOc | 
| 72 | 
jmc | 
1.9 | 
else echo " file: 'input_ocn/data.tst' not found" | 
| 73 | 
jmc | 
1.2 | 
 NiOc=0 ; Nit=2 | 
| 74 | 
  | 
  | 
fi | 
| 75 | 
jmc | 
1.9 | 
if test -f input_atm/data.tst ; then | 
| 76 | 
jmc | 
1.2 | 
 nat0=`sed -n 's/nIter0=//p' input_atm/data.tst | sed 's/,//g' | sed 's/ //g'` | 
| 77 | 
  | 
  | 
 Dbl=`sed -n 's/nTimeSteps=//p' input_atm/data.tst | sed 's/,//g'` | 
| 78 | 
  | 
  | 
 NiAt=`expr $Dbl / 2` | 
| 79 | 
jmc | 
1.9 | 
else echo " file: 'input_atm/data.tst' not found" | 
| 80 | 
jmc | 
1.2 | 
 NiAt=0 | 
| 81 | 
  | 
  | 
fi | 
| 82 | 
jmc | 
1.9 | 
if test -f pr_group ; then | 
| 83 | 
  | 
  | 
 Npr=`cat pr_group | wc -l`  | 
| 84 | 
  | 
  | 
 NpOc=`grep -c '\/build_ocn\/mitgcmuv' pr_group` | 
| 85 | 
  | 
  | 
else echo " file: 'pr_group' not found" | 
| 86 | 
  | 
  | 
 Npr=0 | 
| 87 | 
  | 
  | 
fi | 
| 88 | 
  | 
  | 
 | 
| 89 | 
  | 
  | 
#- default: | 
| 90 | 
  | 
  | 
prt=1    # 1 = print some informations ; 2 = print more informations | 
| 91 | 
  | 
  | 
action=1 | 
| 92 | 
  | 
  | 
tmpDir='temp_tst' | 
| 93 | 
jmc | 
1.1 | 
 | 
| 94 | 
jmc | 
1.7 | 
#- parse options: | 
| 95 | 
  | 
  | 
CMD='run_cpl_test' | 
| 96 | 
  | 
  | 
MTH= | 
| 97 | 
  | 
  | 
argList=$* | 
| 98 | 
  | 
  | 
for xx in $argList | 
| 99 | 
  | 
  | 
do | 
| 100 | 
  | 
  | 
 if test $xx = '-mth' ; then MTH=$xx ; shift ; continue ; fi | 
| 101 | 
  | 
  | 
 if test -x ${CMD}_$xx ; then CMD="${CMD}_$xx" ; shift ; continue ; fi | 
| 102 | 
  | 
  | 
done | 
| 103 | 
  | 
  | 
 | 
| 104 | 
jmc | 
1.9 | 
if [ $# -ne 1 ] ; then | 
| 105 | 
jmc | 
1.7 | 
   echo "Usage: `basename $0` [opt] flag" | 
| 106 | 
  | 
  | 
   echo " Check restart of coupled set-up: compare 1 run of 2 x $Nit it long" | 
| 107 | 
  | 
  | 
   echo "                       with 2 consecutive runs of $Nit it long each" | 
| 108 | 
  | 
  | 
   echo "opt = -mth : run script '$CMD' with option '-mth'" | 
| 109 | 
  | 
  | 
   echo "opt = sufx : run script 'run_cpl_test_{sufx}'" | 
| 110 | 
  | 
  | 
   echo " where: flag = 0  -> prepare for 1rst run" | 
| 111 | 
  | 
  | 
   echo "        flag = r1 -> do 1rst run and step 1" | 
| 112 | 
  | 
  | 
   echo "        flag =  1 -> move res. after 1rst run & prepare for 2nd" | 
| 113 | 
  | 
  | 
   echo "        flag = r2 -> do 2nd  run and step 2" | 
| 114 | 
  | 
  | 
   echo "        flag =  2 -> move res. after 2nd  run & prepare for 3rd" | 
| 115 | 
  | 
  | 
   echo "        flag = r3 -> do 3rd  run and step 3" | 
| 116 | 
  | 
  | 
   echo "        flag =  3 -> move res. after 3rd  run" | 
| 117 | 
  | 
  | 
   echo "        flag=(r)N+ , N=1,2,3 => do steps (+run) from: (r)N to 3" | 
| 118 | 
  | 
  | 
   echo "        flag = 4  -> compare Ocean results" | 
| 119 | 
  | 
  | 
   echo "        flag = 5  -> compare Atmos results" | 
| 120 | 
  | 
  | 
   echo "        flag = 6  -> diff pickup files" | 
| 121 | 
jmc | 
1.8 | 
   echo "        flag = 7  -> clean-up output files" | 
| 122 | 
jmc | 
1.7 | 
   exit | 
| 123 | 
  | 
  | 
fi | 
| 124 | 
jmc | 
1.9 | 
if test $NiAt = 0 -o $NiOc = 0 ; then | 
| 125 | 
jmc | 
1.2 | 
    echo " needs 2 data files: 'input_ocn/data.tst' & 'input_atm/data.tst'" | 
| 126 | 
  | 
  | 
    echo "  (corresponding to 1rst run) to continue" | 
| 127 | 
  | 
  | 
  exit | 
| 128 | 
  | 
  | 
fi | 
| 129 | 
jmc | 
1.9 | 
if test $Npr = 0 ; then | 
| 130 | 
  | 
  | 
    echo " needs file: 'pr_group' to continue" ; exit | 
| 131 | 
  | 
  | 
fi | 
| 132 | 
jmc | 
1.7 | 
arg1=$1 | 
| 133 | 
  | 
  | 
xx=`echo $arg1 | sed 's/\+$//'` | 
| 134 | 
  | 
  | 
if test $xx != $arg1 | 
| 135 | 
  | 
  | 
then kUp=`echo $xx | sed 's/^r//'` ; arg1=$xx | 
| 136 | 
  | 
  | 
else kUp=9 ; fi | 
| 137 | 
  | 
  | 
xx=`echo $arg1 | sed 's/^r//'` | 
| 138 | 
  | 
  | 
if test $xx != $arg1 ; then doRun=1 ; arg1=$xx ; else doRun=0 ; fi | 
| 139 | 
  | 
  | 
ksel=$arg1 | 
| 140 | 
  | 
  | 
 | 
| 141 | 
  | 
  | 
CMD="./${CMD} $MTH 3" | 
| 142 | 
  | 
  | 
echo " doRun='$doRun' ; ksel='$ksel' ; kUp='$kUp' ; command='$CMD'" | 
| 143 | 
jmc | 
1.1 | 
 | 
| 144 | 
  | 
  | 
#make sure that local dir & ~jmc/bin is in the path: | 
| 145 | 
  | 
  | 
#export PATH=${PATH}:. | 
| 146 | 
  | 
  | 
 | 
| 147 | 
jmc | 
1.9 | 
rnkO=1 ; rnkA=`expr $rnkO + $NpOc` | 
| 148 | 
jmc | 
1.1 | 
Nit=$NiOc | 
| 149 | 
  | 
  | 
Dbl=`expr $Nit + $Nit` | 
| 150 | 
  | 
  | 
noc1=`expr $noc0 + $Nit` | 
| 151 | 
  | 
  | 
noc2=`expr $noc0 + $Dbl` | 
| 152 | 
jmc | 
1.3 | 
noc0c=`printf "%10.10i\n" $noc0` | 
| 153 | 
  | 
  | 
noc1c=`printf "%10.10i\n" $noc1` | 
| 154 | 
  | 
  | 
noc2c=`printf "%10.10i\n" $noc2` | 
| 155 | 
jmc | 
1.9 | 
echo " Oce (rank_$rnkO):" $noc0  $noc1  $noc2 | 
| 156 | 
  | 
  | 
echo "     " $noc0c $noc1c $noc2c | 
| 157 | 
jmc | 
1.1 | 
 | 
| 158 | 
  | 
  | 
Nit=$NiAt | 
| 159 | 
  | 
  | 
Dbl=`expr $Nit + $Nit` | 
| 160 | 
  | 
  | 
nat1=`expr $nat0 + $Nit` | 
| 161 | 
  | 
  | 
nat2=`expr $nat0 + $Dbl` | 
| 162 | 
jmc | 
1.3 | 
nat0c=`printf "%10.10i\n" $nat0` | 
| 163 | 
  | 
  | 
nat1c=`printf "%10.10i\n" $nat1` | 
| 164 | 
  | 
  | 
nat2c=`printf "%10.10i\n" $nat2` | 
| 165 | 
jmc | 
1.9 | 
echo " Atm (rank_$rnkA):" $nat0  $nat1  $nat2 | 
| 166 | 
  | 
  | 
echo "     " $nat0c $nat1c $nat2c | 
| 167 | 
jmc | 
1.1 | 
 | 
| 168 | 
jmc | 
1.6 | 
listOc="pickup" | 
| 169 | 
jmc | 
1.1 | 
listAt="pickup pickup_cpl pickup_ic pickup_land" | 
| 170 | 
  | 
  | 
 | 
| 171 | 
  | 
  | 
#- dir where to put the results : | 
| 172 | 
  | 
  | 
dir1=res_2it | 
| 173 | 
  | 
  | 
dir2=res_1iA | 
| 174 | 
  | 
  | 
dir3=res_1iB | 
| 175 | 
  | 
  | 
 | 
| 176 | 
jmc | 
1.9 | 
#---- clean up current dir: rename pickup files and move output to temp_tst dir: | 
| 177 | 
  | 
  | 
if test $ksel = 0 ; then | 
| 178 | 
  | 
  | 
 /bin/rm -rf $tmpDir.0 $tmpDir.1 $tmpDir.2 | 
| 179 | 
  | 
  | 
 mkdir $tmpDir.0 $tmpDir.1 $tmpDir.2 | 
| 180 | 
  | 
  | 
 mv std_outp rank_0/*.clog rank_0/data $tmpDir.0 | 
| 181 | 
jmc | 
1.1 | 
 echo ' ' | 
| 182 | 
jmc | 
1.9 | 
 cd rank_$rnkO | 
| 183 | 
jmc | 
1.1 | 
 for xx in $listOc | 
| 184 | 
jmc | 
1.3 | 
 do rnp_loc $xx.ckptA $xx.$noc0c | 
| 185 | 
jmc | 
1.1 | 
 done | 
| 186 | 
jmc | 
1.9 | 
 move_outp ../$tmpDir.1 | 
| 187 | 
  | 
  | 
 mv data ../$tmpDir.1 | 
| 188 | 
  | 
  | 
 mv *.0001.clog ../$tmpDir.0 | 
| 189 | 
  | 
  | 
#-- link back pickup files | 
| 190 | 
  | 
  | 
 sufx=$noc0c | 
| 191 | 
  | 
  | 
 listS=`ls ../$tmpDir.1/pickup*.${sufx}.* 2> /dev/null | head -1` | 
| 192 | 
  | 
  | 
 if test "x$listS" != x ; then | 
| 193 | 
  | 
  | 
   if [ $prt -ge 1 ] ; then echo ' link back:' ../$tmpDir'.1/pickup*.'${sufx}'*' ; fi | 
| 194 | 
  | 
  | 
   if test $action = 1 ; then ln -s ../$tmpDir.1/pickup*.${sufx}* . ; fi | 
| 195 | 
  | 
  | 
 fi | 
| 196 | 
  | 
  | 
 cd .. | 
| 197 | 
  | 
  | 
 cd rank_$rnkA | 
| 198 | 
jmc | 
1.1 | 
 for xx in $listAt | 
| 199 | 
jmc | 
1.3 | 
 do rnp_loc $xx.ckptA $xx.$nat0c | 
| 200 | 
jmc | 
1.1 | 
 done | 
| 201 | 
jmc | 
1.9 | 
 move_outp ../$tmpDir.2 | 
| 202 | 
  | 
  | 
 mv data ../$tmpDir.2 | 
| 203 | 
  | 
  | 
 mv *.0001.clog ../$tmpDir.0 | 
| 204 | 
  | 
  | 
#-- link back pickup files | 
| 205 | 
  | 
  | 
 sufx=$nat0c | 
| 206 | 
  | 
  | 
 listS=`ls ../$tmpDir.2/pickup*.${sufx}.* 2> /dev/null | head -1` | 
| 207 | 
  | 
  | 
 if test "x$listS" != x ; then | 
| 208 | 
  | 
  | 
   if [ $prt -ge 1 ] ; then echo ' link back:' ../$tmpDir'.2/pickup*.'${sufx}'*' ; fi | 
| 209 | 
  | 
  | 
   if test $action = 1 ; then ln -s ../$tmpDir.2/pickup*.${sufx}* . ; fi | 
| 210 | 
  | 
  | 
 fi | 
| 211 | 
jmc | 
1.1 | 
 cd .. | 
| 212 | 
  | 
  | 
#-- prepare for running Dbl | 
| 213 | 
jmc | 
1.7 | 
 echo '=> prepare for running Dbl:' | 
| 214 | 
jmc | 
1.1 | 
 Dbl=`expr $NiOc + $NiOc` | 
| 215 | 
  | 
  | 
 sed "1 s/[0-9]*/$Dbl/" input_cpl/data > rank_0/data | 
| 216 | 
jmc | 
1.9 | 
 cp -p input_ocn/data.tst rank_$rnkO/data | 
| 217 | 
  | 
  | 
 cp -p input_atm/data.tst rank_$rnkA/data | 
| 218 | 
jmc | 
1.1 | 
 echo 'rank_0/data:' `head -1 rank_0/data` | 
| 219 | 
jmc | 
1.9 | 
 egrep 'nIter0|nTimeSteps' rank_$rnkO/data rank_$rnkA/data | 
| 220 | 
jmc | 
1.1 | 
fi | 
| 221 | 
  | 
  | 
 | 
| 222 | 
jmc | 
1.7 | 
#-- run & post-process Dbl: | 
| 223 | 
jmc | 
1.9 | 
if [ $ksel -eq 1 -o $kUp -le 1 ] ; then | 
| 224 | 
jmc | 
1.7 | 
 echo ' ' | 
| 225 | 
  | 
  | 
#-- run coupled test (Dbl): | 
| 226 | 
jmc | 
1.9 | 
 if [ $doRun -eq 1 -o $kUp -lt 1 ] ; then | 
| 227 | 
jmc | 
1.7 | 
   echo "=> run (Dbl): $CMD" | 
| 228 | 
  | 
  | 
   $CMD | 
| 229 | 
  | 
  | 
 fi | 
| 230 | 
jmc | 
1.1 | 
#-- after running Dbl: | 
| 231 | 
  | 
  | 
 rm -rf $dir1 | 
| 232 | 
  | 
  | 
 mkdir $dir1 | 
| 233 | 
jmc | 
1.7 | 
 echo '=> move STDOUT to' $dir1 | 
| 234 | 
jmc | 
1.9 | 
 mv std_outp rank_0/*.0000.clog rank_$rnkO/*.0001.clog rank_$rnkA/*.0001.clog $dir1 | 
| 235 | 
  | 
  | 
 mv rank_$rnkO/STDOUT.0000 $dir1/ocnSTDOUT.0000 | 
| 236 | 
  | 
  | 
 mv rank_$rnkA/STDOUT.0000 $dir1/atmSTDOUT.0000 | 
| 237 | 
jmc | 
1.1 | 
 | 
| 238 | 
  | 
  | 
 mkdir $dir1/ocn | 
| 239 | 
jmc | 
1.9 | 
 cd rank_$rnkO | 
| 240 | 
jmc | 
1.1 | 
 for xx in $listOc | 
| 241 | 
  | 
  | 
 do | 
| 242 | 
jmc | 
1.3 | 
  rnp_loc $xx.ckptA $xx.$noc2c | 
| 243 | 
jmc | 
1.1 | 
 done | 
| 244 | 
jmc | 
1.9 | 
 echo 'move output to' $dir1/ocn | 
| 245 | 
  | 
  | 
 move_outp  ../$dir1/ocn | 
| 246 | 
jmc | 
1.1 | 
 cd .. | 
| 247 | 
  | 
  | 
 | 
| 248 | 
  | 
  | 
 mkdir $dir1/atm | 
| 249 | 
jmc | 
1.9 | 
 cd rank_$rnkA | 
| 250 | 
jmc | 
1.1 | 
 for xx in $listAt | 
| 251 | 
  | 
  | 
 do | 
| 252 | 
jmc | 
1.3 | 
  rnp_loc $xx.ckptA $xx.$nat2c | 
| 253 | 
jmc | 
1.1 | 
 done | 
| 254 | 
jmc | 
1.9 | 
 echo 'move output to' $dir1/atm | 
| 255 | 
  | 
  | 
 move_outp  ../$dir1/atm | 
| 256 | 
jmc | 
1.1 | 
 cd .. | 
| 257 | 
  | 
  | 
 | 
| 258 | 
  | 
  | 
#-- prepare for running 1iA | 
| 259 | 
jmc | 
1.7 | 
 echo '=> prepare for running 1iA:' | 
| 260 | 
jmc | 
1.1 | 
 Nit=$NiOc | 
| 261 | 
  | 
  | 
 Dbl=`expr $Nit + $Nit` | 
| 262 | 
  | 
  | 
 sed "1 s/[0-9]*/$Nit/" input_cpl/data > rank_0/data | 
| 263 | 
jmc | 
1.9 | 
 sed "s/^ nTimeSteps=$Dbl/ nTimeSteps=$Nit/g" input_ocn/data.tst > rank_$rnkO/data | 
| 264 | 
jmc | 
1.1 | 
 Nit=$NiAt | 
| 265 | 
  | 
  | 
 Dbl=`expr $Nit + $Nit` | 
| 266 | 
jmc | 
1.9 | 
 sed "s/^ nTimeSteps=$Dbl/ nTimeSteps=$Nit/g" input_atm/data.tst > rank_$rnkA/data | 
| 267 | 
jmc | 
1.1 | 
 echo 'rank_0/data:' `head -1 rank_0/data` | 
| 268 | 
jmc | 
1.9 | 
 egrep 'nIter0|nTimeSteps' rank_$rnkO/data rank_$rnkA/data | 
| 269 | 
jmc | 
1.1 | 
fi | 
| 270 | 
  | 
  | 
 | 
| 271 | 
jmc | 
1.7 | 
#-- run & post-process 1iA: | 
| 272 | 
jmc | 
1.9 | 
if [ $ksel -eq 2 -o $kUp -le 2 ] ; then | 
| 273 | 
jmc | 
1.7 | 
 echo ' ' | 
| 274 | 
  | 
  | 
#-- run coupled test (1iA): | 
| 275 | 
jmc | 
1.9 | 
 if [ $doRun -eq 1 -o $kUp -lt 2 ] ; then | 
| 276 | 
jmc | 
1.7 | 
   echo "=> run (1iA): $CMD" | 
| 277 | 
  | 
  | 
   $CMD | 
| 278 | 
  | 
  | 
 fi | 
| 279 | 
jmc | 
1.1 | 
#-- after running 1iA | 
| 280 | 
  | 
  | 
 rm -rf $dir2 | 
| 281 | 
  | 
  | 
 mkdir $dir2 | 
| 282 | 
jmc | 
1.7 | 
 echo '=> move STDOUT to' $dir2 | 
| 283 | 
jmc | 
1.9 | 
 mv std_outp rank_0/*.clog rank_$rnkO/*.clog rank_$rnkA/*.clog $dir2 | 
| 284 | 
  | 
  | 
 mv rank_$rnkO/STDOUT.0000 $dir2/ocnSTDOUT.0000 | 
| 285 | 
  | 
  | 
 mv rank_$rnkA/STDOUT.0000 $dir2/atmSTDOUT.0000 | 
| 286 | 
jmc | 
1.1 | 
 | 
| 287 | 
  | 
  | 
 mkdir $dir2/ocn | 
| 288 | 
jmc | 
1.9 | 
 cd rank_$rnkO | 
| 289 | 
jmc | 
1.1 | 
 for xx in $listOc | 
| 290 | 
  | 
  | 
 do | 
| 291 | 
jmc | 
1.3 | 
  rnp_loc $xx.ckptA $xx.$noc1c | 
| 292 | 
jmc | 
1.1 | 
 done | 
| 293 | 
jmc | 
1.9 | 
# remove pickup*.$noc0c* sym-link: | 
| 294 | 
  | 
  | 
 find . ! -name . -prune -type l -name 'pickup*.'${noc0c}'*' -exec rm {} \; | 
| 295 | 
  | 
  | 
 echo 'move output to' $dir2/ocn | 
| 296 | 
  | 
  | 
 move_outp  ../$dir2/ocn | 
| 297 | 
jmc | 
1.1 | 
 cd .. | 
| 298 | 
  | 
  | 
 | 
| 299 | 
  | 
  | 
 mkdir $dir2/atm | 
| 300 | 
jmc | 
1.9 | 
 cd rank_$rnkA | 
| 301 | 
jmc | 
1.1 | 
 for xx in $listAt | 
| 302 | 
  | 
  | 
 do | 
| 303 | 
jmc | 
1.3 | 
  rnp_loc $xx.ckptA $xx.$nat1c | 
| 304 | 
jmc | 
1.1 | 
 done | 
| 305 | 
jmc | 
1.9 | 
# remove pickup*.$nat0c* sym-link: | 
| 306 | 
  | 
  | 
 find . ! -name . -prune -type l -name 'pickup*.'${nat0c}'*' -exec rm {} \; | 
| 307 | 
  | 
  | 
 echo 'move output to' $dir2/atm | 
| 308 | 
  | 
  | 
 move_outp  ../$dir2/atm | 
| 309 | 
jmc | 
1.1 | 
 cd .. | 
| 310 | 
  | 
  | 
 | 
| 311 | 
  | 
  | 
#-- prepare for running 1iB | 
| 312 | 
jmc | 
1.7 | 
 echo '=> prepare for running 1iB:' | 
| 313 | 
jmc | 
1.9 | 
 cd rank_$rnkO | 
| 314 | 
  | 
  | 
 ln -s ../$dir2/ocn/pickup*.$noc1c.* . | 
| 315 | 
jmc | 
1.1 | 
 sed "s/^ nIter0=$noc0/ nIter0=$noc1/g" data > data.tmp | 
| 316 | 
  | 
  | 
 mv -f data.tmp data | 
| 317 | 
jmc | 
1.9 | 
 cd ../rank_$rnkA | 
| 318 | 
  | 
  | 
 ln -s ../$dir2/atm/pickup*.$nat1c.* . | 
| 319 | 
jmc | 
1.1 | 
 sed "s/^ nIter0=$nat0/ nIter0=$nat1/g" data > data.tmp | 
| 320 | 
  | 
  | 
 mv -f data.tmp data | 
| 321 | 
  | 
  | 
 cd .. | 
| 322 | 
  | 
  | 
 echo 'rank_0/data:' `head -1 rank_0/data` | 
| 323 | 
jmc | 
1.9 | 
 egrep 'nIter0|nTimeSteps' rank_$rnkO/data rank_$rnkA/data | 
| 324 | 
jmc | 
1.1 | 
fi | 
| 325 | 
  | 
  | 
 | 
| 326 | 
jmc | 
1.7 | 
#-- run & post-process 1iB: | 
| 327 | 
jmc | 
1.9 | 
if [ $ksel -eq 3 -o $kUp -le 3 ] ; then | 
| 328 | 
jmc | 
1.7 | 
 echo ' ' | 
| 329 | 
  | 
  | 
#-- run coupled test (1iB): | 
| 330 | 
jmc | 
1.9 | 
 if [ $doRun -eq 1 -o $kUp -lt 3 ] ; then | 
| 331 | 
jmc | 
1.7 | 
   echo "=> run (1iB): $CMD" | 
| 332 | 
  | 
  | 
   $CMD | 
| 333 | 
  | 
  | 
 fi | 
| 334 | 
jmc | 
1.1 | 
#-- after running 1iB | 
| 335 | 
  | 
  | 
 rm -rf $dir3 | 
| 336 | 
  | 
  | 
 mkdir $dir3 | 
| 337 | 
jmc | 
1.7 | 
 echo '=> move STDOUT to' $dir3 | 
| 338 | 
jmc | 
1.9 | 
 mv std_outp rank_0/*.clog rank_$rnkO/*.clog rank_$rnkA/*.clog $dir3 | 
| 339 | 
  | 
  | 
 mv rank_$rnkO/STDOUT.0000 $dir3/ocnSTDOUT.0000 | 
| 340 | 
  | 
  | 
 mv rank_$rnkA/STDOUT.0000 $dir3/atmSTDOUT.0000 | 
| 341 | 
jmc | 
1.1 | 
 | 
| 342 | 
  | 
  | 
 mkdir $dir3/ocn | 
| 343 | 
jmc | 
1.9 | 
 cd rank_$rnkO | 
| 344 | 
jmc | 
1.1 | 
 for xx in $listOc | 
| 345 | 
jmc | 
1.3 | 
 do rnp_loc $xx.ckptA $xx.$noc2c | 
| 346 | 
jmc | 
1.1 | 
 done | 
| 347 | 
jmc | 
1.9 | 
# remove pickup*.$noc1c* sym-link: | 
| 348 | 
  | 
  | 
 find . ! -name . -prune -type l -name 'pickup*.'${noc1c}'*' -exec rm {} \; | 
| 349 | 
  | 
  | 
 echo 'move output to' $dir3/ocn | 
| 350 | 
  | 
  | 
 move_outp  ../$dir3/ocn | 
| 351 | 
jmc | 
1.1 | 
 cd .. | 
| 352 | 
  | 
  | 
 | 
| 353 | 
  | 
  | 
 mkdir $dir3/atm | 
| 354 | 
jmc | 
1.9 | 
 cd rank_$rnkA | 
| 355 | 
jmc | 
1.1 | 
 for xx in $listAt | 
| 356 | 
jmc | 
1.3 | 
 do rnp_loc $xx.ckptA $xx.$nat2c | 
| 357 | 
jmc | 
1.1 | 
 done | 
| 358 | 
jmc | 
1.9 | 
# remove pickup*.$nat1c* sym-link: | 
| 359 | 
  | 
  | 
 find . ! -name . -prune -type l -name 'pickup*.'${nat1c}'*' -exec rm {} \; | 
| 360 | 
  | 
  | 
 echo 'move output to' $dir3/atm | 
| 361 | 
  | 
  | 
 move_outp  ../$dir3/atm | 
| 362 | 
jmc | 
1.1 | 
 cd .. | 
| 363 | 
  | 
  | 
fi | 
| 364 | 
  | 
  | 
 | 
| 365 | 
  | 
  | 
#-- compare output: | 
| 366 | 
jmc | 
1.9 | 
if test $ksel = 4 ; then | 
| 367 | 
jmc | 
1.1 | 
 rm -f ocn.txt | 
| 368 | 
  | 
  | 
 echo ' run 2it: ---------- ' > tmp1.txt | 
| 369 | 
jmc | 
1.9 | 
 grep "cg2d_init_res" $dir1/ocnSTDOUT.0000 \ | 
| 370 | 
jmc | 
1.1 | 
      | sed 's/.* cg2d_init_res =//' >> tmp1.txt | 
| 371 | 
  | 
  | 
 Nit=`expr $NiOc + 2` | 
| 372 | 
jmc | 
1.9 | 
 echo "NiOc= $NiOc ; Nit= $Nit" | 
| 373 | 
jmc | 
1.1 | 
 sed "$Nit i \ ... 2it continue ..." tmp1.txt > tmp2.txt | 
| 374 | 
  | 
  | 
 rm -f tmp1.txt | 
| 375 | 
  | 
  | 
 echo ' run 1iA: ---------- ' > tmp1.txt | 
| 376 | 
jmc | 
1.9 | 
 grep "cg2d_init_res" $dir2/ocnSTDOUT.0000 \ | 
| 377 | 
jmc | 
1.1 | 
      | sed 's/.* cg2d_init_res =//' >> tmp1.txt | 
| 378 | 
  | 
  | 
 echo ' run 1iB: ---------- ' >> tmp1.txt | 
| 379 | 
jmc | 
1.9 | 
 grep "cg2d_init_res" $dir3/ocnSTDOUT.0000 \ | 
| 380 | 
jmc | 
1.1 | 
      | sed 's/.* cg2d_init_res =//' >> tmp1.txt | 
| 381 | 
  | 
  | 
 nl tmp1.txt > tmp1.ttt | 
| 382 | 
  | 
  | 
 nl tmp2.txt > tmp2.ttt | 
| 383 | 
  | 
  | 
 join tmp1.ttt tmp2.ttt | sed 's/[0-9]*//' > ocn.txt | 
| 384 | 
  | 
  | 
 rm -f tmp1.ttt tmp2.ttt tmp1.txt tmp2.txt | 
| 385 | 
  | 
  | 
 echo ' ' ; echo '-- compare cg2d_init_res (Ocean):' | 
| 386 | 
  | 
  | 
 cat ocn.txt | 
| 387 | 
  | 
  | 
 exit | 
| 388 | 
  | 
  | 
fi | 
| 389 | 
  | 
  | 
 | 
| 390 | 
jmc | 
1.9 | 
if test $ksel = 5 ; then | 
| 391 | 
jmc | 
1.1 | 
 rm -f atm.txt | 
| 392 | 
  | 
  | 
 echo ' run 2it: ---------- ' > tmp1.txt | 
| 393 | 
jmc | 
1.9 | 
 grep "cg2d_init_res" $dir1/atmSTDOUT.0000 \ | 
| 394 | 
jmc | 
1.1 | 
      | sed 's/.* cg2d_init_res =//' >> tmp1.txt | 
| 395 | 
  | 
  | 
 Nit=`expr $NiAt + 2` | 
| 396 | 
  | 
  | 
 sed "$Nit i \ ... 2it continue ..." tmp1.txt > tmp2.txt | 
| 397 | 
  | 
  | 
 rm -f tmp1.txt | 
| 398 | 
  | 
  | 
 echo ' run 1iA: ---------- ' > tmp1.txt | 
| 399 | 
jmc | 
1.9 | 
 grep "cg2d_init_res" $dir2/atmSTDOUT.0000 \ | 
| 400 | 
jmc | 
1.1 | 
      | sed 's/.* cg2d_init_res =//' >> tmp1.txt | 
| 401 | 
  | 
  | 
 echo ' run 1iB: ---------- ' >> tmp1.txt | 
| 402 | 
jmc | 
1.9 | 
 grep "cg2d_init_res" $dir3/atmSTDOUT.0000 \ | 
| 403 | 
jmc | 
1.1 | 
      | sed 's/.* cg2d_init_res =//' >> tmp1.txt | 
| 404 | 
  | 
  | 
 nl tmp1.txt > tmp1.ttt | 
| 405 | 
  | 
  | 
 nl tmp2.txt > tmp2.ttt | 
| 406 | 
  | 
  | 
 join tmp1.ttt tmp2.ttt | sed 's/[0-9]*//' > atm.txt | 
| 407 | 
  | 
  | 
 rm -f tmp1.ttt tmp2.ttt tmp1.txt tmp2.txt | 
| 408 | 
  | 
  | 
 echo ' ' ; echo '-- compare cg2d_init_res (Atmos):' | 
| 409 | 
  | 
  | 
 cat atm.txt | 
| 410 | 
  | 
  | 
 exit | 
| 411 | 
  | 
  | 
fi | 
| 412 | 
  | 
  | 
 | 
| 413 | 
  | 
  | 
#- compare pickup file: | 
| 414 | 
jmc | 
1.9 | 
if test $ksel = 6 ; then | 
| 415 | 
jmc | 
1.1 | 
 echo ' ' ; echo '=== compare Ocn pickups: ==============' | 
| 416 | 
  | 
  | 
 for xx in $listOc | 
| 417 | 
  | 
  | 
 do | 
| 418 | 
jmc | 
1.3 | 
   dif_tiles $dir1/ocn $dir3/ocn $xx.$noc2c | 
| 419 | 
jmc | 
1.1 | 
 done | 
| 420 | 
  | 
  | 
 echo ' ' ; echo '=== compare Atm pickups: ==============' | 
| 421 | 
  | 
  | 
 for xx in $listAt | 
| 422 | 
  | 
  | 
 do | 
| 423 | 
jmc | 
1.3 | 
   dif_tiles $dir1/atm $dir3/atm $xx.$nat2c | 
| 424 | 
jmc | 
1.1 | 
 done | 
| 425 | 
  | 
  | 
 exit | 
| 426 | 
  | 
  | 
fi | 
| 427 | 
jmc | 
1.8 | 
 | 
| 428 | 
  | 
  | 
#- clean-up and reset: | 
| 429 | 
jmc | 
1.9 | 
if test $ksel = 7 ; then | 
| 430 | 
jmc | 
1.8 | 
 echo "== clean-up and reset :" | 
| 431 | 
jmc | 
1.9 | 
#echo '--> remove pickup*.'$noc0c'* sym-links:' | 
| 432 | 
  | 
  | 
#cd rank_$rnkO | 
| 433 | 
  | 
  | 
#  listS=`find . ! -name . -prune -type l -name 'pickup*.'${noc0c}'*'` | 
| 434 | 
  | 
  | 
#  if [ $prt -ge 2 ] ; then echo " in rank_$rnkO: rm" $listS ; fi | 
| 435 | 
  | 
  | 
#  rm -f $listS | 
| 436 | 
  | 
  | 
#echo '--> remove pickup*.'$nat0c'* sym-links:' | 
| 437 | 
  | 
  | 
#cd ../rank_$rnkA | 
| 438 | 
  | 
  | 
#  listS=`find . ! -name . -prune -type l -name 'pickup*.'${nat0c}'*'` | 
| 439 | 
  | 
  | 
#  if [ $prt -ge 2 ] ; then echo " in rank_$rnkA: rm" $listS ; fi | 
| 440 | 
  | 
  | 
#  rm -f $listS | 
| 441 | 
  | 
  | 
#cd .. | 
| 442 | 
jmc | 
1.8 | 
#- move back files from temp_tst dir: | 
| 443 | 
jmc | 
1.9 | 
 echo '=> restore std data files' | 
| 444 | 
  | 
  | 
 rm -f rank_0/data  rank_$rnkO/data rank_$rnkA/data | 
| 445 | 
  | 
  | 
 mv $tmpDir.0/*Ocean.0001.clog $tmpDir.1/* rank_$rnkO | 
| 446 | 
  | 
  | 
 mv $tmpDir.0/*Atmos.0001.clog $tmpDir.2/* rank_$rnkA | 
| 447 | 
  | 
  | 
 mv $tmpDir.0/std_outp . | 
| 448 | 
  | 
  | 
 mv $tmpDir.0/* rank_0 | 
| 449 | 
  | 
  | 
 rmdir $tmpDir.0 $tmpDir.1 $tmpDir.2 | 
| 450 | 
  | 
  | 
#echo '--> remove output dir and output files:' | 
| 451 | 
  | 
  | 
#echo ' rm -rf' $dir1 $dir2 $dir3 | 
| 452 | 
  | 
  | 
#rm -rf $dir1 $dir2 $dir3 | 
| 453 | 
  | 
  | 
#rm -f atm.txt ocn.txt | 
| 454 | 
jmc | 
1.8 | 
 exit | 
| 455 | 
  | 
  | 
fi |