source: trunk/libIGCM/AA_create_se @ 729

Last change on this file since 729 was 727, checked in by sdipsl, 12 years ago
  • use IGCM_config_CommonConfiguration
  • Property licence set to
    The following licence information concerns ONLY the libIGCM tools
    ==================================================================

    Copyright © Centre National de la Recherche Scientifique CNRS
    Commissariat à l'Énergie Atomique CEA

    libIGCM : Library for Portable Models Computation of IGCM Group.

    IGCM Group is the french IPSL Global Climate Model Group.

    This library is a set of shell scripts and functions whose purpose is
    the management of the initialization, the launch, the transfer of
    output files, the post-processing and the monitoring of datas produce
    by any numerical program on any plateforme.

    This software is governed by the CeCILL license under French law and
    abiding by the rules of distribution of free software. You can use,
    modify and/ or redistribute the software under the terms of the CeCILL
    license as circulated by CEA, CNRS and INRIA at the following URL
    "http://www.cecill.info".

    As a counterpart to the access to the source code and rights to copy,
    modify and redistribute granted by the license, users are provided only
    with a limited warranty and the software's author, the holder of the
    economic rights, and the successive licensors have only limited
    liability.

    In this respect, the user's attention is drawn to the risks associated
    with loading, using, modifying and/or developing or reproducing the
    software by the user in light of its specific status of free software,
    that may mean that it is complicated to manipulate, and that also
    therefore means that it is reserved for developers and experienced
    professionals having in-depth computer knowledge. Users are therefore
    encouraged to load and test the software's suitability as regards their
    requirements in conditions enabling the security of their systems and/or
    data to be ensured and, more generally, to use and operate it in the
    same conditions as regards security.

    The fact that you are presently reading this means that you have had
    knowledge of the CeCILL license and that you accept its terms.
  • Property svn:keywords set to Revision Author Date
File size: 28.8 KB
Line 
1#-Q- cesium #!/bin/ksh
2#-Q- cesium ######################
3#-Q- cesium ## CESIUM   CEA ##
4#-Q- cesium ######################
5#-Q- cesium #MSUB -r SE             # Nom du job               
6#-Q- cesium #MSUB -N 1              # Reservation du noeud
7#-Q- cesium #MSUB -n 1              # Reservation du processus
8#-Q- cesium #MSUB -T 86400          # Limite de temps elapsed du job
9#-Q- cesium #MSUB -E "-j o"
10#-Q- cesium #MSUB -E "-S /bin/ksh"
11#-Q- curie ######################
12#-Q- curie ## CURIE   TGCC/CEA ##
13#-Q- curie ######################
14#-Q- curie #MSUB -r SE             # Nom du job               
15#-Q- curie #MSUB -eo
16#-Q- curie #MSUB -n 1              # Reservation du processus
17#-Q- curie #MSUB -T 86400          # Limite de temps elapsed du job
18#-Q- curie #MSUB -E '--no-requeue'
19#-Q- curie #MSUB -q large
20#-Q- curie #MSUB -Q normal
21#-Q- curie set +x
22#-Q- platine #!/usr/bin/ksh
23#-Q- platine ###################
24#-Q- platine ## PLATINE   CEA ##
25#-Q- platine ###################
26#-Q- platine #BSUB -J SE                     # Nom du job
27#-Q- platine #BSUB -N                        # message a la fin du job
28#-Q- platine #BSUB -n 1                      # reservation des processeurs pour le job
29#-Q- platine #BSUB -W 1:00                   # Limite temps
30#-Q- platine #BSUB -q post              # Passage en queue post
31#-Q- platine #BSUB -L /bin/ksh
32#-Q- sx8brodie #!/bin/ksh
33#-Q- sx8brodie #######################
34#-Q- sx8brodie ## SX8BRODIE   IDRIS ##
35#-Q- sx8brodie #######################
36#-Q- sx8brodie # Temps Elapsed max. d'une requete hh:mm:ss
37#-Q- sx8brodie # @ wall_clock_limit = 10:00:00
38#-Q- sx8brodie # Nom du travail LoadLeveler
39#-Q- sx8brodie # @ job_name   = SE
40#-Q- sx8brodie # Fichier de sortie standard du travail       
41#-Q- sx8brodie # @ output     = $(job_name).$(jobid)
42#-Q- sx8brodie # Fichier de sortie d'erreur du travail
43#-Q- sx8brodie # @ error      =  $(job_name).$(jobid)
44#-Q- sx8brodie # pour recevoir un mail en cas de depassement du temps Elapsed (ou autre pb.)
45#-Q- sx8brodie # @ notification = error
46#-Q- sx8brodie # @ environment  = $DEBUG_debug ; $MODIPSL ; $libIGCM ; $libIGCM_SX ; $SUBMIT_DIR ; $REBUILD_DIR ; $RebuildFromArchive ; $POST_DIR ; $MASTER ; $DateBegin ; $PeriodDateBegin ; $PeriodDateEnd ; $NbRebuildDir ; $StandAlone ; $RESOL_ATM ; $RESOL_OCE ; $RESOL_ICE ; $RESOL_MBG ; $RESOL_SRF ; $RESOL_SBG ; $MASTER
47#-Q- sx8brodie # @ queue
48#-Q- aix6 #!/bin/ksh
49#-Q- aix6 #######################
50#-Q- aix6 ##   VARGAS   IDRIS  ##
51#-Q- aix6 #######################
52#-Q- aix6 # Temps Elapsed max. d'une requete hh:mm:ss
53#-Q- aix6 # @ wall_clock_limit = 10:00:00
54#-Q- aix6 # Nom du travail LoadLeveler
55#-Q- aix6 # @ job_name   = SE
56#-Q- aix6 # Fichier de sortie standard du travail       
57#-Q- aix6 # @ output     = $(job_name).$(jobid)
58#-Q- aix6 # Fichier de sortie d'erreur du travail
59#-Q- aix6 # @ error      =  $(job_name).$(jobid)
60#-Q- aix6 # pour recevoir un mail en cas de depassement du temps Elapsed (ou autre pb.)
61#-Q- aix6 # @ notification = error
62#-Q- aix6 # @ environment  = $DEBUG_debug ; $MODIPSL ; $libIGCM ; $libIGCM_SX ; $SUBMIT_DIR ; $REBUILD_DIR ; $RebuildFromArchive ; $POST_DIR ; $MASTER ; $DateBegin ; $PeriodDateBegin ; $PeriodDateEnd ; $NbRebuildDir ; $StandAlone ; $RESOL_ATM ; $RESOL_OCE ; $RESOL_ICE ; $RESOL_MBG ; $RESOL_SRF ; $RESOL_SBG ; $MASTER
63#-Q- aix6 # @ queue
64#-Q- ulam #!/bin/ksh
65#-Q- ulam #######################
66#-Q- ulam ##   ULAM   IDRIS  ##
67#-Q- ulam #######################
68#-Q- ulam # Temps Elapsed max. d'une requete hh:mm:ss
69#-Q- ulam # @ wall_clock_limit = 10:00:00
70#-Q- ulam # Nom du travail LoadLeveler
71#-Q- ulam # @ job_name   = SE
72#-Q- ulam # Fichier de sortie standard du travail       
73#-Q- ulam # @ output     = $(job_name).$(jobid)
74#-Q- ulam # Fichier de sortie d'erreur du travail
75#-Q- ulam # @ error      =  $(job_name).$(jobid)
76#-Q- ulam # pour recevoir un mail en cas de depassement du temps Elapsed (ou autre pb.)
77#-Q- ulam # @ notification = error
78#-Q- ulam # @ environment  = $DEBUG_debug ; $MODIPSL ; $libIGCM ; $libIGCM_SX ; $SUBMIT_DIR ; $REBUILD_DIR ; $RebuildFromArchive ; $POST_DIR ; $MASTER ; $DateBegin ; $PeriodDateBegin ; $PeriodDateEnd ; $NbRebuildDir ; $StandAlone ; $RESOL_ATM ; $RESOL_OCE ; $RESOL_ICE ; $RESOL_MBG ; $RESOL_SRF ; $RESOL_SBG ; $MASTER
79#-Q- ulam # @ queue
80#-Q- sx8mercure #!/bin/ksh
81#-Q- sx8mercure ######################
82#-Q- sx8mercure ## SX8MERCURE   CEA ##
83#-Q- sx8mercure ######################
84#-Q- sx8mercure #PBS -N SE                   # Nom du job
85#-Q- sx8mercure #PBS -j o                    # regroupement des stdout et stderr
86#-Q- sx8mercure #PBS -S /usr/bin/ksh         # shell de soumission
87#-Q- sx8mercure #PBS -l memsz_job=8gb        # Limite memoire a 1 Go
88#-Q- sx8mercure #PBS -l cputim_job=24:00:00   # Limite temps a 1 heures
89#-Q- sx8mercure #PBS -q scalaire
90#-Q- sx8mercure #PBS -r n
91#-Q- sx9mercure #!/bin/ksh
92#-Q- sx9mercure ######################
93#-Q- sx9mercure ## SX9MERCURE  CCRT ##
94#-Q- sx9mercure ######################
95#-Q- sx9mercure #PBS -N SE                   # Nom du job
96#-Q- sx9mercure #PBS -j o                    # regroupement des stdout et stderr
97#-Q- sx9mercure #PBS -S /usr/bin/ksh         # shell de soumission
98#-Q- sx9mercure #PBS -l memsz_job=8gb        # Limite memoire a 1 Go
99#-Q- sx9mercure #PBS -l elapstim_req=24:00:00   # Limite temps a 1 heures
100#-Q- sx9mercure #PBS -q scalaire
101#-Q- sx9mercure #PBS -r n
102#-Q- titane #!/bin/ksh
103#-Q- titane ######################
104#-Q- titane ## TITANE   CEA ##
105#-Q- titane ######################
106#-Q- titane #MSUB -r SE             # Nom du job               
107#-Q- titane #MSUB -eo
108#-Q- titane #MSUB -n 1              # Reservation du processus
109#-Q- titane #MSUB -T 86400          # Limite de temps elapsed du job
110#-Q- titane #MSUB -q mono
111#-Q- titane #MSUB -E '-rn'
112#-Q- lxiv8 ######################
113#-Q- lxiv8 ## OBELIX      LSCE ##
114#-Q- lxiv8 ######################
115#-Q- lxiv8 #PBS -N SE
116#-Q- lxiv8 #PBS -m a
117#-Q- lxiv8 #PBS -j oe
118#-Q- lxiv8 #PBS -q medium
119#-Q- lxiv8 #PBS -o SE.$$
120#-Q- lxiv8 #PBS -S /bin/ksh
121#-Q- default #!/bin/ksh
122#-Q- default ##################
123#-Q- default ## DEFAULT HOST ##
124#-Q- default ##################
125
126#**************************************************************
127# Author: Sebastien Denvil
128# Contact: Sebastien.Denvil__at__ipsl.jussieu.fr
129# $Revision::                                          $ Revision of last commit
130# $Author::                                            $ Author of last commit
131# $Date::                                              $ Date of last commit
132# IPSL (2006)
133#  This software is governed by the CeCILL licence see libIGCM/libIGCM_CeCILL.LIC
134#
135#**************************************************************
136
137#set -eu
138#set -vx
139
140date
141
142#-Q- sx8brodie export OMP_NUM_THREADS=1
143#-Q- aix6 export OMP_NUM_THREADS=1
144#-Q- ulam export OMP_NUM_THREADS=1
145
146#D- Task type (computing or post-processing)
147TaskType=post-processing
148
149########################################################################
150
151#D- Flag to determine if this job in a standalone mode
152#D- Default : value from AA_job if any
153StandAlone=${StandAlone:=true}
154
155#D- Path to libIGCM
156#D- Default : value from AA_job if any
157# WARNING For StandAlone use : To run this script on some machine (ulam and cesium)
158# WARNING you must check MirrorlibIGCM variable in sys library.
159# WARNING If this variable is true, you must use libIGCM_POST path instead
160# WARNING of your running libIGCM directory.
161libIGCM=${libIGCM:=::modipsl::/libIGCM}
162
163#D- Flag to determine if rebuild process has been performed asynchronously
164#D- Possible value true or false.
165#D- If true raw files has allready been patched by rebuild job
166#D- If false create_ts will patch the raw files
167#D- Default : Value from AA_job if any. Usefull in StandAlone case.
168RebuildFrequency=${RebuildFrequency:=true}
169
170#D- Flag to determine atlas job's output directory
171#D- Default : value from libIGCM_post.ksh if any
172POST_DIR=${POST_DIR:=${PBS_O_WORKDIR:=$(pwd)}}
173
174#D- Increased verbosity (1, 2, 3)
175#D- Default : value from AA_job if any
176Verbosity=${Verbosity:=3}
177
178#D- Low level debug : to bypass lib test checks and stack construction
179#D- Default : value from AA_job if any
180DEBUG_debug=${DEBUG_debug:=false}
181
182#D- TEMPORARY Flag to determine atmospheric resolution
183#D- Default : value from atmospheric driver if any
184RESOL_ATM=${RESOL_ATM:=ALL}
185
186#D- Flag to determine surface resolution
187#D- Default : value from surface driver if any
188RESOL_SRF=ALL
189
190#D- Flag to determine surface resolution
191#D- Default : value from surface driver if any
192RESOL_SBG=ALL
193
194#D- TEMPORARY Flag to determine ocean resolution
195#D- Default : value from ocean driver if any
196RESOL_OCE=${RESOL_OCE:=ORCA2}
197
198#D- TEMPORARY Flag to determine ice resolution
199#D- Default : value from ice driver if any
200RESOL_ICE=${RESOL_ICE:=ORCA2}
201
202#D- TEMPORARY Flag to determine marine biogeochemistry resolution
203#D- Default : value from ice driver if any
204RESOL_MBG=${RESOL_MBG:=ORCA2}
205
206########################################################################
207
208. ${libIGCM}/libIGCM_debug/libIGCM_debug.ksh
209      ( ${DEBUG_debug} ) && IGCM_debug_Check
210. ${libIGCM}/libIGCM_card/libIGCM_card.ksh
211     ( ${DEBUG_debug} ) && IGCM_card_Check
212. ${libIGCM}/libIGCM_date/libIGCM_date.ksh
213     ( ${DEBUG_debug} ) && IGCM_date_Check
214#-------
215. ${libIGCM}/libIGCM_sys/libIGCM_sys.ksh
216
217########################################################################
218
219#set -vx
220
221IGCM_sys_MkdirWork ${RUN_DIR_PATH}
222IGCM_sys_Cd ${RUN_DIR_PATH}
223
224# ------------------------------------------------------------------
225# Test if all was right before proceeding further
226# ------------------------------------------------------------------
227IGCM_debug_Verif_Exit_Post
228
229if [ ${StandAlone} = true ] ; then
230    CARD_DIR=${SUBMIT_DIR}
231else
232    CARD_DIR=${RUN_DIR_PATH}
233    IGCM_sys_Get_Master ${SUBMIT_DIR}/config.card ${RUN_DIR_PATH}
234    IGCM_sys_Get_Master ${SUBMIT_DIR}/run.card    ${RUN_DIR_PATH}
235    IGCM_sys_Get_Master ${SUBMIT_DIR}/COMP        ${RUN_DIR_PATH}
236    IGCM_sys_Get_Master ${SUBMIT_DIR}/POST        ${RUN_DIR_PATH}
237fi
238
239#==================================
240# First of all
241#
242# Read libIGCM compatibility version in config.card
243# Read UserChoices section
244# Read Ensemble section
245# Read Post section
246# Define all netcdf output directories
247#==================================
248IGCM_config_CommonConfiguration ${CARD_DIR}/config.card
249
250#==================================
251# Define default value to keep compatibility with previous card: means before changes due to TGCC
252if [ X${PackDefault} = Xtrue ] ; then
253  [ X${config_Post_PackFrequency} = X ] && config_Post_PackFrequency=${config_Post_RebuildFrequency}
254else
255  config_Post_PackFrequency=NONE
256fi
257
258#==================================
259# If pack is active then PackFrequency overule the config_UserChoices_PeriodLength
260if ( [ ! X${config_Post_PackFrequency} = X${NULL_STR} ] && [ ! X${config_Post_PackFrequency} = XNONE ] ) ; then
261  config_UserChoices_PeriodLength=${config_Post_PackFrequency}
262fi
263
264#==================================
265# Read ListOfComponents section:
266IGCM_card_DefineArrayFromSection   ${CARD_DIR}/config.card ListOfComponents
267
268#==================================
269# Read SeasonalFrequency:
270IGCM_card_DefineVariableFromOption ${CARD_DIR}/config.card Post SeasonalFrequency
271
272#
273# Determine period for seasonnal average. Default : value from AA_job if any
274#
275DateBegin=${DateBegin:=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateBegin} )}
276#
277PeriodDateEnd=${PeriodDateEnd:=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateEnd} )}
278#
279freq=$( echo ${config_Post_SeasonalFrequency} |  sed -e "s/[yY]//" )
280#
281an_fin=$(( $( IGCM_date_ConvertGregorianDateToJulian ${PeriodDateEnd} ) / 1000 ))
282an_deb=$( IGCM_date_YearDigit $(( an_fin - freq + 1 )) )
283an_fin=$( IGCM_date_YearDigit ${an_fin} )
284#
285# For each component selected determine which files need post-processing
286#
287for comp in ${config_ListOfComponents[*]} ; do
288    #
289    IGCM_card_DefineArrayFromOption ${CARD_DIR}/config.card ListOfComponents ${comp}
290    eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1
291    #
292    card=${CARD_DIR}/COMP/${compname}.card
293    IGCM_card_DefineArrayFromOption ${card} OutputFiles List
294    #
295    ListFilesName=${compname}_OutputFiles_List
296    eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1
297    #
298    if [ X${FileName0} != X${NULL_STR} ] ; then
299        #
300        # INITIALISATION
301        #
302        eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1
303        typeset i=2
304        #
305        until [ $i -gt $NbFiles ]; do
306            #
307            eval flag_post=\${${ListFilesName}[$i]} > /dev/null 2>&1
308            #
309            if [ X${flag_post} != XNONE ] ; then
310                #
311                # Check if seasonal is required for this file
312                #
313                IGCM_card_DefineArrayFromSection ${card} ${flag_post}
314                #
315                # Seasonal case : If option Seasonal is not found (old cards) put SEASONAL ON by default
316                #
317                # variable option allready typeset above
318                for option in $( eval echo \${${compname}_${flag_post}[*]} ) ; do
319                    if [ ${option} = Seasonal ] ; then
320                        FoundSeasonal=true
321                        IGCM_card_DefineVariableFromOption ${card} ${flag_post} Seasonal
322                    fi
323                done
324                #
325                if [ ! X${FoundSeasonal} = Xtrue ] ; then
326                    eval ${compname}_${flag_post}_Seasonal=ON
327                fi
328                #
329                if [ ! X$( eval echo \${${compname}_${flag_post}_Seasonal} ) = XON ] ; then
330                    (( i=i+3 ))
331                    continue
332                fi
333                #
334                # CREATE LIST
335                #
336                FILE=$( echo ${flag_post} | awk "-FPost_" '{print $2}' )
337                #
338                DIRECTORY=${R_SAVE}/${comp}/Analyse/SE
339                #
340                TestedFile=${config_UserChoices_JobName}_SE_${an_deb}_${an_fin}_${FILE}.nc
341                #
342                IGCM_sys_TestFileArchive ${DIRECTORY}/${TestedFile}
343                if [ ! $? = 0 ] ; then
344                    eval set +A LISTE_FILE_${comp} \$\{LISTE_FILE_${comp}[*]} ${FILE}
345                    if [ ! ${RebuildFrequency} = true ] ; then
346                        IGCM_card_DefineArrayFromOption ${card} Post_${FILE} Patches
347                        eval set +A LISTE_PATCHES_${FILE} \$\{${compname}_Post_${FILE}_Patches[*]}
348                        if [ X$( eval echo \${LISTE_PATCHES_${FILE}[0]} ) !=  X${NULL_STR} ]; then
349                            for Patch in $( eval echo \${LISTE_PATCHES_${FILE}[*]} ); do
350                                if [ Xload${Patch} != X ] ; then
351                                    . ${libIGCM}/libIGCM_post/IGCM_${Patch}.ksh
352                                    eval load${Patch}=loaded
353                                fi
354                            done
355                        fi
356                    fi
357                fi
358            fi
359            (( i=i+3 ))
360        done # until [ $i -eq $NbFiles ]
361    fi
362done         # for comp
363
364for comp in ${config_ListOfComponents[*]} ; do
365    #
366    eval R_OUT_${comp}=${R_SAVE}/${comp}
367    #
368    i=0
369    for file in $( eval echo \${LISTE_FILE_${comp}[*]} ); do
370        #
371        # Determine in which output can we find file
372        # IE : Output/MO or Output/DA or ...
373        #
374        FlagDir=$( echo ${file} | awk -F "_" '{print $1}' )
375        case ${FlagDir} in
376            1Y)    FreqDir=YE  ;;
377            1M)    FreqDir=MO  ;;
378            5D|1D) FreqDir=DA  ;;
379            HF)    FreqDir=HF  ;;
380            3H)    FreqDir=HF  ;;
381            INS)   FreqDir=INS ;;
382        esac
383        #
384        RESULT_SE=${config_UserChoices_JobName}_SE_${an_deb}_${an_fin}_${file}.nc
385        # Do not redoo an existing SE
386        IGCM_sys_TestFileArchive ${R_SAVE}/${comp}/Analyse/SE/${RESULT_SE}
387        if [ $? = 0 ] ; then
388            continue
389        fi
390        #
391        eval file_path=\${R_OUT_${comp}}/Output/${FreqDir}/
392        #
393        case ${config_UserChoices_PeriodLength} in
394        # For Yearly simulation :
395        1Y|1y)
396          (( an = an_deb ))
397          # Initialize array
398          #set -A liste_file_se
399          #set -A liste_file_se_tmp
400          unset liste_file_se
401          unset liste_file_se_tmp
402          while [ ${an} -le ${an_fin} ] ; do
403              moisL=$( IGCM_date_DaysInMonth ${an} ${mois} )
404              #
405              an4=$(printf "%04i\n" ${an} )
406              #
407              diy=$( IGCM_date_DaysInYear $an4 )
408              afin=$( IGCM_date_AddDaysToGregorianDate ${an4}0101 $(( diy - 1 )) )
409              date=${an4}0101_${afin}
410              #set +A liste_file_se ${liste_file_se[*]} ${file_path}${config_UserChoices_JobName}_${date}_${file}.nc
411              #set +A liste_file_se_tmp ${liste_file_se_tmp[*]} ${config_UserChoices_JobName}_${date}_${file}.nc
412              liste_file_se[${#liste_file_se[*]}]=${file_path}${config_UserChoices_JobName}_${date}_${file}.nc
413              liste_file_se_tmp[${#liste_file_se_tmp[*]}]=${config_UserChoices_JobName}_${date}_${file}.nc
414              (( an = an + 1 ))
415          done
416          #
417          IGCM_sys_Get /l liste_file_se[*] ${RUN_DIR_PATH}
418          IGCM_debug_Verif_Exit_Post
419         
420          # Apply IGCM_Patch if needed
421          if [ ! ${RebuildFrequency} = true ] ; then
422              if [ X$( eval echo \${LISTE_PATCHES_${file}[0]} ) !=  X${NULL_STR} ]; then
423                  for file_t in $( eval echo ${liste_file_se_tmp[*]} ); do
424                      for Patch in $( eval echo \${LISTE_PATCHES_${file}[*]} ); do
425                          IGCM_${Patch} ${file_t}
426                      done
427                  done
428              fi
429          fi
430                     
431          # Search of common list of variables to be treated
432          nbfile=0
433          for file_common_var in ${liste_file_se_tmp[*]} ; do
434              ncdump -h ${file_common_var} | grep -E 'float|double' | cut -f 1 -d '(' | cut -f 2 -d ' ' >> tmpfile_ncra
435              (( nbfile = nbfile + 1 ))
436          done
437          list_var_final_ncra=`cat tmpfile_ncra | sort | uniq -c | awk -v nbfile=$nbfile '{if ($1 == nbfile) {print $2}}' | paste -s -d ','`
438          IGCM_sys_Rm tmpfile_ncra
439
440          # detect time counter : time or time_counter ie unlimited variable
441          var_unlim=$(ncdump -h ${liste_file_se_tmp[1]}|grep UNLIMITED|awk '{print $1}')
442
443          for mois in  01 02 03 04 05 06 07 08 09 10 11 12 ; do
444          #
445              (( nb = ${mois} - 1 ))
446          #
447              OUT_SE[${nb}]=${config_UserChoices_JobName}_SE${mois}_${an_deb}_${an_fin}_${file}.nc
448              IGCM_sys_ncra -O -v ${list_var_final_ncra} -d ${var_unlim},${nb},,12 ${liste_file_se_tmp[*]} ${OUT_SE[${nb}]}
449          done
450          IGCM_sys_Rm ${liste_file_se_tmp[*]}
451          ;;
452        # For Monthly simulation :
453        1M|1m)
454          for mois in  01 02 03 04 05 06 07 08 09 10 11 12 ; do
455              #
456              (( nb = ${mois} - 1 ))
457              #
458              OUT_SE[${nb}]=${config_UserChoices_JobName}_SE${mois}_${an_deb}_${an_fin}_${file}.nc
459              #
460              (( an = an_deb ))
461              # Initialize array
462              #set -A liste_file_se
463              #set -A liste_file_se_tmp
464              unset liste_file_se
465              unset liste_file_se_tmp
466              while [ ${an} -le ${an_fin} ] ; do
467                  moisL=$( IGCM_date_DaysInMonth ${an} ${mois} )
468                  #
469                  an4=$(printf "%04i\n" ${an} )
470                  #
471                  date=${an4}${mois}01_${an4}${mois}${moisL}
472                  #set +A liste_file_se ${liste_file_se[*]} ${file_path}${config_UserChoices_JobName}_${date}_${file}.nc
473                  #set +A liste_file_se_tmp ${liste_file_se_tmp[*]} ${config_UserChoices_JobName}_${date}_${file}.nc
474                  liste_file_se[${#liste_file_se[*]}]=${file_path}${config_UserChoices_JobName}_${date}_${file}.nc
475                  liste_file_se_tmp[${#liste_file_se_tmp[*]}]=${config_UserChoices_JobName}_${date}_${file}.nc
476
477                  (( an = an + 1 ))
478              done
479              #
480              IGCM_sys_Get /l liste_file_se[*] ${RUN_DIR_PATH}
481              IGCM_debug_Verif_Exit_Post
482             
483              # Apply IGCM_Patch if needed
484              if [ ! ${RebuildFrequency} = true ] ; then
485                  if [ X$( eval echo \${LISTE_PATCHES_${file}[0]} ) !=  X${NULL_STR} ]; then
486                      for file_t in $( eval echo ${liste_file_se_tmp[*]} ); do
487                          for Patch in $( eval echo \${LISTE_PATCHES_${file}[*]} ); do
488                              IGCM_${Patch} ${file_t}
489                          done
490                      done
491                  fi
492              fi
493             
494              # Search of common list of variables to be treated
495              nbfile=0
496              for file_common_var in ${liste_file_se_tmp[*]} ; do
497                  ncdump -h ${file_common_var} | grep -E 'float|double' | cut -f 1 -d '(' | cut -f 2 -d ' ' >> tmpfile_ncra
498                  (( nbfile = nbfile + 1 ))
499              done
500              list_var_final_ncra=`cat tmpfile_ncra | sort | uniq -c | awk -v nbfile=$nbfile '{if ($1 == nbfile) {print $2}}' | paste -s -d ','`
501              IGCM_sys_Rm tmpfile_ncra
502
503              IGCM_sys_ncra -O -v ${list_var_final_ncra} ${liste_file_se_tmp[*]} ${OUT_SE[${nb}]}
504
505              IGCM_sys_Rm ${liste_file_se_tmp[*]}
506          done
507          ;;
508        *D|*d)
509          for mois in  01 02 03 04 05 06 07 08 09 10 11 12 ; do
510              #
511              (( nb = ${mois} - 1 ))
512              #
513              OUT_SE[${nb}]=${config_UserChoices_JobName}_SE${mois}_${an_deb}_${an_fin}_${file}.nc
514              #
515              (( an = an_deb ))
516              # Initialize array
517              #set -A liste_file_se
518              #set -A liste_file_se_tmp
519              unset liste_file_se
520              unset liste_file_se_tmp
521              while [ ${an} -le ${an_fin} ] ; do
522                  moisL=$( IGCM_date_DaysInMonth ${an} ${mois} )
523                  #
524                  an4=$(printf "%04i\n" ${an} )
525                  #
526                  length_d=$(( ${config_UserChoices_PeriodLength} - 1 ))
527                  # for one day
528                  if [ ${length_d} -eq 1 ] ; then
529                      (( length_d = 0 ))
530                  fi
531                  (( day  = 1 ))
532                  while [ ${day} -le ${moisL} ] ; do
533                      day2=$(printf "%02i\n" ${day} )
534                      day_beg=${an4}${mois}${day2}
535                      day_end=$( IGCM_date_AddDaysToGregorianDate ${day_beg} ${length_d} )
536                      date=${an4}${mois}${day_beg}_${an4}${mois}${day_end}
537                      #set +A liste_file_se ${liste_file_se[*]} ${file_path}${config_UserChoices_JobName}_${date}_${file}.nc
538                      #set +A liste_file_se_tmp ${liste_file_se_tmp[*]} ${config_UserChoices_JobName}_${date}_${file}.nc
539                      liste_file_se[${#liste_file_se[*]}]=${file_path}${config_UserChoices_JobName}_${date}_${file}.nc
540                      liste_file_se_tmp[${#liste_file_se_tmp[*]}]=${config_UserChoices_JobName}_${date}_${file}.nc
541                      (( day = day + 1 ))
542                  done
543                  (( an = an + 1 ))
544              done
545              #
546              IGCM_sys_Get /l liste_file_se[*] ${RUN_DIR_PATH}
547              IGCM_debug_Verif_Exit_Post
548             
549              # Apply IGCM_Patch if needed
550              if [ ! ${RebuildFrequency} = true ] ; then
551                  if [ X$( eval echo \${LISTE_PATCHES_${file}[0]} ) !=  X${NULL_STR} ]; then
552                      for file_t in $( eval echo ${liste_file_se_tmp[*]} ); do
553                          for Patch in $( eval echo \${LISTE_PATCHES_${file}[*]} ); do
554                              IGCM_${Patch} ${file_t}
555                          done
556                      done
557                  fi
558              fi
559
560              # Search of common list of variables to be treated
561              nbfile=0
562              for file_common_var in ${liste_file_se_tmp[*]} ; do
563                  ncdump -h ${file_common_var} | grep -E 'float|double' | cut -f 1 -d '(' | cut -f 2 -d ' ' >> tmpfile_ncra
564                  (( nbfile = nbfile + 1 ))
565              done
566              list_var_final_ncra=`cat tmpfile_ncra | sort | uniq -c | awk -v nbfile=$nbfile '{if ($1 == nbfile) {print $2}}' | paste -s -d ','`
567              IGCM_sys_Rm tmpfile_ncra
568
569              IGCM_sys_ncra -O -v ${list_var_final_ncra} ${liste_file_se_tmp[*]} ${OUT_SE[${nb}]}
570              IGCM_sys_Rm ${liste_file_se_tmp[*]}
571          done
572          ;;
573        esac
574        #
575
576        # Search of common list of variables to be treated
577        nbfile=0
578        for file_common_var in ${OUT_SE[*]} ; do
579           ncdump -h ${file_common_var} | grep -E 'float|double' | cut -f 1 -d '(' | cut -f 2 -d ' ' >> tmpfile_ncrcat
580           (( nbfile = nbfile + 1 ))
581        done
582        list_var_final_ncrcat=`cat tmpfile_ncrcat | sort | uniq -c | awk -v nbfile=$nbfile '{if ($1 == nbfile) {print $2}}' | paste -s -d ','`
583        IGCM_sys_Rm tmpfile_ncrcat
584
585        IGCM_sys_ncrcat -O -v ${list_var_final_ncrcat} ${OUT_SE[*]} ${RESULT_SE}
586        #
587        IGCM_sys_Rm ${OUT_SE[*]}
588        #
589        # detect time counter : time or time_counter ie unlimited variable
590        var_unlim=$(ncdump -h ${RESULT_SE}|grep UNLIMITED| cut -d ' ' -f 1)
591
592        # Put correct climatological axis following calendar
593        case ${config_UserChoices_CalendarType} in
594                360d|360_day)
595                        # 360 days
596                        ncap2cmd="'defdim(\"tbnds\",2) ; ${var_unlim}[${var_unlim}]={15, 45, 75, 105, 135, 165, 195, 225, 255, 285, 315, 345.} ; ${var_unlim}_bnds[${var_unlim},tbnds]={0, 30, 30, 60, 60, 90, 90, 120, 120, 150, 150, 180, 180, 210, 210, 240, 240, 270, 270, 300, 300, 330, 330, 360.} ; ${var_unlim}@units=\"days since 0000-01-01 00:00:00\" ; ${var_unlim}@time_origin=\"01-JAN-0000 00:00:00\" ; ${var_unlim}@calendar=\"360_day\" ; ${var_unlim}@bounds=\"${var_unlim}_bnds\"'"
597                        ;;
598                noleap|365_day)
599                        # 365 days
600                        ncap2cmd="'defdim(\"tbnds\",2) ; ${var_unlim}[${var_unlim}]={15.5, 45, 74.5, 105, 135.5, 166, 196.5, 227.5, 258, 288.5, 319, 349.5} ; ${var_unlim}_bnds[${var_unlim},tbnds]={0, 31, 31, 59, 59, 90, 90, 120, 120, 151, 151, 181, 181, 212, 212, 243, 243, 273, 273, 304, 304, 334, 334, 365.} ; ${var_unlim}@units=\"days since 0000-01-01 00:00:00\" ; ${var_unlim}@time_origin=\"01-JAN-0000 00:00:00\" ; ${var_unlim}@calendar=\"365_day\" ; ${var_unlim}@bounds=\"${var_unlim}_bnds\"'"
601                        ;;
602                all_leap|366_day)
603                        # 366 days
604                        ncap2cmd="'defdim(\"tbnds\",2) ; ${var_unlim}[${var_unlim}]={15.5, 45.5, 75.5, 106, 136.5, 167, 197.5, 228.5, 259, 289.5, 320, 350.5} ; ${var_unlim}_bnds[${var_unlim},tbnds]={0, 31, 31, 60, 60, 91, 91, 121, 121, 152, 152, 182, 182, 213, 213, 244, 244, 274, 274, 305, 305, 335, 335, 366.} ; ${var_unlim}@units=\"days since 0000-01-01 00:00:00\" ; ${var_unlim}@time_origin=\"01-JAN-0000 00:00:00\" ; ${var_unlim}@calendar=\"366_day\" ; ${var_unlim}@bounds=\"${var_unlim}_bnds\"'"
605                        ;;
606                leap|gregorian|standard)
607                        # 365.2425 days
608                        ncap2cmd="'defdim(\"tbnds\",2) ; ${var_unlim}[${var_unlim}]={15.5, 45.12125, 74.7425, 105.2425, 135.7425, 166.2425, 196.7425, 227.7425, 258.2425, 288.7425, 319.2425, 349.7425} ; ${var_unlim}_bnds[${var_unlim},tbnds]={0, 31, 31, 59.2425, 59.2425, 90.2425, 90.2425, 120.2425, 120.2425, 151.2425, 151.2425, 181.2425, 181.2425, 212.2425, 212.2425, 243.2425, 243.2425, 273.2425, 273.2425, 304.2425, 304.2425, 334.2425, 334.2425, 365.2425} ; ${var_unlim}@units=\"days since 0000-01-01 00:00:00\" ; ${var_unlim}@time_origin=\"01-JAN-0000 00:00:00\" ; ${var_unlim}@calendar=\"gregorian\" ; ${var_unlim}@bounds=\"${var_unlim}_bnds\"'"
609                        ;;
610        esac
611        eval IGCM_sys_ncap2 -Oh -s $ncap2cmd ${RESULT_SE} tmp.nc
612        IGCM_sys_Rm ${RESULT_SE}
613        IGCM_sys_Mv tmp.nc ${RESULT_SE}
614        #
615        eval IGCM_sys_Put_Out ${RESULT_SE} \${R_OUT_${comp}}/Analyse/SE/${RESULT_SE}
616        IGCM_sys_Rm ${RESULT_SE}
617        #
618    done
619done
620
621# DODS copy
622for comp in ${config_ListOfComponents[*]} ; do
623    IGCM_sys_TestDirArchive ${R_SAVE}/${comp}/Analyse/SE
624    [ $? = 0 ] && IGCM_sys_Put_Dods ${comp}/Analyse/SE
625done
626
627YEARS=${an_deb}_${an_fin}
628DIR_OUT=SE
629
630export POST_DIR; export SUBMIT_DIR; export libIGCM; export R_INIT; export R_BC; export StandAlone
631export RESOL_ATM; export RESOL_OCE ; export RESOL_ICE ; export RESOL_MBG ; export RESOL_SRF ; export RESOL_SBG
632export R_SAVE; export config_UserChoices_JobName; export config_UserChoices_TagName; export YEARS; export DIR_OUT
633listVarEnv="POST_DIR,SUBMIT_DIR,libIGCM,R_INIT,R_BC,StandAlone,RESOL_ATM,RESOL_OCE,RESOL_ICE,RESOL_MBG,RESOL_SRF,RESOL_SBG,R_SAVE,config_UserChoices_JobName,config_UserChoices_TagName,YEARS,DIR_OUT"
634export listVarEnv;
635
636#D-
637# --------------------------------------------------------------------
638#D- Test if all was right before ATLAS
639# --------------------------------------------------------------------
640IGCM_debug_Verif_Exit_Post
641
642if [ ${config_UserChoices_TagName} = "IPSLCM4_v1_OASIS3" ] || \
643   [ ${config_UserChoices_TagName} = "IPSLCM4_v2" ]        || \
644   [ ${config_UserChoices_TagName} = "IPSL_ESM_V1" ] ; then
645    #
646    Script_Post_Output=atlas_ORCHIDEE.${PeriodDateEnd} ;
647    IGCM_sys_QsubPost atlas_ORCHIDEE                   ;
648    Script_Post_Output=atlas_LDMZ.${PeriodDateEnd}     ;
649    IGCM_sys_QsubPost atlas_LMDZ                       ;
650    Script_Post_Output=atlas_ORCA_LIM.${PeriodDateEnd} ;
651    IGCM_sys_QsubPost atlas_ORCA_LIM                   ;
652    Script_Post_Output=additionnal.${PeriodDateEnd}    ;
653    IGCM_sys_QsubPost additionnal                      ;
654    #
655elif [ ${config_UserChoices_TagName} = "IPSLCM5" ]  || \
656     [ ${config_UserChoices_TagName} = "IPSLCM5A" ] || \
657     [ ${config_UserChoices_TagName} = "IPSLCM5B" ] || \
658     [ ${config_UserChoices_TagName} = "IPSLCM5A-MR" ] ; then
659    Script_Post_Output=atlas_ORCHIDEE.${PeriodDateEnd} ;
660    IGCM_sys_QsubPost atlas_ORCHIDEE                   ;
661    Script_Post_Output=atlas_LDMZ.${PeriodDateEnd}     ;
662    IGCM_sys_QsubPost atlas_LMDZ                       ;
663    Script_Post_Output=atlas_ORCA_LIM.${PeriodDateEnd} ;
664    IGCM_sys_QsubPost atlas_ORCA_LIM                   ;
665    Script_Post_Output=atlas_PISCES.${PeriodDateEnd}   ;
666    IGCM_sys_QsubPost atlas_PISCES                     ;
667    #
668elif [ ${config_UserChoices_TagName} = "LMDZ4OR" ]  || \
669     [ ${config_UserChoices_TagName} = "LMDZOR" ]   || \
670     [ ${config_UserChoices_TagName} = "LMDZ4OR_v2" ] ; then
671    #
672    Script_Post_Output=atlas_LDMZ.${PeriodDateEnd}     ;
673    IGCM_sys_QsubPost atlas_LMDZ                       ;
674    Script_Post_Output=atlas_ORCHIDEE.${PeriodDateEnd} ;
675    IGCM_sys_QsubPost atlas_ORCHIDEE                   ;
676    #
677elif [ ${config_UserChoices_TagName} = "LMDZ" ] ; then
678    #
679    Script_Post_Output=atlas_LDMZ.${PeriodDateEnd}     ;
680    IGCM_sys_QsubPost atlas_LMDZ                       ;
681    #
682elif [ ${config_UserChoices_TagName} = "OL" ]      || \
683     [ ${config_UserChoices_TagName} = "OL2" ] ; then
684    #
685    Script_Post_Output=atlas_ORCHIDEE.${PeriodDateEnd} ;
686    IGCM_sys_QsubPost atlas_ORCHIDEE                   ;
687    #
688elif [ ${config_UserChoices_TagName} = "ORCA2_LIM" ]       ||
689     [ ${config_UserChoices_TagName} = "ORCA2_LIM2" ] ; then
690    #
691    Script_Post_Output=atlas_ORCA_LIM.${PeriodDateEnd} ;
692    IGCM_sys_QsubPost atlas_ORCA_LIM                   ;
693elif [ ${config_UserChoices_TagName} = "ORCA2_LIM2_PISCES" ]  ; then
694    #
695    Script_Post_Output=atlas_ORCA_LIM.${PeriodDateEnd} ;
696    IGCM_sys_QsubPost atlas_ORCA_LIM                   ;
697    Script_Post_Output=atlas_PISCES.${PeriodDateEnd}   ;
698    IGCM_sys_QsubPost atlas_PISCES                     ;
699elif [ ${config_UserChoices_TagName} = "ORCA2_OFF_PISCES" ]  ; then
700    #
701    Script_Post_Output=atlas_PISCES.${PeriodDateEnd}   ;
702    IGCM_sys_QsubPost atlas_PISCES                     ;
703    #
704fi
705
706# Clean RUN_DIR_PATH (necessary for cesium and titane only)
707IGCM_sys_RmRunDir -Rf ${RUN_DIR_PATH}
Note: See TracBrowser for help on using the repository browser.