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.
Changeset 5788 for branches/2015/dev_r5092_CNRS18_TRUST/NEMOGCM/TRUST/trusting_func.sh – NEMO

Ignore:
Timestamp:
2015-10-12T20:28:35+02:00 (9 years ago)
Author:
nicolasmartin
Message:

dev_r5092_CNRS18_TRUST Several enhancements (global variables rename, notification mail object, add job performances, templates description, script to install new minimal branch to test) to improve accessibility for NEMO users & bugfixes (tar creation, modulefiles)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5092_CNRS18_TRUST/NEMOGCM/TRUST/trusting_func.sh

    r5701 r5788  
    33 
    44## Messenger filenames 
    5 FILE_DATE=mesg_01_date_$PATTERNAME.txt    ; FILE_STAT=mesg_02_status_$PATTERNAME.txt 
    6 FILE_RESU=mesg_03_result_$PATTERNAME.txt  ; FILE_NEMO=mesg_04_nemogcm_$PATTERNAME.txt 
    7 FILE_XIOS=mesg_05_xios_$PATTERNAME.txt    ; FILE_COMP=mesg_06_compiler_$PATTERNAME.txt 
    8 FILE_MPIN=mesg_07_mpi_$PATTERNAME.txt     ; FILE_NCDF=mesg_08_netcdf_$PATTERNAME.txt 
    9 FILE_INPT=mesg_09_inputs_$PATTERNAME.txt  ; FILE_CPUT=mesg_10_cputime_$PATTERNAME.txt 
    10 FILE_COMM=mesg_11_comments_$PATTERNAME.txt; 
    11  
    12 ## Timestamped outcome & archive filenames 
    13 FILE_TRUS=trusting_${DATE}_$PATTERNAME.txt; FILE_ARCH=trusting_${DATE}_$PATTERNAME.tar.gz 
    14  
    15  
    16 print_step() { printf "\nStep.....\n$1\n"; } 
    17  
     5FILE_DATE=mesg_01_date_$PATTERNAME.txt  ; FILE_TRUS_RSLT=mesg_02_result_$PATTERNAME.txt 
     6FILE_STAT=mesg_03_state_$PATTERNAME.txt ; FILE_NEMO=mesg_04_nemo_$PATTERNAME.txt 
     7FILE_XIOS=mesg_05_xios_$PATTERNAME.txt  ; FILE_CMPF=mesg_06_compiler_$PATTERNAME.txt 
     8FILE_LMPI=mesg_07_mpi_$PATTERNAME.txt   ; FILE_NCDF=mesg_08_netcdf_$PATTERNAME.txt 
     9FILE_INPT=mesg_09_inputs_$PATTERNAME.txt; FILE_TIME=mesg_10_time_$PATTERNAME.txt 
     10FILE_MEMY=mesg_11_memory_$PATTERNAME.txt; FILE_NOTE=mesg_12_comments_$PATTERNAME.txt 
     11 
     12## Timestamped logfile & archive filenames 
     13FILE_TRUS=trusting_${DATE}_$PATTERNAME.txt; FILE_ARCH=trusting_${DATE}_$PATTERNAME.tgz 
     14 
     15 
     16## Functions in order of use 
     17print_step() { 
     18    local char_nb=$( echo "$1" | wc -c ) 
     19    local outline=$( printf "%${char_nb}s" ) 
     20 
     21    printf "\nStep.....\n%s\n%s\n" "$1" ${outline// /-} 
     22} 
    1823 
    1924init_files() { 
    20     echo 'Date'          >  ${FILE_DATE}; echo 'Status'           >  ${FILE_STAT} 
    21     echo 'Result'        >  ${FILE_RESU}; echo 'NEMOGCM rev.'     > ${FILE_NEMO} 
    22     echo 'XIOS rev.'     >  ${FILE_XIOS}; echo 'Fortran compiler' >  ${FILE_COMP} 
    23     echo 'MPI libs'      >  ${FILE_MPIN}; echo 'NetCDF libs'      > ${FILE_NCDF} 
    24     echo 'Input files'   >  ${FILE_INPT}; echo 'Real CPU time'    >  ${FILE_CPUT} 
    25     echo 'Comments'      >  ${FILE_COMM} 
     25    echo 'Date'               > ${FILE_DATE}; echo 'Result'           > ${FILE_TRUS_RSLT} 
     26    echo 'State'              > ${FILE_STAT}; echo 'NEMOGCM rev.'     > ${FILE_NEMO} 
     27    echo 'XIOS rev.'          > ${FILE_XIOS}; echo 'Fortran compiler' > ${FILE_CMPF} 
     28    echo 'MPI libs'           > ${FILE_LMPI}; echo 'NetCDF libs'      > ${FILE_NCDF} 
     29    echo 'Input files'        > ${FILE_INPT}; echo 'Elapsed time'     > ${FILE_TIME} 
     30    echo 'Memory usage (P/V)' > ${FILE_MEMY}; echo 'Comments'         > ${FILE_NOTE} 
    2631 
    2732    ## 'Failed' status with 'Unknown error' by default 
    28     echo $ST             \ 
     33    echo $TRUS_RSLT           \ 
     34   >> ${FILE_TRUS_RSLT} 
     35    echo 'Unknown error' \ 
    2936   >> ${FILE_STAT} 
    30     echo 'Unknown error' \ 
    31    >> ${FILE_RESU} 
    32 } 
    33  
     37} 
    3438 
    3539get_date() { 
     
    3741    local dat=$( date -ud "${DATE}" +"%F %R %Z" ) 
    3842 
    39     echo $dat          \ 
     43    echo $dat           \ 
    4044   >> ${FILE_DATE} 
    4145} 
    42  
    4346 
    4447get_nemo_rev() { 
    4548    local dir rev_loc 
    46     local rev=0 
    47  
    48     ## Loop on essential directories 
    49     for dir in ${NEMO_ARCH} ${NEMO_CONF} ${NEMO_ENGI} \ 
    50                ${NEMO_EAGR} ${NEMO_EIOI} ${NEMO_EFCM} \ 
    51           ${NEMO_TCMP} ${NEMO_TRBD}              \ 
    52           ${DIR_XIOS}                             ; do 
     49    local rev=0 list=( 'ARCH CONFIG NEMO EXTERNAL/AGRIF EXTERNAL/IOIPSL EXTERNAL/fcm TOOLS/COMPILE TOOLS/REBUILD_NEMO' ) 
     50 
     51    ## Loop on essential NEMO directories 
     52    for dir in $list ${DIR_XIOS}; do 
    5353 
    5454   ## For time being, just get revision from XIOS with no action on directory 
     
    6262   fi 
    6363 
    64    echo $dir && ${SVN_CMD} $dir 
    65    rev_loc=$( svn info $dir | awk '(NR == 9) {print $NF}' ) 
     64   echo $dir && ${SVN_CMD} ${TRUS_WKCY}/$dir 
     65   rev_loc=$( svn info ${TRUS_WKCY}/$dir | awk '(NR == 9) {print $NF}' ) 
    6666 
    6767   ## Keep last rev. nb 
     
    7575} 
    7676 
    77  
    7877get_soft_rel() { 
    7978    local soft soft_rel 
    8079 
    81     for soft in $CDO $COMPILER $MPI $NETCDF; do 
     80    ## Sourcing environment modulefile only if module function is set 
     81    [[ -e ${ARCH_ENV} && $( declare -F | grep ' module' ) ]] && . ${ARCH_ENV} 
     82 
     83    for soft in $CMPF ${STR_CDOD} ${STR_LMPI} ${STR_NCDF}; do 
    8284   soft_rel='' 
    8385 
    84    ## Software strings to identify depends on use (sed is case-insensitive) 
    85         if [ $IMOD -eq 1 ]; then 
    86        ## Modules system: next word after "$soft/" 
    87        soft_rel=$( echo $LOADEDMODULES | sed "s#.*$soft/\([0-9.a-z_]*\).*#\1#i" ) 
    88        ## LOADEDMODULES=netcdf/mpi/4.1.3:cdo/1.5.9:intel/2013.0 
    89        ## LOADEDMODULES=bullxmpi/1.2.8.2:netcdf/4.3.3.1_hdf5_parallel:cdo/1.6.7 
    90    else 
    91        ## Hard-coded paths: next word after "$soft" 
    92        soft_rel=$( echo $PATH          | sed "s#.*$soft\([0-9.a-z_]*\).*#\1#i"  ) 
    93        ## PATH=/smplocal/intel/impi/4.1.0.024/intel64/bin:/smplocal/pub/cdo/1.5.9/bin:/smplocal/pub/NetCDF/4.1.3/mpi/bin 
    94        ## PATH=/usr/local/netcdf-4.3.3.1_hdf5_parallel/bin:/opt/mpi/bullxmpi/1.2.8.2/bin:/usr/local/netcdf-utils-4.3.3.1_hdf5/bin 
    95    fi 
     86   ## Software release: next word after "$soft" in $PATH (case-insensitive) 
     87   soft_rel=$( echo $PATH | sed "s#.*$soft\([0-9.a-z_]*\).*#\1#i" ) 
    9688 
    9789   ## option --version would work for main compilers (gfortran, intel, pgfortran, ...) 
     
    10698 
    10799    sed -n 4p model.log \ 
    108    >> ${FILE_COMP} 
     100   >> ${FILE_CMPF} 
    109101    sed -n 5p model.log \ 
    110    >> ${FILE_MPIN} 
     102   >> ${FILE_LMPI} 
    111103    sed -n 6p model.log \ 
    112104   >> ${FILE_NCDF} 
    113105} 
    114106 
    115  
    116107get_inputs() { 
    117108    # List archive content & extract it by default 
    118     local cmd_iol="tar -tvf ${NEMO_FORC}/${NEMO_TARF}" cmd_iof="tar -vxf ${NEMO_FORC}/${NEMO_TARF}" 
     109    local cmd_iol="tar -tvf ${TRUS_FORC}/${TRUS_TARF}" cmd_iof="tar -vxf ${TRUS_FORC}/${TRUS_TARF}" 
    119110 
    120111    ## List & copy files in case of personal inputs 
    121     [ -z "${NEMO_TARF}" ] && { cmd_iol="ls ${NEMO_FORC}/*"; cmd_iof="\cp ${NEMO_FORC}/* ."; } 
     112    [ -z "${TRUS_TARF}" ] && { cmd_iol="ls ${TRUS_FORC}/*"; cmd_iof="\cp ${TRUS_FORC}/* ."; } 
    122113 
    123114    ${cmd_iol} > inputs_list.txt 
    124115    ${cmd_iof} > /dev/null 
    125116} 
    126  
    127117 
    128118diff_inputs() { 
     
    135125 
    136126   ## Continue even if input file is not in here (see after) 
    137    if [ -e ${REFE_DIR}/$file ]; then dif=$( diff -q $file ${REFE_DIR}/$file ); else dif=0; fi 
     127   if [ -e ${TRUS_BHMK}/$file ]; then dif=$( diff -q $file ${TRUS_BHMK}/$file ); else dif=0; fi 
    138128 
    139129   ## Pass over useless file omission in benckmark directory 
    140    if [[ -n "$dif" && "$dif" != '0' ]]; then 
    141        mesg='Different'; echo $dif; files_list+=$file' ' 
    142    fi 
    143  
     130   [[ -n "$dif" && "$dif" != '0' ]] && ( mesg='Different'; echo $dif; files_list+=$file' ' ) 
    144131    done 
    145132 
    146133    [ $mesg == 'Same' ] && echo $mesg 
    147     echo $mesg         \ 
     134    echo $mesg          \ 
    148135   >> ${FILE_INPT} 
    149136 
    150137    ## List different files for web comment 
    151138    [ -n "${files_list}" ] && echo 'Inputs  : '${files_list}'differ<br>' \ 
    152    >> temp_${FILE_COMM} 
    153 } 
    154  
     139   >> temp_${FILE_NOTE} 
     140} 
    155141 
    156142job_pending() { 
     
    160146 
    161147    ## Append a log file while pending 
    162     while [[ $( ${JOB_LIST} | grep ${JOB_ID} ) && ${time_elapsed} -lt ${TIME_LIMI} ]]; do 
     148    while [[ $( eval ${JOB_STAT} ) && ${time_elapsed} -lt $TIMEOUT ]]; do 
    163149   printf "\n%s\n" ${outline// /#} \ 
    164150       >> computation.log 
    165    ${JOB_INFO} ${JOB_ID}           \ 
     151   eval ${JOB_INFO}                \ 
    166152       >> computation.log 
    167153   sleep ${time_increment} 
     
    172158 
    173159    ## Kill remaining job & stop the test if it's too long 
    174     [ ${time_elapsed} -eq ${TIME_LIMI} ] && { ${JOB_DELE} ${JOB_ID} &> /dev/null; get_out 6; } 
    175 } 
    176  
     160    [ ${time_elapsed} -eq $TIMEOUT ] && { eval ${JOB_DELE} &> /dev/null; get_out 6; } 
     161} 
    177162 
    178163diff_results() { 
     
    182167    ## Simple diff 
    183168    for file in 'ocean.output' *.stat; do 
    184  
    185169   ## Stop if no benchmark files (ocean.output, eventual stat files) 
    186    [ ! -e ${REFE_DIR}/$file ] && { export ST='FAILED'; get_out 7; } 
    187  
    188    diff -q $file ${REFE_DIR}/$file 
     170   [ ! -e ${TRUS_BHMK}/$file ] && { export TRUS_RSLT='FAILED'; get_out 7; } 
     171 
     172   diff -q $file ${TRUS_BHMK}/$file 
    189173 
    190174   ## Continue even if it differs 
    191    [ $? -ne 0 ] && { export ST='FAILED'; mesg='Different'; files_list+=$file' '; } 
     175   [ $? -ne 0 ] && { export TRUS_RSLT='FAILED'; mesg='Different'; files_list+=$file' '; } 
    192176    done 
    193177 
     
    196180    ## List different files for web comment 
    197181    [ -n "${files_list}" ] && echo 'Results : '${files_list}'differ<br>' \ 
    198    >> temp_${FILE_COMM} 
    199 } 
    200  
     182   >> temp_${FILE_NOTE} 
     183} 
    201184 
    202185diff_restart() { 
     
    205188 
    206189    ## Stop if no benchmark files (ie time.step) 
    207     [ ! -e ${REFE_DIR}/time.step ] && { export ST='FAILED'; get_out 7; } 
    208     time_step=$( cat ${REFE_DIR}/time.step | tr -d [:space:] ) 
     190    [ ! -e ${TRUS_BHMK}/time.step ] && { export TRUS_RSLT='FAILED'; get_out 7; } 
     191    time_step=$( cat ${TRUS_BHMK}/time.step | tr -d [:space:] ) 
    209192 
    210193    ## Find all restart files to rebuild 
    211194    if [ $( find -regex ".*_restart.*[0-9]\.nc" -print -quit ) ]; then 
    212    base_name=$( find -regex ".*_restart.*[0-9]\.nc"                      \ 
    213                 | sed "s#^\./\(.*\)_[0-9]*_restart.*#\1#"       | sort -u ) 
    214    list_comp=$( find -regex ".*_restart.*[0-9]\.nc"                      \ 
    215                 | sed "s#^.*\(restart[a-z_]*\)_[0-9].*\.nc#\1#" | sort -u ) 
    216    list_tmsp=$( find -regex ".*_restart.*[0-9]\.nc"                      \ 
    217                 | sed "s#^.*\([0-9]\{8\}\)_restart.*#\1#"       | sort -u ) 
     195   base_name=$( find -regex ".*_restart.*[0-9]\.nc"                       \ 
     196                | sed "s#^\./\(.*\)_[0-9]*_restart.*#\1#"       | sort -u  ) 
     197   list_comp=$( find -regex ".*_restart.*[0-9]\.nc"                       \ 
     198                | sed "s#^.*\(restart[a-z_]*\)_[0-9].*\.nc#\1#" | sort -u  ) 
     199   list_tmsp=$( find -regex ".*_restart.*[0-9]\.nc"                       \ 
     200                | sed "s#^.*\([0-9]\{8\}\)_restart.*#\1#"       | sort -u  ) 
    218201 
    219202   ## Loop on each time step 
    220203   for tmsp in ${list_tmsp}; do 
     204 
    221205       for comp in ${list_comp}; do 
    222206      file=${base_name}_${tmsp}_${comp} 
     
    224208 
    225209      if   [ ${nb_dom} -gt 1 ]; then 
    226           ${NEMO_TRBD}/rebuild_nemo -t $NPROC $file ${nb_dom} > /dev/null 
    227           [ $? -eq 0 ] && rm -f ${file}_[0-9]*.nc             > /dev/null 
     210          ${TRUS_WKCY}/TOOLS/REBUILD_NEMO/rebuild_nemo -t ${TRUS_NPRO} $file ${nb_dom} > /dev/null 
     211          [ $? -eq 0 ] && rm -f ${file}_[0-9]*.nc                                > /dev/null 
    228212      elif [ ${nb_dom} -eq 0 ]; then 
    229           export ST='FAILED' && get_out 8 
     213          export TRUS_RSLT='FAILED' && get_out 8 
    230214      fi 
    231215 
     
    234218 
    235219                    ## Stop if no benchmark files (restart file) 
    236           if [ -e ${REFE_DIR}/$file.nc ]; then 
     220          if [ -e ${TRUS_BHMK}/$file.nc ]; then 
    237221 
    238222                   ## UNIX `cmp` not suitable (timestamp in .nc file) 
    239          dif=$( $CDOD $file.nc ${REFE_DIR}/$file.nc 2> /dev/null          \ 
     223         dif=$( $CDOD $file.nc ${TRUS_BHMK}/$file.nc 2> /dev/null          \ 
    240224                | awk '/records/ {print $0}' | sed '2 s/^/,/' | tr -d '\n' ) 
    241225 
    242226         ## CDO can return void stdout with no difference 
    243227         if [[ -n "$dif" && $( echo $dif | awk '{print $1}' ) -ne 0 ]]; then 
    244              export ST='FAILED' 
    245              files_list+=$comp' ' && let dift+=$( echo $dif | awk '{print $1}' ) 
     228             export TRUS_RSLT='FAILED' 
     229             files_list+=$comp' ' && let dif_sum+=$( echo $dif | awk '{print $1}' ) 
    246230             echo $file.nc': '$dif 
    247231         fi 
    248232 
    249233          else 
    250          export ST='FAILED' && get_out 7 
     234         export TRUS_RSLT='FAILED' && get_out 7 
    251235          fi 
    252236 
     
    256240 
    257241       done 
     242 
    258243   done 
    259244 
    260245        ## List different files for web comment with sum of different parameters 
    261    if [ $dift -ne 0 ]; then 
    262        echo 'Restarts: '${files_list}$dift' record(s) differ<br>' \ 
    263       >> temp_${FILE_COMM} 
     246   if [ ${dif_sum} -ne 0 ]; then 
     247       echo 'Restarts: '${files_list}${dif_sum}' record(s) differ<br>' \ 
     248      >> temp_${FILE_NOTE} 
    264249   else 
    265250       echo 'Same' 
     
    267252 
    268253    else 
    269    export ST='FAILED' 
    270     fi 
    271  
    272 } 
    273  
    274  
    275 get_cpu_time() { 
    276     ## Interest for checking unusual time computing 
    277     local real_cpu_time=$( eval ${JOB_TIME} ) 
    278  
    279     echo ${real_cpu_time} | tee -a ${FILE_CPUT} 
    280 } 
    281  
     254   export TRUS_RSLT='FAILED' 
     255    fi 
     256 
     257} 
     258 
     259get_time() { 
     260    ## Interest for checking unusual time computation 
     261    local time_cpu=$( eval ${JOB_TIME} ) 
     262 
     263    printf "Elapsed time: " 
     264    echo ${time_cpu} | tee -a ${FILE_TIME} 
     265} 
     266 
     267get_memy() { 
     268    ## Interest for checking unusual memory usage 
     269    local memory_pmax=$( eval ${JOB_PMEM} ) memory_vmax=$( eval ${JOB_VMEM} ) 
     270 
     271    printf "Memory max usage (physical/virtual): " 
     272    echo ${memory_pmax}' / '${memory_vmax} | tee -a ${FILE_MEMY} 
     273} 
    282274 
    283275comments() { 
     
    286278 
    287279    if [ -e ocean.output ]; then 
    288         ## 'W A R N I N G' by default 
     280        ## 'W A R N I N G' pattern by default 
    289281   opat="-A2 \"^ $state\"" 
    290282   [ "$state" == 'E R R O R' ] && opat="-A4 \"$state\"" 
     
    292284        ## Select first occurence for web comment 
    293285   line=$( eval grep -m1 $opat ocean.output | tr -d '\n' ) 
    294    echo $line 
    295     fi 
    296  
    297     printf "$line<br>"      \ 
    298    >> temp_${FILE_COMM} 
    299 } 
    300  
    301  
    302 mesg_make() { 
     286    fi 
     287 
     288    [ -n "$line" ] && ( echo $line; printf "$line<br>" \ 
     289   >> temp_${FILE_NOTE} ) 
     290} 
     291 
     292log_make() { 
    303293    ## Format comments for web 
    304     [ -e temp_${FILE_COMM} ] && cat temp_${FILE_COMM} | tr -d '\n' | sed 's/<br>$//' \ 
    305    >> ${FILE_COMM} 
    306  
    307     ## Construct txt file for web with all messenger files 
     294    [ -e temp_${FILE_NOTE} ] && cat temp_${FILE_NOTE} | tr -d '\n' | sed 's/<br>$//' \ 
     295   >> ${FILE_NOTE} 
     296 
     297    ## Construct txt file with all messenger files 
    308298    paste -d ';' mesg_*.txt | tee ${FILE_TRUS} 
    309299} 
    310300 
    311  
    312 mesg_publish() { 
     301prod_publish() { 
    313302    local cmd 
    314  
    315     ## Production mode (-p|--publish) 
    316     if [ $PUBLISH -eq 1 ]; then 
    317  
    318    ## Create or append historical trusting file 
    319    if [ -f ${REFE_DIR}/trusting_$PATTERNAME.txt ]; then cmd='tail -1'; else cmd='cat'; fi 
     303    local rev=$( awk '/NEMOGCM/ {print $NF}' model.log ) 
     304 
     305    ## Production mode (-p|--prod) 
     306    if [ $PROD -eq 1 ]; then 
     307 
     308   ## Create or append trusting logfile 
     309   if [ -f ${TRUS_BHMK}/trusting_$PATTERNAME.txt ]; then cmd='tail -1'; else cmd='cat'; fi 
    320310 
    321311   $cmd ${FILE_TRUS}                           \ 
    322        >> ${REFE_DIR}/trusting_$PATTERNAME.txt 
     312       >> ${TRUS_BHMK}/trusting_$PATTERNAME.txt 
    323313 
    324314        ## Send mail only when FAILED 
    325    if [[ ! -z "$EMAIL" && $ST == 'FAILED' ]]; then 
     315   if [[ ! -z "$TRUS_MAIL" && $TRUS_RSLT == 'FAILED' ]]; then 
    326316 
    327317       ## Content 
    328        cat <<END_MAIL \ 
     318       cat <<END_MAIL      \ 
    329319      > trusting.mail 
    330 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
    331  
    332 Dear $USER, 
    333  
    334 The trusting sequence for ${REFE_CONF} has failed. 
    335 Directory: ${TEST_DIR} 
    336 Archive created: ${FILE_ARCH} in ${REFE_DIR} 
    337  
    338 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
    339  
    340 `cat ${TEST_DIR}/${FILE_TRUS}` 
     320Dear all, 
     321 
     322 
     323The trusting sequence has not completed successfully on new configuration ${TRUS_TEST} based on ${TRUS_REFE}. 
     324 
     325Here is the model summary: 
     326`cat model.log` 
     327 
     328First checking would be on the trusting environment files: 
     329${TRUS_USER}.cfg & ${TRUS_HPCC}.cfg 
     330 
     331For more details, look into the testing directory at: 
     332${TEST_DIR} 
     333 
     334An archive has been created to share the questionable configuration for further studies: 
     335${TRUS_BHMK}/${FILE_ARCH} 
     336 
    341337END_MAIL 
    342338 
    343339       ## Send with detailed subject 
    344        mail -s "[NEMO Trusting ${NEMO_HPCC} ${REFE_CONF} ${NEMO_BRAN}] $ST $ERR" $EMAIL \ 
     340       mail -s "[NEMO Trusting][$rev][${TRUS_WKCY}][${TRUS_REFE}] $TRUS_RSLT $ERR" $TRUS_MAIL \ 
    345341      <  trusting.mail 
    346342   fi 
     
    349345} 
    350346 
    351  
    352347get_out() { 
    353348    local time_step=0 
     
    355350    ERR=$1 
    356351 
    357     print_step 'End of trusting test' 
     352    printf "\n\nEnd of test\n" 
    358353 
    359354    ## In case of compilation error 
    360355    cd ${TEST_DIR} 
    361356 
    362     if [ $ST == 'FAILED' ]; then 
     357    if [ $TRUS_RSLT == 'FAILED' ]; then 
    363358   echo 'Failure' 
    364359 
     
    369364       ## Submission 
    370365       '3') ERR='Missing input files'     ;; '4') ERR='Job submission error'   ;; 
    371        ## Running 
     366       ## Computation 
    372367       '5') ERR='Crashed at time step'    ;; '6') ERR='Exceeded time limit'    ;; 
    373368       ## Results 
    374369       '7') ERR='Missing previous outputs';; '8') ERR='New outputs differ'     ;; 
    375        ## Undefined 
    376        "*") ERR='Unknown error'           ;; 
    377370   esac 
    378371 
     
    384377    if [ "$ERR" == 'Crashed at time step' ]; then 
    385378   comments 'E R R O R' 
    386    [ -e time.step ] && time_step=$( cat time.step | tr -d ' ' ) 
     379   [ -e time.step ] && time_step=$( grep -o [0-9]* time.step ) 
    387380   ERR+=' '$time_step 
    388381    else 
    389382   comments 'W A R N I N G' 
    390    [ "$ERR" == 'Exceeded time limit' ] && ERR+=' '$(( ${TIME_LIMIT}/3600 ))'h' 
     383   [ "$ERR" == 'Exceeded time limit' ] && ERR+=' '$(( ${TIMEOUTT}/3600 ))'h' 
    391384    fi 
    392385 
    393386    ## Last messenger files 
    394387    export ERR 
    395     sed -i "2 s/.*/$ST/" ${FILE_STAT}; sed -i "2 s/.*/$ERR/" ${FILE_RESU} 
    396  
    397     ## Save tested configuration if trusting failed in production mode (-p|--publish) 
    398     if [[ $ST == 'FAILED' && $PUBLISH -eq 1 ]]; then 
    399    echo 'Creating archive '${FILE_ARCH}' under '${REFE_DIR} 
    400    tar -czf ${REFE_DIR}/${FILE_ARCH} * ${NEMO_HOME}/CONFIG/${TEST_CONF}/MY_SRC \ 
    401                                        ${NEMO_HOME}/CONFIG/${TEST_CONF}/WORK 
    402     fi 
    403  
    404     ## Share trusting result (.txt file/mail) 
    405     print_step 'Trusting digest' 
    406     mesg_make 
    407     mesg_publish 
     388    sed -i "2 s/.*/$TRUS_RSLT/" ${FILE_TRUS_RSLT}; sed -i "2 s/.*/$ERR/" ${FILE_STAT} 
     389 
     390    ## Save tested configuration if trusting failed in production mode (-p|--prod) 
     391    if [[ $TRUS_RSLT == 'FAILED' && $PROD -eq 1 ]]; then 
     392   echo 'Creating archive '${FILE_ARCH}' under '${TRUS_BHMK} 
     393   tar -czf ${TRUS_BHMK}/${FILE_ARCH}              *                    \ 
     394       -C ${TRUS_WKCY}/CONFIG/${TRUS_TEST}/MY_SRC .                    \ 
     395       -C ${TRUS_WKCY}/CONFIG/${TRUS_TEST}        cpp_${TRUS_TEST}.fcm 
     396    fi 
     397 
     398    ## Logfile construct & eventual sending of notification email 
     399    printf "\nTrusting digest:\n----------------\n" 
     400    log_make 
     401    prod_publish 
    408402 
    409403    exit 0 
Note: See TracChangeset for help on using the changeset viewer.