source: branches/libIGCM_MPI_OpenMP/AA_create_se @ 593

Last change on this file since 593 was 592, checked in by mafoipsl, 12 years ago

Second merge of libIGCM_MPI_OpenMP branch with libIGCM trunk, revision 591.

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