/[MITgcm]/MITgcm_contrib/jmc_script/tst_2+2_cpl
ViewVC logotype

Contents of /MITgcm_contrib/jmc_script/tst_2+2_cpl

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.9 - (show annotations) (download)
Mon Dec 6 02:57:56 2010 UTC (13 years, 5 months ago) by jmc
Branch: MAIN
Changes since 1.8: +164 -115 lines
works on more than 3 CPUs (get information from file "pr_group")

1 #! /usr/bin/env bash
2
3 # $Header: /u/gcmpack/MITgcm_contrib/jmc_script/tst_2+2_cpl,v 1.8 2010/10/22 03:10:56 jmc Exp $
4 # $Name: $
5
6 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 listY=`ls -1 $1*`
13 for yy in $listY
14 do
15 zz=`echo $yy | sed "s/^$1/$2/"`
16 mv $yy $zz
17 done
18 }
19
20 dif_tiles()
21 {
22 # dif_data_loc dd1 dd2 file
23 # for all tiles ==> do diff dd1/file dd2/file'
24 dd1=$1 ; dd2=$2 ; zz=$3
25 chkmeta='N'
26 listY=`(cd $dd1 ; ls $zz.*.data | sed "s/$zz\.//" | sed "s/\.data//")`
27 echo '--> file='$zz', listY='$listY
28 for yy in $listY
29 do
30 echo diff $dd1/$zz.$yy.data $dd2
31 diff $dd1/$zz.$yy.data $dd2
32 out=$?
33 if test $out != 0
34 then echo 'Diff outp=' $out ' ==> stop'
35 exit ; fi
36 if test $chkmeta = 'Y' ; then
37 echo diff $dd1/$zz.$yy.meta $dd2
38 diff $dd1/$zz.$yy.meta $dd2
39 out=$?
40 if test $out != 0 ; then echo 'Diff outp=' $out ' ==> stop' ; exit ; fi
41 fi
42 done
43 }
44
45 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 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 else echo " file: 'input_ocn/data.tst' not found"
73 NiOc=0 ; Nit=2
74 fi
75 if test -f input_atm/data.tst ; then
76 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 else echo " file: 'input_atm/data.tst' not found"
80 NiAt=0
81 fi
82 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
94 #- 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 if [ $# -ne 1 ] ; then
105 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 echo " flag = 7 -> clean-up output files"
122 exit
123 fi
124 if test $NiAt = 0 -o $NiOc = 0 ; then
125 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 if test $Npr = 0 ; then
130 echo " needs file: 'pr_group' to continue" ; exit
131 fi
132 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
144 #make sure that local dir & ~jmc/bin is in the path:
145 #export PATH=${PATH}:.
146
147 rnkO=1 ; rnkA=`expr $rnkO + $NpOc`
148 Nit=$NiOc
149 Dbl=`expr $Nit + $Nit`
150 noc1=`expr $noc0 + $Nit`
151 noc2=`expr $noc0 + $Dbl`
152 noc0c=`printf "%10.10i\n" $noc0`
153 noc1c=`printf "%10.10i\n" $noc1`
154 noc2c=`printf "%10.10i\n" $noc2`
155 echo " Oce (rank_$rnkO):" $noc0 $noc1 $noc2
156 echo " " $noc0c $noc1c $noc2c
157
158 Nit=$NiAt
159 Dbl=`expr $Nit + $Nit`
160 nat1=`expr $nat0 + $Nit`
161 nat2=`expr $nat0 + $Dbl`
162 nat0c=`printf "%10.10i\n" $nat0`
163 nat1c=`printf "%10.10i\n" $nat1`
164 nat2c=`printf "%10.10i\n" $nat2`
165 echo " Atm (rank_$rnkA):" $nat0 $nat1 $nat2
166 echo " " $nat0c $nat1c $nat2c
167
168 listOc="pickup"
169 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 #---- 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 echo ' '
182 cd rank_$rnkO
183 for xx in $listOc
184 do rnp_loc $xx.ckptA $xx.$noc0c
185 done
186 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 for xx in $listAt
199 do rnp_loc $xx.ckptA $xx.$nat0c
200 done
201 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 cd ..
212 #-- prepare for running Dbl
213 echo '=> prepare for running Dbl:'
214 Dbl=`expr $NiOc + $NiOc`
215 sed "1 s/[0-9]*/$Dbl/" input_cpl/data > rank_0/data
216 cp -p input_ocn/data.tst rank_$rnkO/data
217 cp -p input_atm/data.tst rank_$rnkA/data
218 echo 'rank_0/data:' `head -1 rank_0/data`
219 egrep 'nIter0|nTimeSteps' rank_$rnkO/data rank_$rnkA/data
220 fi
221
222 #-- run & post-process Dbl:
223 if [ $ksel -eq 1 -o $kUp -le 1 ] ; then
224 echo ' '
225 #-- run coupled test (Dbl):
226 if [ $doRun -eq 1 -o $kUp -lt 1 ] ; then
227 echo "=> run (Dbl): $CMD"
228 $CMD
229 fi
230 #-- after running Dbl:
231 rm -rf $dir1
232 mkdir $dir1
233 echo '=> move STDOUT to' $dir1
234 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
238 mkdir $dir1/ocn
239 cd rank_$rnkO
240 for xx in $listOc
241 do
242 rnp_loc $xx.ckptA $xx.$noc2c
243 done
244 echo 'move output to' $dir1/ocn
245 move_outp ../$dir1/ocn
246 cd ..
247
248 mkdir $dir1/atm
249 cd rank_$rnkA
250 for xx in $listAt
251 do
252 rnp_loc $xx.ckptA $xx.$nat2c
253 done
254 echo 'move output to' $dir1/atm
255 move_outp ../$dir1/atm
256 cd ..
257
258 #-- prepare for running 1iA
259 echo '=> prepare for running 1iA:'
260 Nit=$NiOc
261 Dbl=`expr $Nit + $Nit`
262 sed "1 s/[0-9]*/$Nit/" input_cpl/data > rank_0/data
263 sed "s/^ nTimeSteps=$Dbl/ nTimeSteps=$Nit/g" input_ocn/data.tst > rank_$rnkO/data
264 Nit=$NiAt
265 Dbl=`expr $Nit + $Nit`
266 sed "s/^ nTimeSteps=$Dbl/ nTimeSteps=$Nit/g" input_atm/data.tst > rank_$rnkA/data
267 echo 'rank_0/data:' `head -1 rank_0/data`
268 egrep 'nIter0|nTimeSteps' rank_$rnkO/data rank_$rnkA/data
269 fi
270
271 #-- run & post-process 1iA:
272 if [ $ksel -eq 2 -o $kUp -le 2 ] ; then
273 echo ' '
274 #-- run coupled test (1iA):
275 if [ $doRun -eq 1 -o $kUp -lt 2 ] ; then
276 echo "=> run (1iA): $CMD"
277 $CMD
278 fi
279 #-- after running 1iA
280 rm -rf $dir2
281 mkdir $dir2
282 echo '=> move STDOUT to' $dir2
283 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
287 mkdir $dir2/ocn
288 cd rank_$rnkO
289 for xx in $listOc
290 do
291 rnp_loc $xx.ckptA $xx.$noc1c
292 done
293 # 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 cd ..
298
299 mkdir $dir2/atm
300 cd rank_$rnkA
301 for xx in $listAt
302 do
303 rnp_loc $xx.ckptA $xx.$nat1c
304 done
305 # 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 cd ..
310
311 #-- prepare for running 1iB
312 echo '=> prepare for running 1iB:'
313 cd rank_$rnkO
314 ln -s ../$dir2/ocn/pickup*.$noc1c.* .
315 sed "s/^ nIter0=$noc0/ nIter0=$noc1/g" data > data.tmp
316 mv -f data.tmp data
317 cd ../rank_$rnkA
318 ln -s ../$dir2/atm/pickup*.$nat1c.* .
319 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 egrep 'nIter0|nTimeSteps' rank_$rnkO/data rank_$rnkA/data
324 fi
325
326 #-- run & post-process 1iB:
327 if [ $ksel -eq 3 -o $kUp -le 3 ] ; then
328 echo ' '
329 #-- run coupled test (1iB):
330 if [ $doRun -eq 1 -o $kUp -lt 3 ] ; then
331 echo "=> run (1iB): $CMD"
332 $CMD
333 fi
334 #-- after running 1iB
335 rm -rf $dir3
336 mkdir $dir3
337 echo '=> move STDOUT to' $dir3
338 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
342 mkdir $dir3/ocn
343 cd rank_$rnkO
344 for xx in $listOc
345 do rnp_loc $xx.ckptA $xx.$noc2c
346 done
347 # 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 cd ..
352
353 mkdir $dir3/atm
354 cd rank_$rnkA
355 for xx in $listAt
356 do rnp_loc $xx.ckptA $xx.$nat2c
357 done
358 # 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 cd ..
363 fi
364
365 #-- compare output:
366 if test $ksel = 4 ; then
367 rm -f ocn.txt
368 echo ' run 2it: ---------- ' > tmp1.txt
369 grep "cg2d_init_res" $dir1/ocnSTDOUT.0000 \
370 | sed 's/.* cg2d_init_res =//' >> tmp1.txt
371 Nit=`expr $NiOc + 2`
372 echo "NiOc= $NiOc ; Nit= $Nit"
373 sed "$Nit i \ ... 2it continue ..." tmp1.txt > tmp2.txt
374 rm -f tmp1.txt
375 echo ' run 1iA: ---------- ' > tmp1.txt
376 grep "cg2d_init_res" $dir2/ocnSTDOUT.0000 \
377 | sed 's/.* cg2d_init_res =//' >> tmp1.txt
378 echo ' run 1iB: ---------- ' >> tmp1.txt
379 grep "cg2d_init_res" $dir3/ocnSTDOUT.0000 \
380 | 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 if test $ksel = 5 ; then
391 rm -f atm.txt
392 echo ' run 2it: ---------- ' > tmp1.txt
393 grep "cg2d_init_res" $dir1/atmSTDOUT.0000 \
394 | 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 grep "cg2d_init_res" $dir2/atmSTDOUT.0000 \
400 | sed 's/.* cg2d_init_res =//' >> tmp1.txt
401 echo ' run 1iB: ---------- ' >> tmp1.txt
402 grep "cg2d_init_res" $dir3/atmSTDOUT.0000 \
403 | 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 if test $ksel = 6 ; then
415 echo ' ' ; echo '=== compare Ocn pickups: =============='
416 for xx in $listOc
417 do
418 dif_tiles $dir1/ocn $dir3/ocn $xx.$noc2c
419 done
420 echo ' ' ; echo '=== compare Atm pickups: =============='
421 for xx in $listAt
422 do
423 dif_tiles $dir1/atm $dir3/atm $xx.$nat2c
424 done
425 exit
426 fi
427
428 #- clean-up and reset:
429 if test $ksel = 7 ; then
430 echo "== clean-up and reset :"
431 #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 #- move back files from temp_tst dir:
443 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 exit
455 fi

  ViewVC Help
Powered by ViewVC 1.1.22