/[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.7 - (show annotations) (download)
Mon Sep 16 23:38:47 2019 UTC (5 years, 10 months ago) by jmc
Branch: MAIN
Changes since 1.6: +15 -12 lines
update testing script on villon (new Ubuntu testing platform)
 + tie-up batsi and baudelaire testing script

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

  ViewVC Help
Powered by ViewVC 1.1.22