/[MITgcm]/MITgcm_contrib/test_scripts/ref_machine/test_villon
ViewVC logotype

Contents of /MITgcm_contrib/test_scripts/ref_machine/test_villon

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


Revision 1.10 - (show annotations) (download)
Wed Sep 18 17:08:32 2019 UTC (5 years, 10 months ago) by jmc
Branch: MAIN
Changes since 1.9: +17 -3 lines
fix links to additional input files

1 #! /usr/bin/env bash
2
3 # $Header: /u/gcmpack/MITgcm_contrib/test_scripts/ref_machine/test_villon,v 1.9 2019/09/18 16:01:22 jmc Exp $
4
5 # Test script for MITgcm that should work on most of the x86_64 Linux machines.
6
7 tst_grp=0 ; if test $# = 1 ; then tst_grp=$1 ; fi
8 if test $tst_grp != 'a' -a $tst_grp != 'b' ; then
9 echo "missing or invalid argument (expect: 'a' or 'b') ==> exit"
10 exit 1
11 fi
12
13 #- defaults
14 #export PATH="$PATH:/usr/local/bin"
15 if [ -d ~/bin ]; then export PATH=$PATH:~/bin ; fi
16 #- to get case insensitive "ls" (and order of tested experiments)
17 export LC_ALL="en_US.UTF-8"
18 # Turn off stack limit for FIZHI & AD-tests
19 ulimit -s unlimited
20 # MPI test (for now, only with gfortran)
21 # source $HOME/bin/openmpi.sh
22
23 #- method to access CVS:
24 cmdCVS='cvs -d :pserver:cvsanon@mitgcm.org:/u/gcmpack'
25 # cmdCVS='cvs -d /u/gcmpack'
26 # export CVS_RSH=ssh
27 # cmdCVS='cvs -q -d :ext:jmc@mitgcm.org:/u/gcmpack'
28
29 #- which GitHub repository to use and how to access it:
30 git_repo='MITgcm'; git_code='MITgcm' ; git_other='verification_other'
31 #git_repo='altMITgcm'; #git_code='MITgcm66h'
32 #--
33 git_repo="https://github.com/$git_repo"
34 #git_repo="git://github.com/$git_repo"
35 #git_repo="git@github.com:$git_repo"
36
37 #-------------------------------------------------------------------
38 # checkOut=3 : clone from GitHub and make a new copy (if sepDir)
39 # =2 : update (git pull) repo and make a new copy code (switch to 3 if no repo)
40 # =1 : skip update but use a new copy (if sepDir)
41 # =0 : use existing test code ( switch to 1 if missing test code )
42 dInWeek=`date +%a`
43
44 dNam=`hostname -s | tr '[:upper:]' '[:lower:]'`
45 TESTDIR="$HOME/test_${dNam}"
46 #TESTDIR="/scratch/jmc/test_${dNam}"
47 MC=13 ; outDir="${dNam}-${tst_grp}"
48 MC=11 ;#outDir=$dNam
49 sepDir=1
50 option=
51
52 if test $tst_grp = 'a' ; then
53 checkOut=2
54 tst_list='mpa mpi mp2+rs mth'
55 else
56 checkOut=1
57 tst_list='adm gfo+rs'
58 #tst_list="$tst_list oad"
59 if test "x$dInWeek" = xSun ; then tst_list="$tst_list tlm" ; fi
60 fi
61 echo " test: $outDir ; list='$tst_list'"
62
63 #option="-nc" ; checkOut=0
64 #option="-q" ; checkOut=0
65
66 TODAY=`date +%d`
67 tmpFil="/tmp/"`basename $0`".$$"
68 tdir=$TESTDIR
69 updFile='updated_code' ; today=`date +%Y%m%d`
70
71 if [ $checkOut -le 1 ] ; then
72 if test -e $tdir/MITgcm_today/doc ; then
73 echo $tdir/MITgcm_today/doc 'exist'
74 else
75 echo -n $tdir/MITgcm_today 'missing ; '
76 checkOut=2
77 echo "will make a new copy ( checkOut=$checkOut )"
78 fi
79 fi
80
81 if [ $checkOut -ge 2 ] ; then
82 #---- cleaning:
83 if test -e $tdir ; then
84 #- remove date/lock-file:
85 if test -f $tdir/$updFile ; then rm -f $tdir/$updFile ; sleep 2 ; fi
86 echo -n "Removing working copy: $tdir/MITgcm_today ..."
87 test -e $tdir/MITgcm_today && rm -rf $tdir/MITgcm_today
88 else
89 echo -n "Creating a working dir: $tdir ..."
90 mkdir $tdir
91 fi
92 echo " done"
93 cd $tdir
94
95 #---- Making a new clone or updating existing one:
96 if [ $checkOut -eq 2 ] ; then
97 if test -e $git_code/.git/config ; then
98 echo $git_code/.git/config 'exist'
99 else
100 echo -n $git_code/.git/config 'missing ; '
101 checkOut=3
102 echo "will get new clone ( checkOut=$checkOut )"
103 fi
104 if test -e $git_other/.git/config ; then
105 echo $git_other/.git/config 'exist'
106 else
107 echo -n $git_other/.git/config 'missing ; '
108 checkOut=3
109 echo "will get new clone ( checkOut=$checkOut )"
110 fi
111 fi
112 if [ $checkOut -eq 3 ] ; then
113 test -e $git_code && rm -rf $git_code
114 echo "Make a clone of $git_code from repo: $git_repo ..."
115 git clone $git_repo/${git_code}.git 2> $tmpFil
116 retVal=$?
117 if test $retVal = 0 ; then
118 echo ' --> done!'
119 rm -f $tmpFil
120 else
121 echo " Error: 'git clone' returned: $retVal"
122 cat $tmpFil
123 rm -f $tmpFil
124 exit 2
125 fi
126 test -e $git_other && rm -rf $git_other
127 echo "Make a clone of $git_other from repo: $git_repo ..."
128 git clone $git_repo/${git_other}.git 2> $tmpFil
129 retVal=$?
130 if test $retVal = 0 ; then
131 echo ' --> done!'
132 rm -f $tmpFil
133 else
134 echo " Error: 'git clone' returned: $retVal"
135 cat $tmpFil
136 rm -f $tmpFil
137 exit 2
138 fi
139 else
140 echo "Updating current clone ( $git_code ) ..."
141 ( cd $git_code ; git pull )
142 retVal=$?
143 if test $retVal = 0 ; then
144 echo ' --> done!'
145 else
146 echo "git pull on '"`hostname`"' fail (return val=$retVal) => exit"
147 exit 3
148 fi
149 ( cd $git_code ; git checkout master -- . )
150 echo "Updating current clone ( $git_other ) ..."
151 ( cd $git_other ; git pull )
152 retVal=$?
153 if test $retVal = 0 ; then
154 echo ' --> done!'
155 else
156 echo "git pull on '"`hostname`"' fail (return val=$retVal) => exit"
157 exit 3
158 fi
159 ( cd $git_other ; git checkout master -- . )
160 fi
161 #---- making a new working copy: MITgcm_today
162 rsync -a $git_code/ MITgcm_today --exclude '.git'
163 if test $sepDir = 0 ; then
164 echo -n " make a local copy of $git_other in MITgcm_today ..." | tee -a $tdir/output_$tt
165 ( cd MITgcm_today
166 rsync -a ../$git_other/ $git_other --exclude '.git' )
167 echo " done" | tee -a $tdir/output_$tt
168 fi
169 #---- updating "other_input" dir
170 if test -d other_input ; then
171 list_dirs=`(cd other_input ; ls 2> /dev/null )`
172 echo "Updating ( $cmdCVS update -P -d ) 'other_input' extra dirs:"
173 for exd in $list_dirs ; do
174 if test -d other_input/$exd/CVS ; then echo " $exd"
175 ( cd other_input/$exd ; $cmdCVS update -P -d )
176 fi
177 done
178 echo " <-- update of 'other_input' dirs done"
179 fi
180 #---- update date/lock-file:
181 echo $today > $updFile ; sleep 2 ; ls -l $updFile
182 else
183 cd $tdir
184 fi
185
186 #------------------------------------------------------------------------
187
188 firstTst=`echo $tst_list | awk '{print $1}'`
189 last_Tst=`echo $tst_list | awk '{print $NF}'`
190 for tt in $tst_list
191 do
192
193 echo "================================================================"
194 typ=`echo $tt | sed 's/+rs//'`
195 #- define list of additional experiences to test:
196 addExp=''
197 if test $typ = 'mpi' ; then
198 addExp="offline_cheapaml atm_gray atm_strato"
199 fi
200 if test $typ = 'gfo' -o $typ = 'ifc' -o $typ = 'adm' ; then
201 addExp="$addExp global_oce_biogeo_bling"
202 fi
203 if test $typ = 'gfo' -o $typ = 'ifc' ; then
204 addExp="$addExp shelfice_remeshing"
205 fi
206 if test $typ = 'mpi' ; then
207 addExp="$addExp global_ocean.gm_k3d"
208 addExp="$addExp global_oce_cs32"
209 addExp="$addExp global_oce_llc90"
210 fi
211 #- check day and time:
212 curDay=`date +%d` ; curHour=`date +%H`
213 if [ $curDay -ne $TODAY ] ; then
214 date ; echo "day is over => skip test $typ"
215 continue
216 fi
217 if [ $curHour -ge 18 ] ; then
218 date ; echo "too late to run test $typ"
219 continue
220 fi
221 if test $sepDir = 0 -a "x$option" != x -a $tt != $last_Tst ; then
222 echo "using option='$option' prevent multi-tests => skip test $typ"
223 continue
224 fi
225 #- clean-up old output files
226 if test -d $tdir/prev ; then
227 mv -f $tdir/output_${typ}* $tdir/prev
228 else
229 rm -f $tdir/output_${typ}*
230 fi
231 touch $tdir/output_$tt
232 echo -n "-- Starting test: $tt at: " >> $tdir/output_$tt
233 date >> $tdir/output_$tt
234 echo " typ='$typ', addExp='$addExp'" >> $tdir/output_$tt
235 if test $sepDir = 1 ; then
236 new_dir="MITgcm_$typ"
237 reUse=0 ; if [ $checkOut -le 0 ] ; then reUse=1 ; fi
238 if test -d $new_dir/doc -a $reUse = 1 ; then
239 cd $tdir/$new_dir
240 if test $tt != $typ ; then
241 ( cd verification ; ../tools/do_tst_2+2 -clean )
242 fi
243 else
244 if test -d prev ; then
245 #-- save previous summary:
246 oldS=`ls -t ${new_dir}/verification/tr_${outDir}_*/summary.txt 2> /dev/null | head -1`
247 if test "x$oldS" != x ; then
248 cat $oldS | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > prev/tr_out.$typ
249 touch -r $oldS prev/tr_out.$typ
250 fi
251 if test $tt != $typ ; then
252 oldS=`ls -t ${new_dir}/verification/rs_${outDir}_*/summary.txt 2> /dev/null | head -1`
253 if test "x$oldS" != x ; then cp -p -f $oldS prev/rs_out.$typ ; fi
254 fi
255 fi
256 echo " remove dir: $new_dir and make new one" >> $tdir/output_$tt
257 test -e $new_dir && rm -rf $new_dir
258 mkdir $new_dir
259 #- before making a copy, check that code has been updated
260 nCount=0; today=`date +%Y%m%d`
261 updDate=0 ; test -f $updFile && updDate=`cat $updFile`
262 while [ $today -gt $updDate ] ; do
263 nCount=`expr $nCount + 1`
264 if [ $nCount -gt 40 ] ; then
265 echo " waiting too long (nCount=$nCount) for updated code"
266 echo " today=$today , updDate=$updDate "
267 ls -l $updFile
268 exit
269 fi
270 sleep 60
271 updDate=0 ; test -f $updFile && updDate=`cat $updFile`
272 done
273 ls -l $updFile | tee -a $tdir/output_$tt
274 echo " waited nCount=$nCount for updated code ($updDate) to copy" | tee -a $tdir/output_$tt
275 #-----------------------------
276 if test -d MITgcm_today -a -d $new_dir ; then
277 echo " copy main code from MITgcm_today to $new_dir" | tee -a $tdir/output_$tt
278 cp -ra MITgcm_today/* $new_dir 2>&1 | tee -a $tdir/output_$tt
279 else
280 if test -d MITgcm_today ; then
281 echo " missing dir $new_dir --> end test $tt" | tee -a $tdir/output_$tt
282 else
283 echo " missing dir MITgcm_today --> end test $tt" | tee -a $tdir/output_$tt
284 fi
285 continue
286 fi
287 echo -n " cd $tdir/$new_dir " | tee -a $tdir/output_$tt
288 cd $tdir/$new_dir
289 retVal=$?
290 ( echo "(retVal= $retVal )" ; pwd ) | tee -a $tdir/output_$tt
291 if test -d verification ; then
292 echo " check: dir verification exist" | tee -a $tdir/output_$tt
293 else
294 echo " missing dir verification --> end test $tt" | tee -a $tdir/output_$tt
295 continue
296 fi
297 if test "x$addExp" != x ; then
298 echo -n " make a local copy of $git_other ..." | tee -a $tdir/output_$tt
299 rsync -a $tdir/$git_other/ $git_other --exclude '.git'
300 echo " done" | tee -a $tdir/output_$tt
301 fi
302 #-- add additional experience from $git_other
303 for exp2add in $addExp ; do
304 echo " add link: $exp2add (from $git_other )" | tee -a $tdir/output_$tt
305 ( cd verification ; ln -s ../$git_other/$exp2add . )
306 if test $exp2add = 'global_oce_cs32' ; then
307 echo " link dir 'other_input/core2_cnyf' in here" | tee -a $tdir/output_$tt
308 ( cd ${git_other}/${exp2add}
309 ln -s ../../../other_input/core2_cnyf . )
310 fi
311 if test $exp2add = 'global_oce_llc90' ; then
312 echo " link dir 'other_input/gael_oce_llc90_input' to 'input_fields'" \
313 | tee -a $tdir/output_$tt
314 ( cd ${git_other}/${exp2add}
315 test -L input_fields && /bin/rm -f input_fields
316 ln -s ../../../other_input/gael_oce_llc90_input input_fields
317 echo " link dirs: 'core2_cnyf' & 'global_oce_input_fields/*' in input_verifs" \
318 | tee -a $tdir/output_$tt
319 test ! -e input_verifs && mkdir input_verifs
320 ( cd input_verifs ; /bin/rm -f *
321 ln -s ../../../../other_input/core2_cnyf .
322 ln -s ../../../../other_input/global_oce_input_fields/* . )
323 )
324 fi
325 #if test $exp2add = 'shelfice_remeshing' ; then
326 # echo " link dir 'other_input/remeshing_code' to 'extra_code'" | tee -a $tdir/output_$tt
327 # ( cd ${git_other}/${exp2add}
328 # ln -s ../../../other_input/remeshing_code extra_code )
329 #fi
330 done
331 fi
332 else
333 cd $tdir/MITgcm_today
334 fi
335 cd verification
336
337 #-- set the testreport command:
338 comm="./testreport"
339 if test $typ = 'g7a' -o $typ = 'adm' -o $typ = 'mpa' ; then
340 comm="$comm -adm"
341 elif test $typ = 'oad' ; then
342 comm="$comm -oad"
343 elif test $typ = 'tlm' ; then
344 comm="$comm -tlm"
345 elif test $typ = 'mth' -o $typ = 'mp2' ; then
346 export GOMP_STACKSIZE=400m
347 export OMP_NUM_THREADS=2
348 comm="$comm -mth"
349 else
350 comm="$comm -md cyrus-makedepend"
351 fi
352 comm="$comm -odir $outDir -a jm_c@mitgcm.org"
353 #-- set the optfile (+ mpi & match-precision)
354 MPI=0
355 case $typ in
356 'g77'|'g7a') OPTFILE='../tools/build_options/linux_amd64_g77' ;;
357 'gfo'|'adm'|'oad'|'tlm'|'mth') comm="$comm -match $MC -devel"
358 OPTFILE='../tools/build_options/linux_amd64_gfortran' ;;
359 'ifc') comm="$comm -devel"
360 OPTFILE='../tools/build_options/linux_amd64_ifort11' ;;
361 'pgi') OPTFILE='../tools/build_options/linux_amd64_pgf77' ;;
362 'mpa'|'mpi'|'mp2') comm="$comm -match $MC -devel" ; MPI=8
363 OPTFILE='../tools/build_options/linux_amd64_gfortran' ;;
364 *) OPTFILE= ;;
365 esac
366 #-- set MPI command:
367 if test $MPI != 0 ; then
368 if test $typ = 'mp2' ; then MPI=3 ; fi
369 if test $typ = 'mpa' ; then
370 EXE="mpirun -np TR_NPROC ./mitgcmuv_ad"
371 else
372 EXE="mpirun -np TR_NPROC ./mitgcmuv"
373 fi
374 fi
375
376 #-- set specific Env Vars:
377 if test $typ = 'oad' ; then
378 #- for some reasons, "source ScriptFile | tee -a LogFile"
379 # does run the script but does not keep the env-var settings
380 source $HOME/mitgcm/bin/setenv_OpenAD.sh >> $tdir/output_$tt
381 fi
382 if test $typ = 'ifc' ; then
383 source /srv/software/intel/intel-11.1.073/bin/ifortvars.sh intel64
384 fi
385 if test $typ = 'pgi' ; then
386 #listT='fizhi-cs-32x32x40 fizhi-cs-aqualev20'
387 export PGI=/srv/software/pgi/pgi-10.9
388 export PATH="$PATH:$PGI/linux86-64/10.9/bin"
389 export LM_LICENSE_FILE=$PGI/license.dat
390 fi
391
392 if test $sepDir = 0 -a "x$option" = x -a $tt = $firstTst -a $checkOut = 0 ; then
393 #-- cleaning:
394 echo "======================"
395 echo "Cleaning test directories:" | tee -a $tdir/output_$tt
396 cmdCLN="./testreport -clean"
397 echo " clean dir running: $cmdCLN" | tee -a $tdir/output_$tt
398 $cmdCLN >> $tdir/output_$tt 2>&1
399 echo "======================"
400 echo "" | tee -a $tdir/output_$tt
401 fi
402
403 #-- run the testreport command:
404 echo -n "Running testreport using:" | tee -a $tdir/output_$tt
405 if test "x$OPTFILE" != x ; then
406 comm="$comm -of=$OPTFILE"
407 fi
408 if test $MPI = 0 ; then echo '' | tee -a $tdir/output_$tt
409 else echo " (EXE='$EXE')" | tee -a $tdir/output_$tt
410 comm="$comm -MPI $MPI -command \"\$EXE\""
411 fi
412 if test "x$option" != x ; then comm="$comm $option" ; fi
413 #if test $typ = 'pgi' ; then comm="$comm -t \"\$listT\"" ; fi
414 echo " \"eval $comm\"" | tee -a $tdir/output_$tt
415 echo "======================"
416 eval $comm >> $tdir/output_$tt 2>&1
417 sed -n "/^An email /,/^======== End of testreport / p" $tdir/output_$tt
418 echo "" | tee -a $tdir/output_$tt
419
420 #-- also test restart (test 2+2=4)
421 if test $tt != $typ
422 then
423 echo "testing restart using:" | tee -a $tdir/output_$tt
424 comm="../tools/do_tst_2+2 -o $outDir -a jm_c@mitgcm.org"
425 if test $MPI = 0 ; then
426 echo " \"$comm\"" | tee -a $tdir/output_$tt
427 echo "======================"
428 $comm >> $tdir/output_$tt 2>&1
429 else
430 echo " \"$comm -mpi -exe $EXE\"" | tee -a $tdir/output_$tt
431 echo "======================"
432 $comm -mpi -exe "$EXE" >> $tdir/output_$tt 2>&1
433 fi
434 echo ; cat tst_2+2_out.txt
435 echo
436 fi
437 export OMP_NUM_THREADS=1
438
439 if test $sepDir = 0 ; then
440 #-- cleaning:
441 echo "======================"
442 echo "Cleaning test directories:" | tee -a $tdir/output_$tt
443 if test $tt != $typ ; then
444 cmdCLN="../tools/do_tst_2+2 -clean"
445 echo " clean tst_2+2 running: $cmdCLN" | tee -a $tdir/output_$tt
446 $cmdCLN >> $tdir/output_$tt 2>&1
447 fi
448 if test $tt != $last_Tst ; then
449 cmdCLN="./testreport -clean"
450 echo " clean dir running: $cmdCLN" | tee -a $tdir/output_$tt
451 $cmdCLN >> $tdir/output_$tt 2>&1
452 fi
453 echo "======================"
454 echo
455 fi
456 cd $tdir
457
458 done

  ViewVC Help
Powered by ViewVC 1.1.22