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

source: branches/2017/dev_merge_2017/NEMOGCM/SETTE/all_functions.sh @ 9560

Last change on this file since 9560 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 *
  • Property svn:keywords set to Id
File size: 15.8 KB
Line 
1######################################################
2# Author : Simona Flavoni for NEMO
3# Contact : sflod@locean-ipsl.upmc.fr
4#
5# ----------------------------------------------------------------------
6# NEMO/SETTE , NEMO Consortium (2010)
7# Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
8# ----------------------------------------------------------------------
9#
10# Some scripts called by sette.sh
11# all_functions.sh   : all functions used by sette.sh 
12######################################################
13#set -x
14#set -o posix
15#set -u
16#set -e
17#+
18#
19# ================
20# all_functions.sh
21# ================
22#
23# ----------------------------------------------
24# Set of functions used by sette.sh (NEMO tests)
25# ----------------------------------------------
26#
27# SYNOPSIS
28# ========
29#
30# ::
31#
32#  $ ./set_namelist INPUT_NAMELIST VARIABLE VALUE
33#  $ post_test_tidyup
34#
35#
36# DESCRIPTION
37# ===========
38#
39# function superegrep
40#   input variable value
41#
42# function set_namelist
43#   input namelist_name variable value
44#   output namelist
45#
46# function post_test_tidyup
47#   creates nemo_validation tree, and save output & debug files
48#   this function creates tree of validation in NEMO_VALIDATION_DIR as follows :
49#
50# NEMO_VALIDATION_DIR/WCONFIG_NAME/WCOMPILER_NAME/REVISION_NUMBER(or DATE)/TEST_NAME
51#
52# NEMO_VALIDATION_DIR           : is choosen in param.cfg
53#
54# WCONFIG_NAME                  : set by makenemo at the moment of compilation
55#
56# WCOMPILER_NAME                : set by makenemo at the moment of compilation
57#
58# REVISION_NUMBER(or DATE)      : revision number by svn info, if problems with svn date is taken
59#
60# TEST_NAME                     : set in sette.sh for each configuration to be tested (directory TEST_NAME is created under ${NEW_CONF} directory )
61#
62# EXAMPLES
63# ========
64#
65# ::
66#
67#  $ ./set_namelist namelist          nn_itend        75
68#  $ ./set_namelist namelist_ice      cn_icerst_in  \"00101231_restart_ice\"
69#  $ post_test_tidyup
70#
71#
72# TODO
73# ====
74#
75# option debug
76#
77#
78# EVOLUTIONS
79# ==========
80#
81# $Id$
82#
83#   * creation
84#-
85# function to find namelists parameters
86supergrep () {
87            grep "^ *$1 *=" $2 | sed -e "s% *\!.*%%"
88    }
89
90usage=" Usage : set_namelist input_namelist variable_name value"
91usage=" if value is a string ths is neede syntax : ./set_namelist namelist_name var_name \"new_value\" "
92
93# function to set namelists parameters
94set_namelist () {
95   minargcount=3
96   if [ ${#} -lt ${minargcount} ]
97   then
98      echo "not enough arguments for set_namelist"
99      echo "${usage}"
100      exit 1
101   fi
102   unset minargcount
103   if [  ! -f ${SETTE_DIR}/output.sette ] ; then
104                touch ${SETTE_DIR}/output.sette
105        fi
106
107        echo "executing script : set_namelist $@" >> ${SETTE_DIR}/output.sette
108        echo "################" >> ${SETTE_DIR}/output.sette
109     
110   VAR_NAME=$( supergrep $2 ${EXE_DIR}/$1 )
111   if [ ${#VAR_NAME} -eq 0 ] 
112   then
113      echo "doing \"set_namelist $@\". "  >> ${SETTE_DIR}/output.sette
114      echo "variable: \"$2\" not found in \"${EXE_DIR}/$1\" "  >> ${SETTE_DIR}/output.sette
115                NAMREF=$( basename $1 _cfg )_ref
116      echo "doing more : search in ${EXE_DIR}/$NAMREF " >> ${SETTE_DIR}/output.sette
117                VAR_NAME=$( supergrep $2 ${EXE_DIR}/$NAMREF )
118           if [ ${#VAR_NAME} -eq 0 ] 
119           then
120                    echo " variable $VAR_NAME not found in ${EXE_DIR}/$1 nor in ${EXE_DIR}/$NAMREF "
121                    echo " check your variable name "
122            echo "exit"
123            echo "error in executing script : set_namelist $@" >> ${SETTE_DIR}/output.sette
124            echo "....." >> ${SETTE_DIR}/output.sette
125            exit 1
126                fi
127                LINEVAR=$( grep -s -n "$VAR_NAME" ${EXE_DIR}/$NAMREF | awk -F: '{ { print $1} }' )
128                echo " $VAR_NAME found in ${EXE_DIR}/$NAMREF at line $LINEVAR " >> ${SETTE_DIR}/output.sette
129#   search for namelist group name
130                NAMGRP=$( head -n$LINEVAR ${EXE_DIR}/$NAMREF | grep --line-buffered "^&nam" | tail -1 | awk -F" " '{ { print $1} }' ) 
131                echo " variable $VAR_NAME will be added in $NAMGRP namelist-group of namelist file ${EXE_DIR}/$1 " >> ${SETTE_DIR}/output.sette
132# Add $VARNAME in namelist file ${EXE_DIR}/$1 in namelist group $NAMGRP
133# on mac osx, replace sed --posix by gsed (available with mac port)
134                sed --posix "/${NAMGRP} /a\ ${VAR_NAME} " ${EXE_DIR}/$1 > ${EXE_DIR}/$1.tmp || gsed --posix "/${NAMGRP} /a\ ${VAR_NAME} " ${EXE_DIR}/$1 > ${EXE_DIR}/$1.tmp
135# if file not empty replace ${EXE_DIR}/$1
136                if [ -s ${EXE_DIR}/$1.tmp ] ; then
137                   mv ${EXE_DIR}/$1.tmp ${EXE_DIR}/$1 
138                else
139                echo "file ${EXE_DIR}/$1.tmp is empty. sed command went wrong "; exit 200
140                fi
141   fi
142
143        sed -e "s:${VAR_NAME}.*:${VAR_NAME}:" ${EXE_DIR}/$1 > ${EXE_DIR}/$1.tmp
144        mv ${EXE_DIR}/$1.tmp ${EXE_DIR}/$1
145        sed -e "s:${VAR_NAME}:$2=$3:"  ${EXE_DIR}/$1 > ${EXE_DIR}/$1.tmp
146        mv ${EXE_DIR}/$1.tmp ${EXE_DIR}/$1
147
148        echo "finished script : set_namelist $@" >> ${SETTE_DIR}/output.sette
149        echo "++++++++++++++++" >> ${SETTE_DIR}/output.sette
150        echo "                " >> ${SETTE_DIR}/output.sette
151}
152
153
154# function to tidy up after each test and populate the NEMO_VALIDATION store
155post_test_tidyup () {
156#
157# requires the following variables defined and exported from the calling script:
158#  SETTE_DIR
159#  INPUT_DIR
160#  EXE_DIR
161#  CONFIG_DIR
162#  NEMO_VALIDATION_DIR
163#  NEW_CONF
164#  CMP_NAM
165#  TEST_NAME
166echo "SETTE directory is : ${SETTE_DIR}"
167echo "INPUT directory is : ${INPUT_DIR}"
168echo "EXECUTION directory is : ${EXE_DIR}"
169echo "CONFIG directory is : ${CONFIG_DIR}"
170echo "VALIDATION directory is : ${NEMO_VALIDATION_DIR}"
171echo "NEW CONFIGURATION is : ${NEW_CONF}"
172echo "COMPILER is : ${CMP_NAM}"
173echo "TEST is : ${TEST_NAME}"
174echo "TOOLS directory is : ${TOOLS_DIR}"
175################################################################
176# SMALL DEBUG
177    if [ ! -r ${EXE_DIR}/ocean.output ]
178        then
179        grep "E R R O R" ${EXE_DIR}/ocean.output && echo "Some ERRORS at execution time, see ${EXE_DIR}/ocean.output"
180        exit 2
181    fi
182
183    if [ ! -r ${EXE_DIR}/time.step ]
184        then
185        echo "file time.step does not exist"   >> ${SETTE_DIR}/output.sette
186        echo "some problems during execution of model"  >> ${SETTE_DIR}/output.sette
187        exit 1
188    else
189        echo "file time.step exists"  >> ${SETTE_DIR}/output.sette
190        echo "execution of model time step loop started"   >> ${SETTE_DIR}/output.sette
191    fi
192
193################################################################
194
195################################################################
196# Creation of NEMO_VALIDATION tree
197    export LANG=en_US
198    REVISION_NB=`svn info ${SETTE_DIR}/../.. | grep -i "Last Changed Rev:" | sed -e "s/ //g" | cut -d ":" -f 2`
199    if [ ${#REVISION_NB} -eq 0 ]
200    then
201      echo "some problems with svn info command"
202      echo "some problems with svn info command" >> ${SETTE_DIR}/output.sette
203      REVISION_NB=`date +%Y%m%d`
204      echo "put in ${REVISION_NB} date"
205      echo "put in ${REVISION_NB} date" >> ${SETTE_DIR}/output.sette
206    else
207    echo "value of revision number of NEMOGCM: ${REVISION_NB}"
208    fi
209    cd ${NEMO_VALIDATION_DIR}
210    `mkdir -p ${NEMO_VALIDATION_DIR}/W${NEW_CONF}/${CMP_NAM}/${REVISION_NB}/${TEST_NAME}`
211    NEMO_VALID=${NEMO_VALIDATION_DIR}/W${NEW_CONF}/${CMP_NAM}/${REVISION_NB}/${TEST_NAME}
212    if [ -d ${NEMO_VALID} ] ; then
213   echo "created ${NEMO_VALID} directory"   >> ${SETTE_DIR}/output.sette
214    else
215   echo "problems in creating ${NEMO_VALID} directory"   >> ${SETTE_DIR}/output.sette
216   echo "EXIT,"
217   exit 1
218    fi
219    # Save output & debug files in NEMO_VALIDATION tree
220    echo "saving ocean & ice output, run.stat, tracer.stat files ...." >> ${SETTE_DIR}/output.sette
221    echo "            " >> ${SETTE_DIR}/output.sette
222    [ -f ${EXE_DIR}/ocean.output ] && cp ${EXE_DIR}/*ocean.output ${NEMO_VALID}/.
223    [ -f ${EXE_DIR}/run.stat ] && cp ${EXE_DIR}/*run.stat ${NEMO_VALID}/.
224    [ -f ${EXE_DIR}/output.namelist.dyn ] && cp ${EXE_DIR}/*output.nam* ${NEMO_VALID}/.
225    [ -f ${EXE_DIR}/tracer.stat ] && cp ${EXE_DIR}/*tracer.stat ${NEMO_VALID}/.
226
227    if [ -n "$(ls ${NEMO_VALID}/*run*)" ] ; then
228   echo "moved run.stat in ${NEMO_VALID} directory"  >> ${SETTE_DIR}/output.sette
229   echo "moved run.stat in ${NEMO_VALID} directory" 
230    else
231   echo "problem in looking for run.stat file in ${NEMO_VALID} directory"  >> ${SETTE_DIR}/output.sette
232   echo "run.stat IS NOT in ${NEMO_VALID} directory" 
233    fi
234    if [ -n "$(ls ${NEMO_VALID}/*ocean.output*)" ] ; then
235   echo "moved ocean.output in ${NEMO_VALID} directory"  >> ${SETTE_DIR}/output.sette
236   echo "moved ocean.output in ${NEMO_VALID} directory" 
237    else
238   echo "problem in looking for ocean.output file in ${NEMO_VALID} directory"  >> ${SETTE_DIR}/output.sette
239   echo "ocean.output IS NOT in ${NEMO_VALID} directory" 
240    fi
241    if [ -n "$(ls ${NEMO_VALID}/*tracer.stat*)" ] ; then
242        echo "moved tracer.stat in ${NEMO_VALID} directory"  >> ${SETTE_DIR}/output.sette
243        echo "moved tracer.stat in ${NEMO_VALID} directory"
244    else
245        echo "problem in looking for tracer.stat file in ${NEMO_VALID} directory"  >> ${SETTE_DIR}/output.sette
246        echo "tracer.stat IS NOT in ${NEMO_VALID} directory"
247    fi
248}
249
250#############################################################
251# extra functions to manipulate settings in the iodef.xml file
252#
253# Examples:
254#   set_xio_file_type    iodef.xml one_file
255#   set_xio_using_server iodef.xml true
256#   set_xio_buffer_size  iodef.xml 50000000
257#   set_xio_field_defs   iodef.xml
258#
259#############################################################
260
261usage2=" Usage : set_xio_file_type input_iodef.xml one_file||multiple_file"
262usage3=" Usage : set_xio_using_server input_iodef.xml true||false"
263usage4=" Usage : set_xio_buffer_size input_iodef.xml int_buffer_size"
264usage5=" Usage : set_xio_field_defs input_iodef.xml"
265
266set_xio_file_type () {
267        minargcount=2
268        if [ ${#} -lt ${minargcount} ]
269        then
270                echo "not enough arguments for set_xio_file_type"
271                echo "${usage2}"
272                exit 1
273        fi
274        if [ $2 != "one_file" ] && [ $2 != "multiple_file" ]
275        then
276                echo "unrecognised argument for set_xio_file_type"
277                echo "${usage2}"
278                echo $2
279                exit 1
280        fi
281        unset minargcount
282        if [  ! -f ${SETTE_DIR}/output.sette ] ; then
283                touch ${SETTE_DIR}/output.sette
284        fi
285
286        echo "executing script : set_xio_file_type $@" >> ${SETTE_DIR}/output.sette
287        echo "################" >> ${SETTE_DIR}/output.sette
288
289        VAR_NAME=$( grep "^.*<.*file_definition.*type.*=" ${EXE_DIR}/$1 | sed -e "s% *\!.*%%" )
290        if [ ${#VAR_NAME} -eq 0 ]
291        then
292                echo "doing \"set_xio_file_type $@\". "
293                echo "xml_tag: file_definition with variable: type is empty"
294                echo "confirm that an appropriate file_definition is in \"${EXE_DIR}/$1\" "
295                echo "exit"
296                echo "error in executing script : set_xio_file_type $@" >> ${SETTE_DIR}/output.sette
297                echo "....." >> ${SETTE_DIR}/output.sette
298                exit 1
299        fi
300        if [ $2 == "one_file" ] 
301        then
302           sed -e "s:multiple_file:one_file:" ${EXE_DIR}/$1 > ${EXE_DIR}/$1.tmp
303        else
304           sed -e "s:one_file:multiple_file:" ${EXE_DIR}/$1 > ${EXE_DIR}/$1.tmp
305        fi
306        mv ${EXE_DIR}/$1.tmp ${EXE_DIR}/$1
307
308        echo "finished script : set_xio_file_type $@" >> ${SETTE_DIR}/output.sette
309        echo "++++++++++++++++" >> ${SETTE_DIR}/output.sette
310        echo "                " >> ${SETTE_DIR}/output.sette
311}
312
313set_xio_using_server () {
314        minargcount=2
315        if [ ${#} -lt ${minargcount} ]
316        then
317                echo "not enough arguments for set_xio_using_server"
318                echo "${usage2}"
319                exit 1
320        fi
321        if [ $2 != "true" ] && [ $2 != "false" ]
322        then
323                echo "unrecognised argument for set_xio_using_server"
324                echo "${usage2}"
325                echo $2
326                exit 1
327        fi
328        unset minargcount
329        if [  ! -f ${SETTE_DIR}/output.sette ] ; then
330                touch ${SETTE_DIR}/output.sette
331        fi
332
333        echo "executing script : set_xio_using_server $@" >> ${SETTE_DIR}/output.sette
334        echo "################" >> ${SETTE_DIR}/output.sette
335
336        VAR_NAME=$( grep "^.*<.*variable id.*=.*using_server.*=.*bool" ${EXE_DIR}/$1 | sed -e "s% *\!.*%%" )
337        if [ ${#VAR_NAME} -eq 0 ]
338        then
339                echo "doing \"set_xio_using_server $@\". "
340                echo "xml_tag: "variable id=using_server" with variable: bool is empty"
341                echo "confirm that an appropriate variable id is in \"${EXE_DIR}/$1\" "
342                echo "exit"
343                echo "error in executing script : set_xio_using_server $@" >> ${SETTE_DIR}/output.sette
344                echo "....." >> ${SETTE_DIR}/output.sette
345                exit 1
346        fi
347        if [ $2 == "false" ]
348        then
349           sed -e "/using_server/s:true:false:" ${EXE_DIR}/$1 > ${EXE_DIR}/$1.tmp
350           export USING_MPMD=no
351        else
352           sed -e "/using_server/s:false:true:" ${EXE_DIR}/$1 > ${EXE_DIR}/$1.tmp
353           export USING_MPMD=yes
354        fi
355        mv ${EXE_DIR}/$1.tmp ${EXE_DIR}/$1
356
357        echo "finished script : set_xio_using_server $@" >> ${SETTE_DIR}/output.sette
358        echo "++++++++++++++++" >> ${SETTE_DIR}/output.sette
359        echo "                " >> ${SETTE_DIR}/output.sette
360}
361
362set_xio_buffer_size () {
363        minargcount=2
364        if [ ${#} -lt ${minargcount} ]
365        then
366                echo "not enough arguments for set_xio_buffer_size"
367                echo "${usage4}"
368                exit 1
369        fi
370        unset minargcount
371        if [  ! -f ${SETTE_DIR}/output.sette ] ; then
372                touch ${SETTE_DIR}/output.sette
373        fi
374
375        echo "executing script : set_xio_buffer_size $@" >> ${SETTE_DIR}/output.sette
376        echo "################" >> ${SETTE_DIR}/output.sette
377
378        VAR_NAME=$( grep "^.*<.*variable id.*=.*buffer_size.*=.*integer" ${EXE_DIR}/$1 | sed -e "s% *\!.*%%" )
379        if [ ${#VAR_NAME} -eq 0 ]
380        then
381                echo "doing \"set_xio_buffer_size $@\". "
382                echo "xml_tag: "variable id=buffer_size" with variable: integer is empty"
383                echo "confirm that an appropriate variable id is in \"${EXE_DIR}/$1\" "
384                echo "exit"
385                echo "error in executing script : set_xio_buffer_size $@" >> ${SETTE_DIR}/output.sette
386                echo "....." >> ${SETTE_DIR}/output.sette
387                exit 1
388        fi
389        sed -e "/buffer_size/s:>.*<:>$2<:" ${EXE_DIR}/$1 > ${EXE_DIR}/$1.tmp
390        mv ${EXE_DIR}/$1.tmp ${EXE_DIR}/$1
391
392        echo "finished script : set_xio_buffer_size $@" >> ${SETTE_DIR}/output.sette
393        echo "++++++++++++++++" >> ${SETTE_DIR}/output.sette
394        echo "                " >> ${SETTE_DIR}/output.sette
395}
396
397set_xio_field_defs () {
398        minargcount=1
399        if [ ${#} -lt ${minargcount} ]
400        then
401                echo "not enough arguments for set_xio_field_defs"
402                echo "${usage5}"
403                exit 1
404        fi
405        unset minargcount
406        if [  ! -f ${SETTE_DIR}/output.sette ] ; then
407                touch ${SETTE_DIR}/output.sette
408        fi
409
410        echo "executing script : set_xio_field_defs $@" >> ${SETTE_DIR}/output.sette
411        echo "################" >> ${SETTE_DIR}/output.sette
412
413
414        [ -f ${EXE_DIR}/field_def_nemo-opa.xml ] || sed -i '/field_def_nemo-opa/d' $1
415        [ -f ${EXE_DIR}/field_def_nemo-lim.xml ] || sed -i '/field_def_nemo-lim/d' $1
416        [ -f ${EXE_DIR}/field_def_nemo-pisces.xml ] || sed -i '/field_def_nemo-pisces/d' $1
417
418        echo "finished script : set_xio_field_defs $@" >> ${SETTE_DIR}/output.sette
419        echo "++++++++++++++++" >> ${SETTE_DIR}/output.sette
420        echo "                " >> ${SETTE_DIR}/output.sette
421}
Note: See TracBrowser for help on using the repository browser.