New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
sette_rpt.sh in branches/2017/dev_merge_2017/NEMOGCM/SETTE – NEMO

source: branches/2017/dev_merge_2017/NEMOGCM/SETTE/sette_rpt.sh @ 9534

Last change on this file since 9534 was 9534, checked in by mathiot, 6 years ago

correction on the check of .svn repository as since svn v1.7, .svn repository only available in the root of the working copy. Add print of last changed revision. Check revision at the root of the working copy.

  • Property svn:executable set to *
File size: 13.9 KB
Line 
1#!/bin/bash -f
2# set -vx
3# simple SETTE report generator.
4#
5# This version should be run in the SETTE directory.
6# The machine name will be picked up from the sette.sh script but the location of the
7# validation directory needs to be set here (currently assumed to reside in the ../CONFIG directory)
8#
9#########################################################################################
10######################### Start of function definitions #################################
11##
12
13function restfile() {
14# Rebuild ice restart for SAS CONFIG, and restartability checks. Expects LONG and SHORT run directories.
15# For Stand Alone Surface configuration ocean is not running, just run ice model; so no outputs ocean files.
16# Compares LONG rebuild restart ice file with equivalent entry from the SHORT rebuild restart ice file.
17#
18# check nco module loaded, and load it if not
19if [ ! $( echo $LOADEDMODULES | grep cdo ) ]; then module load cdo >& /dev/null ; fi
20#
21  vdir=$1
22  nam=$2
23  pass=$3
24
25#
26  if [ -d $vdir/$nam ]; then
27    dorv=`ls -1rt $vdir/$nam/$mach/ | tail -1l `
28    dorv=`echo $dorv | sed -e 's:.*/::'`
29    rep1=`ls -1rt $vdir/$nam/$mach/$dorv/ | tail -2l | head -1 `
30    rep2=`ls -1rt $vdir/$nam/$mach/$dorv/ | tail -1l`
31    cd ${SAS_RESTART_DIR}/LONG
32    #SF add here compilation of rebuild_tools to rebuild restart files, and add comparison of restart files
33    cd ${TOOLS_DIR}
34    ./maketools -n REBUILD_NEMO -m ${mach} > /dev/null 2>&1
35    cd ${TOOLS_DIR}/REBUILD_NEMO
36    #SF echo "REBUILD LONG restart SAS files, without standard output"
37    ./rebuild_nemo -t 4 ../../CONFIG/ORCA2_SAS_LIM3_ST/LONG/SAS_00000240_restart_ice  $NPROC > /dev/null 2>&1
38    #SF echo "REBUILD SHORT restart SAS files, without standard output"
39    ./rebuild_nemo -t 4 ../../CONFIG/ORCA2_SAS_LIM3_ST/SHORT/SAS_00000240_restart_ice $NPROC >&-
40    cd ${SAS_RESTART_DIR}/LONG
41    #SF echo "COPY rebuild restart files"
42    cp SAS_00000240_restart_ice.nc $vdir/$nam/$mach/$dorv/LONG/.
43    cp ../SHORT/SAS_00000240_restart_ice.nc $vdir/$nam/$mach/$dorv/SHORT/.
44
45    f1o=$vdir/$nam/$mach/$dorv/LONG/SAS_00000240_restart_ice.nc
46    f2o=$vdir/$nam/$mach/$dorv/SHORT/SAS_00000240_restart_ice.nc
47    if  [ ! -f $f1o ] &&  [ ! -f $f2o ] ; then
48      printf "%-27s %s\n" $nam " REBUILD SAS restart ice DOES NOT exists; incomplete test";
49      return;
50    fi
51    #
52    done_oce=0
53    #
54  if  [  -f $f1o ] && [  -f $f2o ]; then
55## Compare the two netcdf files
56    cdo diffn $f1o $f2o > cdo_diff.out 2> /dev/null
57## Identical if cdo_diff.out exists but has zero size
58    if [ ! -s cdo_diff.out ]; then
59       difi=0
60    else
61## Identical if first character of $dif ==0
62       dif=$( grep -om1 '[0-9]* of [0-9]* records differ' cdo_diff.out )
63# difi contains the first character of summary of cdo dif. if = 0, then 0 record differ between the 2 files   
64       if [ -n "$dif" ]; then
65           difi=`echo $dif | cut -c -1`
66       fi
67    fi
68    \rm cdo_diff.out
69
70    if [ $difi == 0 ]; then   
71       if [ $pass == 0 ]; then
72         printf "%-27s %s %s\n" $nam  " ice restarts are IDENTICAL  passed : " $dorv
73       fi
74    else
75       printf "%-27s %s %s\n" $nam  " ice restarts are DIFFERENT  FAILED : " $dorv 
76        #
77   # Offer view of differences on the second pass
78   #
79        if [ $pass == 1 ]; then
80          echo "<return> to view restart_ice.nc differences"
81          read y
82          cdo -diffv $f1o $f2o
83          done_oce=1
84          #echo "<return> to continue"
85          #read y
86        fi
87    fi
88  else
89      printf "%-27s %s\n" $nam " incomplete test";
90      return;
91  fi
92#
93fi
94}
95
96function resttest() { 
97#
98# Restartability checks. Expects LONG and SHORT run directories
99# Compares end of LONG stat files with equivalent entries from the SHORT stat files.
100#
101  vdir=$1
102  nam=$2
103  pass=$3
104#
105  if [ -d $vdir/$nam ]; then
106    dorv=`ls -1rt $vdir/$nam/$mach/ | tail -1l `
107    dorv=`echo $dorv | sed -e 's:.*/::'`
108    f1o=$vdir/$nam/$mach/$dorv/LONG/ocean.output
109    f1s=$vdir/$nam/$mach/$dorv/LONG/run.stat
110    f1t=$vdir/$nam/$mach/$dorv/LONG/tracer.stat
111    f2o=$vdir/$nam/$mach/$dorv/SHORT/ocean.output
112    f2s=$vdir/$nam/$mach/$dorv/SHORT/run.stat
113    f2t=$vdir/$nam/$mach/$dorv/SHORT/tracer.stat
114
115    if  [ ! -f $f1s ] &&  [ ! -f $f1t ] ; then
116      printf "%-27s %s\n" $nam " incomplete test";
117      return;
118    fi
119    if  [ ! -f $f2s ] &&  [ ! -f $f2t ] ; then
120      printf "%-27s %s\n" $nam " incomplete test";
121      return;
122    fi
123#
124    done_oce=0
125
126    if  [  -f $f1s ] && [  -f $f2s ]; then
127      nl=(`wc -l $f2s`)
128      tail -${nl[0]} $f1s > f1.tmp$$
129      cmp -s f1.tmp$$ $f2s
130      if [ $? == 0 ]; then
131        if [ $pass == 0 ]; then
132          printf "%-27s %s %s\n" $nam  " run.stat    restartability  passed : " $dorv
133        fi
134      else
135        printf "%-27s %s %s\n" $nam  " run.stat    restartability  FAILED : " $dorv 
136#
137# Offer view of differences on the second pass
138#
139        if [ $pass == 1 ]; then
140          echo "<return> to view run.stat differences"
141          read y
142          sdiff f1.tmp$$ $f2s
143          echo "<return> to view ocean.output differences"
144          read y
145          sdiff $f1o $f2o | grep "|"
146          done_oce=1
147          echo "<return> to continue"
148          read y
149        fi
150      fi
151    fi
152#
153# Check tracer.stat files (if they exist)
154#
155    if  [  -f $f1t ] && [  -f $f2t ]; then
156      nl=(`wc -l $f2t`)
157      tail -${nl[0]} $f1t > f1.tmp$$
158      cmp -s f1.tmp$$ $f2t
159      if [ $? == 0 ]; then
160        if [ $pass == 0 ]; then
161          printf "%-27s %s %s\n" $nam  " tracer.stat restartability  passed : " $dorv
162        fi
163      else
164        printf "%-27s %s %s\n" $nam  " tracer.stat restartability  FAILED : " $dorv 
165#
166# Offer view of differences on the second pass
167#
168        if [ $pass == 1 ]; then
169          echo "<return> to view tracer.stat differences"
170          read y
171          sdiff f1.tmp$$ $f2t
172#
173# Only offer ocean.output view if it has not been viewed previously
174#
175          if [ $done_oce == 0 ]; then
176            echo "<return> to view ocean.output differences"
177            read y
178            sdiff $f1o $f2o | grep "|"
179          fi
180          echo "<return> to continue"
181          read y
182        fi
183      fi
184    fi
185    rm f1.tmp$$
186  fi
187}
188
189function reprotest(){
190#
191# Reproducibility checks. Expects REPRO_N_M and REPRO_I_J run directories
192# Compares end of stat files from each
193#
194  vdir=$1
195  nam=$2
196  pass=$3
197#
198  if [ -d $vdir/$nam ]; then
199    dorv=`ls -1rt $vdir/$nam/$mach/ | tail -1l `
200    dorv=`echo $dorv | sed -e 's:.*/::'`
201    rep1=`ls -1rt $vdir/$nam/$mach/$dorv/ | grep REPRO | tail -2l | head -1 `
202    rep2=`ls -1rt $vdir/$nam/$mach/$dorv/ | grep REPRO | tail -1l`
203    f1o=$vdir/$nam/$mach/$dorv/$rep1/ocean.output
204    f1s=$vdir/$nam/$mach/$dorv/$rep1/run.stat
205    f1t=$vdir/$nam/$mach/$dorv/$rep1/tracer.stat
206    f2o=$vdir/$nam/$mach/$dorv/$rep2/ocean.output
207    f2s=$vdir/$nam/$mach/$dorv/$rep2/run.stat
208    f2t=$vdir/$nam/$mach/$dorv/$rep2/tracer.stat
209
210    if  [ ! -f $f1s ] && [ ! -f $f1t ] ; then
211      printf "%-27s %s\n" $nam " incomplete test";
212      return;
213    fi
214    if  [ ! -f $f2s ] && [ ! -f $f2t ] ; then
215      printf "%-27s %s\n" $nam " incomplete test";
216      return;
217    fi
218#
219    done_oce=0
220
221    if  [ -f $f1s ] && [ -f $f2s ] ; then
222      cmp -s $f1s $f2s
223      if [ $? == 0 ]; then
224        if [ $pass == 0 ]; then
225          printf "%-27s %s %s\n" $nam  " run.stat    reproducibility passed : " $dorv
226        fi
227      else
228        printf "%-27s %s %s\n" $nam  " run.stat    reproducibility FAILED : " $dorv 
229#
230# Offer view of differences on the second pass
231#
232        if [ $pass == 1 ]; then
233          echo "<return> to view run.stat differences"
234          read y
235          sdiff f1.tmp$$ $f2s
236          echo "<return> to view ocean.output differences"
237          read y
238          sdiff $f1o $f2o | grep "|"
239          done_oce=1
240          echo "<return> to continue"
241          read y
242        fi
243      fi
244    fi
245#
246# Check tracer.stat files (if they exist)
247#
248    if  [ -f $f1t ] && [ -f $f2t ] ; then
249      cmp -s $f1t $f2t
250      if [ $? == 0 ]; then
251        if [ $pass == 0 ]; then           printf "%-27s %s %s\n" $nam  " tracer.stat reproducibility passed : " $dorv
252        fi
253      else
254        printf "%-27s %s %s\n" $nam  " tracer.stat reproducibility  FAILED : " $dorv
255#
256# Offer view of differences on the second pass
257#
258        if [ $pass == 1 ]; then
259          echo "<return> to view tracer.stat differences"
260          read y
261          sdiff $f1t $f2t
262#
263# Only offer ocean.output view if it has not been viewed previously
264#
265          if [ $done_oce == 0 ]; then
266            echo "<return> to view ocean.output differences"
267            read y
268            sdiff $f1o $f2o | grep "|"
269          fi
270          echo "<return> to continue"
271          read y
272        fi
273      fi
274    fi
275  fi
276}
277
278function runtest(){
279#
280# Run checks.
281# Check presence of E R R O R in ocean.output from each
282#
283  vdir=$1
284  nam=$2
285  pass=$3
286#
287  if [ -d $vdir/$nam ]; then
288    dorv=`ls -1rt $vdir/$nam/$mach/ | tail -1l `
289    dorv=`echo $dorv | sed -e 's:.*/::'`
290    rep1=`ls -1rt $vdir/$nam/$mach/$dorv/ | grep REPRO | tail -2l | head -1 `
291    f1o=$vdir/$nam/$mach/$dorv/$rep1/ocean.output
292    if  [ ! -f $f1o ] ; then
293      printf "%-27s %s %s\n" $nam " ocean.output is MISSING : " $dorv
294      return;
295    else
296      nerr=`grep 'E R R O R' $f1o | wc -l`
297      if [[ $nerr > 0 ]]; then
298        printf "%-27s %s %s\n" $nam " run FAILED : " $dorv
299        if [ $pass == 1 ]; then
300          echo "<return> to view end of ocean.output"
301          read y
302          tail -100 $f1o
303          echo ''
304          echo "full ocean.output available here: $f1o"
305        fi
306      fi
307    fi
308  else
309    printf "%-27s %s %s\n" $nam  " directory is MISSING : " $dorv
310  fi
311}
312
313function identictest(){
314#
315#  checks AGRIF does not corrupe results with no AGRIF zoom. Expects ORCA2AGUL/AGRIFNOZ and ORCA2AGUL_NAGR/AGRIFNO  run directories
316# Compares solver.stat files for each
317#
318  vdir=$1
319  dir1=$2
320  dir2=$3
321  pass=$4
322#
323  if [ -d $vdir/$dir1 ] && [ -d $vdir/$dir2 ]; then
324    dorv1=`ls -1rt $vdir/$dir1/$mach/ | tail -1l `
325    dorv1=`echo $dorv1 | sed -e 's:.*/::'`
326    dorv2=`ls -1rt $vdir/$dir2/$mach/ | tail -1l `
327    dorv2=`echo $dorv2 | sed -e 's:.*/::'`
328
329    rep1=`ls -1rt $vdir/$dir1/$mach/$dorv1/ |  tail -1l`
330#clem    rep2=`ls -1rt $vdir/$dir2/$mach/$dorv2/ |  tail -1l`
331    rep2=`ls -1rt $vdir/$dir1/$mach/$dorv1/ |  tail -1l`
332    f1s=$vdir/$dir1/$mach/$dorv1/$rep1/run.stat
333    f2s=$vdir/$dir2/$mach/$dorv2/$rep2/run.stat
334
335    if  [ ! -f $f1s ] && [ ! -f $f2s ] ; then
336      printf "%-27s %s\n" $dir1 $dir2 " incomplete test";
337      return;
338    fi
339#
340    done_oce=0
341
342    if  [ -f $f1s ] && [ -f $f2s ] ; then
343      cmp -s $f1s $f2s
344      if [ $? == 0 ]; then
345        if [ $pass == 0 ]; then
346          printf "%-5s %s %-5s %s %s %s\n" $rep1 "AGRIF vs" $rep2 "NOAGRIF run.stat    unchanged  -    passed : " $dorv1 $dorv2
347        fi
348      else
349        printf "%-5s %s %-5s %s %s %s\n" $rep1 "AGRIF vs" $rep2 "NOAGRIF run.stat    changed  -     FAILED : " $dorv1 $dorv2
350#
351# Offer view of differences on the second pass
352#
353        if [ $pass == 1 ]; then
354          echo "<return> to view run.stat differences"
355          read y
356          sdiff $f1s $f2s
357          done_oce=1
358          echo "<return> to continue"
359          read y
360        fi
361      fi
362    fi
363  else
364    printf "%-27s %s\n" $dir1 $dir2 " incomplete test";
365  fi
366}
367########################### END of function definitions #################################
368##                                                                                     ##
369##    Main script                                                                      ##
370##                                                                                     ##
371#########################################################################################
372#
373  mach=`grep "COMPILER=" ./sette.sh | sed -e 's/COMPILER=//'`
374  NEMO_VALID=`grep "NEMO_VALIDATION_DIR=" ./param.cfg | sed -e 's/NEMO_VALIDATION_DIR=//'`
375  NEMO_VALID=`eval "echo $NEMO_VALID"`
376#
377  if [ ! -d $NEMO_VALID ]; then
378    echo "$NEMO_VALID validation directory not found"
379    exit
380  fi
381#
382# Directory to run the tests
383  SETTE_DIR=$(cd $(dirname "$0"); pwd)
384  MAIN_DIR=$SETTE_DIR/../..
385  CONFIG_DIR0=${MAIN_DIR}/CONFIG
386  TOOLS_DIR=${MAIN_DIR}/TOOLS
387  COMPIL_DIR=${TOOLS_DIR}/COMPILE
388  NPROC=32
389  SAS_RESTART_DIR=${CONFIG_DIR0}/ORCA2_SAS_LIM3_ST
390#
391# Show current revision tag and branch name
392#
393cmd="svn"
394[ ! -d "$MAIN_DIR/.svn" ] && cmd="git $cmd"
395echo $cmd 
396echo "$MAIN_DIR/.svn"
397lastchange=`$cmd info ${MAIN_DIR} | grep -i "Last Changed Rev:" | sed -e "s/ //g" | cut -d ":" -f 2`
398revision=`$cmd info | grep Revision | cut -d ":" -f 2 | tr -d ' '`
399branchname=`$cmd info | grep URL | rev | cut -d "/" -f 3 | rev`
400echo "SETTE validation report : $branchname @ r$revision  ( last change @ r$lastchange )"
401#
402# The script also needs the date or revision tag. Currently this is taken from the latest sub-directory found in each directory
403
404for pass in  0 1
405do
406#
407 if [ $pass == 0 ]; then
408   echo "" 
409   echo "!!---------------1st pass------------------!!"
410 fi
411 if [ $pass == 1 ]; then
412    echo ""
413    echo "!!---------------2nd pass------------------!!"
414 fi
415#
416
417# Rebuild and restartability test for SAS
418# clem: not needed anymore
419# for restart_file in WORCA2_SAS_LIM3_ST
420# do
421#   restfile $NEMO_VALID $restart_file $pass
422# done
423#
424# Restartability test
425 echo ""
426 echo "   !----restart----!   "
427 for restart_test in WGYRE_PISCES_ST WORCA2_LIM3_PISCES_ST WORCA2_OFF_PISCES_ST WAMM12_ST WORCA2_SAS_LIM3_ST WAGRIF_NORDIC_ST WISOMIP_ST WOVERFLOW_ST WLOCK_EXCHANGE_ST WVORTEX_ST WWAD_ST WSAS_BIPER_ST
428 do
429   resttest $NEMO_VALID $restart_test $pass
430 done
431#
432# Reproducibility tests
433 echo ""
434 echo "   !----repro----!   "
435 for repro_test in WGYRE_PISCES_ST WORCA2_LIM3_PISCES_ST WORCA2_OFF_PISCES_ST WAMM12_ST WORCA2_SAS_LIM3_ST WORCA2_LIM3_OBS_ST WAGRIF_NORDIC_ST WISOMIP_ST
436 do
437   reprotest $NEMO_VALID $repro_test $pass
438   runtest $NEMO_VALID $repro_test $pass
439 done
440
441# AGRIF special check to ensure results are unchanged with and without key_agrif
442 echo ""
443 echo "   !----agrif check----!   "
444 dir1=WAGRIF_NORDIC_NOAGRIF_ST
445 dir2=WAGRIF_NORDIC_ST
446 identictest $NEMO_VALID $dir1 $dir2 $pass 
447
448done
449#
450
451exit
Note: See TracBrowser for help on using the repository browser.