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.
new_sette_rpt.sh in branches/2017/dev_merge_2017/NEMOGCM/SETTE – NEMO

source: branches/2017/dev_merge_2017/NEMOGCM/SETTE/new_sette_rpt.sh @ 9221

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

add extra print in sette_rpt to detect missing config validation directory

  • Property svn:executable set to *
File size: 12.3 KB
RevLine 
[8827]1#!/bin/bash -f
2#set -vx
3#
4# simple SETTE report generator.
5#
6# This version should be run in the SETTE directory.
7# The machine name will be picked up from the sette.sh script but the location of the
8# validation directory needs to be set here (currently assumed to reside in the ../CONFIG directory)
9#
10#########################################################################################
11######################### Start of function definitions #################################
12##
13
14function restfile() {
15# Rebuild ice restart for SAS CONFIG, and restartability checks. Expects LONG and SHORT run directories.
16# For Stand Alone Surface configuration ocean is not running, just run ice model; so no outputs ocean files.
17# Compares LONG rebuild restart ice file with equivalent entry from the SHORT rebuild restart ice file.
18#
[8849]19# check nco module loaded, and load it if not
20if [ ! $( echo $LOADEDMODULES | grep cdo ) ]; then module load cdo >& /dev/null ; fi
21#
[8827]22  vdir=$1
23  nam=$2
24  pass=$3
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
[8849]32#SF add here compilation of rebuild_tools to rebuild restart files, and add comparison of restart files
[8827]33    cd ${TOOLS_DIR}
34    ./maketools -n REBUILD_NEMO -m ${mach} > /dev/null 2>&1
35    cd ${TOOLS_DIR}/REBUILD_NEMO
[8849]36#SF echo "REBUILD LONG restart SAS files, without standard output"
[8839]37    ./rebuild_nemo -t 4 ../../CONFIG/SAS_ST/LONG/SAS_00000240_restart_ice  $NPROC > /dev/null 2>&1
[8849]38#SF echo "REBUILD SHORT restart SAS files, without standard output"
[8839]39    ./rebuild_nemo -t 4 ../../CONFIG/SAS_ST/SHORT/SAS_00000240_restart_ice $NPROC >&-
[8827]40    cd ${SAS_RESTART_DIR}/LONG
[8849]41#SF echo "COPY rebuild restart files"
[8827]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    f1o=$vdir/$nam/$mach/$dorv/LONG/SAS_00000240_restart_ice.nc
45    f2o=$vdir/$nam/$mach/$dorv/SHORT/SAS_00000240_restart_ice.nc
46    if  [ ! -f $f1o ] &&  [ ! -f $f2o ] ; then
47      printf "%-20s %s\n" $nam " REBUILD SAS restart ice DOES NOT exists; incomplete test";
48      return;
[8849]49  fi
[8827]50    #
[8849]51  done_oce=0
[8827]52    #
[8849]53  if  [  -f $f1o ] && [  -f $f2o ]; then
54## Compare the two netcdf files
[8852]55    cdo diffn $f1o $f2o > cdo_diff.out 2> /dev/null
[8864]56## Identical if cdo_diff.out exists but has zero size
57    if [ ! -s cdo_diff.out ]; then
58       difi=0
59    else
[8849]60## Identical if first character of $dif ==0
[8864]61       dif=$( grep -om1 '[0-9]* of [0-9]* records differ' cdo_diff.out )
[8852]62# difi contains the first character of summary of cdo dif. if = 0, then 0 record differ between the 2 files   
[8864]63       if [ -n "$dif" ]; then
64           difi=`echo $dif | cut -c -1`
65       fi
[8852]66    fi
67    \rm cdo_diff.out
[8849]68
[8852]69    if [ $difi == 0 ]; then   
70       if [ $pass == 0 ]; then
[8864]71         printf "%-20s %s %s\n" $nam  " ice restarts are IDENTICAL  passed : " $dorv
[8852]72       fi
73    else
[8864]74       printf "%-20s %s %s\n" $nam  " ice restarts are DIFFERENT  FAILED : " $dorv 
[8827]75        #
76   # Offer view of differences on the second pass
77   #
78        if [ $pass == 1 ]; then
79          echo "<return> to view restart_ice.nc differences"
80          read y
81          cdo -diffv $f1o $f2o
82          done_oce=1
83          #echo "<return> to continue"
84          #read y
85        fi
86    fi
[8852]87  else
88      printf "%-20s %s\n" $nam " incomplete test";
89      return;
90  fi
[8827]91#
92fi
93}
94
95function resttest() { 
96#
97# Restartability checks. Expects LONG and SHORT run directories
98# Compares end of LONG stat files with equivalent entries from the SHORT stat files.
99#
100  vdir=$1
101  nam=$2
102  pass=$3
103#
104  if [ -d $vdir/$nam ]; then
105    dorv=`ls -1rt $vdir/$nam/$mach/ | tail -1l `
106    dorv=`echo $dorv | sed -e 's:.*/::'`
107    f1o=$vdir/$nam/$mach/$dorv/LONG/ocean.output
[9221]108    f1s=$vdir/$nam/$mach/$dorv/LONG/run.stat
[8827]109    f1t=$vdir/$nam/$mach/$dorv/LONG/tracer.stat
110    f2o=$vdir/$nam/$mach/$dorv/SHORT/ocean.output
[9221]111    f2s=$vdir/$nam/$mach/$dorv/SHORT/run.stat
[8827]112    f2t=$vdir/$nam/$mach/$dorv/SHORT/tracer.stat
113
114    if  [ ! -f $f1s ] &&  [ ! -f $f1t ] ; then
115      printf "%-20s %s\n" $nam " incomplete test";
116      return;
117    fi
118    if  [ ! -f $f2s ] &&  [ ! -f $f2t ] ; then
119      printf "%-20s %s\n" $nam " incomplete test";
120      return;
121    fi
122#
123    done_oce=0
124
125    if  [  -f $f1s ] && [  -f $f2s ]; then
126      nl=(`wc -l $f2s`)
127      tail -${nl[0]} $f1s > f1.tmp$$
128      cmp -s f1.tmp$$ $f2s
129      if [ $? == 0 ]; then
130        if [ $pass == 0 ]; then
[9221]131          printf "%-20s %s %s\n" $nam  " run.stat restartability  passed : " $dorv
[8827]132        fi
133      else
[9221]134        printf "%-20s %s %s\n" $nam  " run.stat restartability  FAILED : " $dorv 
[8827]135#
136# Offer view of differences on the second pass
137#
138        if [ $pass == 1 ]; then
[9221]139          echo "<return> to view run.stat differences"
[8827]140          read y
141          sdiff f1.tmp$$ $f2s
142          echo "<return> to view ocean.output differences"
143          read y
144          sdiff $f1o $f2o | grep "|"
145          done_oce=1
146          echo "<return> to continue"
147          read y
148        fi
149      fi
150    fi
151#
152# Check tracer.stat files (if they exist)
153#
154    if  [  -f $f1t ] && [  -f $f2t ]; then
155      nl=(`wc -l $f2t`)
156      tail -${nl[0]} $f1t > f1.tmp$$
157      cmp -s f1.tmp$$ $f2t
158      if [ $? == 0 ]; then
159        if [ $pass == 0 ]; then
160          printf "%-20s %s %s\n" $nam  " tracer.stat restartability  passed : " $dorv
161        fi
162      else
163        printf "%-20s %s %s\n" $nam  " tracer.stat restartability  FAILED : " $dorv 
164#
165# Offer view of differences on the second pass
166#
167        if [ $pass == 1 ]; then
168          echo "<return> to view tracer.stat differences"
169          read y
170          sdiff f1.tmp$$ $f2t
171#
172# Only offer ocean.output view if it has not been viewed previously
173#
174          if [ $done_oce == 0 ]; then
175            echo "<return> to view ocean.output differences"
176            read y
177            sdiff $f1o $f2o | grep "|"
178          fi
179          echo "<return> to continue"
180          read y
181        fi
182      fi
183    fi
184    rm f1.tmp$$
[9221]185  else
186    printf "%-20s %s %s\n" $nam  " directory is MISSING : " $dorv
[8827]187  fi
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
[9221]204    f1s=$vdir/$nam/$mach/$dorv/$rep1/run.stat
[8827]205    f1t=$vdir/$nam/$mach/$dorv/$rep1/tracer.stat
206    f2o=$vdir/$nam/$mach/$dorv/$rep2/ocean.output
[9221]207    f2s=$vdir/$nam/$mach/$dorv/$rep2/run.stat
[8827]208    f2t=$vdir/$nam/$mach/$dorv/$rep2/tracer.stat
209
210    if  [ ! -f $f1s ] && [ ! -f $f1t ] ; then
211      printf "%-20s %s\n" $nam " incomplete test";
[8839]212      return;
[8827]213    fi
214    if  [ ! -f $f2s ] && [ ! -f $f2t ] ; then
215      printf "%-20s %s\n" $nam " incomplete test";
[8839]216      return;
[8827]217    fi
218#
219    done_oce=0
220
221    if  [ -f $f1s ] && [ -f $f2s ] ; then
222      cmp -s $f1s $f2s
[8839]223      if [ $? == 0 ]; then
224        if [ $pass == 0 ]; then 
[9221]225          printf "%-20s %s %s\n" $nam  " run.stat reproducibility passed : " $dorv
[8827]226        fi
227      else
[9221]228        printf "%-20s %s %s\n" $nam  " run.stat reproducibility FAILED : " $dorv
[8827]229#
230# Offer view of differences on the second pass
231#
232        if [ $pass == 1 ]; then
[9221]233          echo "<return> to view run.stat differences"
[8827]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
[8839]250      if [ $? == 0 ]; then
[8827]251        if [ $pass == 0 ]; then           printf "%-20s %s %s\n" $nam  " tracer.stat reproducibility passed : " $dorv
252        fi
253      else
254        printf "%-20s %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
[9221]275  else
276    printf "%-20s %s %s\n" $nam  " directory is MISSING : " $dorv 
[8827]277  fi
278}
[8839]279
280function identictest(){
281#
282#  checks AGRIF does not corrupe results with no AGRIF zoom. Expects ORCA2AGUL/AGRIFNOZ and ORCA2AGUL_NAGR/AGRIFNO  run directories
[9221]283# Compares run.stat files for each
[8839]284#
285  vdir=$1
286  dir1=$2
287  dir2=$3
288  pass=$4
289#
290  if [ -d $vdir/$dir1 ] && [ -d $vdir/$dir2 ]; then
291    dorv1=`ls -1rt $vdir/$dir1/$mach/ | tail -1l `
292    dorv1=`echo $dorv1 | sed -e 's:.*/::'`
293    dorv2=`ls -1rt $vdir/$dir2/$mach/ | tail -1l `
294    dorv2=`echo $dorv2 | sed -e 's:.*/::'`
295
296    rep1=`ls -1rt $vdir/$dir1/$mach/$dorv1/ |  tail -2l | head -1 `
297    rep2=`ls -1rt $vdir/$dir2/$mach/$dorv2/ |  tail -1l`
[9221]298    f1s=$vdir/$dir1/$mach/$dorv1/$rep1/run.stat
299    f2s=$vdir/$dir2/$mach/$dorv2/$rep2/run.stat
[8839]300
301    if  [ ! -f $f1s ] && [ ! -f $f2s ] ; then
302      printf "%-20s %s\n" $dir1 $dir2 " incomplete test";
303      return;
304    fi
305#
306    done_oce=0
307
308    if  [ -f $f1s ] && [ -f $f2s ] ; then
309      cmp -s $f1s $f2s
310      if [ $? == 0 ]; then
311        if [ $pass == 0 ]; then
[9221]312          printf "%-20s %s %s %s %s\n" $rep1 $rep2  " AGRIF: run.stat unchanged - test  passed : " $dorv1 $dorv2
[8839]313        fi
314      else
[9221]315        printf "%-20s %s %s %s %s\n" $rep1 $rep2  " for AGRIF, run.stat test FAILED : " $dorv1 $dorv2
[8839]316#
317# Offer view of differences on the second pass
318#
319        if [ $pass == 1 ]; then
[9221]320          echo "<return> to view run.stat differences"
[8839]321          read y
322          sdiff $f1s $f2s
323          done_oce=1
324          echo "<return> to continue"
325          read y
326        fi
327      fi
328    fi
329  else
330    printf "%-20s %s\n" $dir1 $dir2 " incomplete test";
331  fi
332}
[8827]333########################### END of function definitions #################################
334##                                                                                     ##
335##    Main script                                                                      ##
336##                                                                                     ##
337#########################################################################################
338#
[8864]339  mach=`grep "COMPILER=" ./new_sette.sh | sed -e 's/COMPILER=//'`
[8827]340  NEMO_VALID=`grep "NEMO_VALIDATION_DIR=" ./param.cfg | sed -e 's/NEMO_VALIDATION_DIR=//'`
341# Directory to run the tests
342 SETTE_DIR=$(cd $(dirname "$0"); pwd)
343 MAIN_DIR=$(dirname $SETTE_DIR)
344 CONFIG_DIR0=${MAIN_DIR}/CONFIG
345 TOOLS_DIR=${MAIN_DIR}/TOOLS
346 COMPIL_DIR=${TOOLS_DIR}/COMPILE
347 NPROC=32
348
[8839]349  SAS_RESTART_DIR=${CONFIG_DIR0}/SAS_ST
[8827]350#
351  if [ ! -d $NEMO_VALID ]; then
352    echo "$NEMO_VALID validation directory not found"
353    exit
354  fi
355#
[8864]356# Show current revision tag and branch name
357#
358cmd="svn"
359[ ! -d "$SETTE_DIR/.svn" ] && cmd="git $cmd"
360revision=`$cmd info | grep Revision | cut -d ":" -f 2 | tr -d ' '`
361branchname=`$cmd info | grep URL | rev | cut -d "/" -f 3 | rev`
362echo "SETTE validation report : $branchname @ r$revision"
363#
[8827]364# The script also needs the date or revision tag. Currently this is taken from the latest sub-directory found in each directory
365
366for pass in  0 1
367do
368#
369 if [ $pass == 1 ]; then echo "---------------2nd pass------------------";fi
370#
371
372# Rebuild and restartability test for SAS
373#
[8839]374 for restart_file in WSAS_ST
[8827]375 do
376   restfile $NEMO_VALID $restart_file $pass
377 done
378#
379# Restartability test
380#
[8839]381 for restart_test in WGYREPIS_ST WORCA2LIM3PIS_ST WORCA2OFFPIS_ST WAMM12_ST WISOMIP_ST WORCA2AGR_ST
[8827]382 do
383   resttest $NEMO_VALID $restart_test $pass
384 done
385#
386# Reproducibility tests
387#
[8839]388 for repro_test in WGYREPIS_ST WORCA2LIM3PIS_ST WORCA2OFFPIS_ST WAMM12_ST WISOMIP_ST WORCA2_LIM3_OBS_ST WORCA2AGR_ST
[8827]389 do
390   reprotest $NEMO_VALID $repro_test $pass
391 done
[8839]392
393
394
395# AGRIF special check
396 dir1=WORCA2AGUL_NOZOOM_ST
397 dir2=WORCA2AGUL_NOAGR_ST
398 identictest $NEMO_VALID $dir1 $dir2 $pass 
399
400
401done
[8827]402#
[8839]403## Additional checks for ORCA2AGUL/FIRST standalone AGRIF test
404## still to be added
405
406
407
[8827]408exit
Note: See TracBrowser for help on using the repository browser.