source: branches/libIGCM_MPI_OpenMP/AA_create_ts

Last change on this file was 605, checked in by mafoipsl, 12 years ago

Tttttt use elapstim_req instead of cpu_time on mercure front-end.

  • 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: 34.5 KB
Line 
1#-Q- cesium #!/bin/ksh
2#-Q- cesium ######################
3#-Q- cesium ## CESIUM   CEA ##
4#-Q- cesium ######################
5#-Q- cesium #MSUB -r TS             # 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 TS                     # 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 = 20:00:00
34#-Q- sx8brodie # Nom du travail LoadLeveler
35#-Q- sx8brodie # @ job_name   = TS
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 ; $RebuildFrequency ; $DateBegin ; $PeriodDateBegin ; $PeriodDateEnd ; $NbRebuildDir ; $StandAlone ; $CompletedFlag ; $TsTask ; $CompToRead ; $FlagToRead ; $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 = 20:00:00
50#-Q- aix6 # Nom du travail LoadLeveler
51#-Q- aix6 # @ job_name   = TS
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 ; $RebuildFrequency ; $DateBegin ; $PeriodDateBegin ; $PeriodDateEnd ; $NbRebuildDir ; $StandAlone ; $CompletedFlag ; $TsTask ; $CompToRead ; $FlagToRead ; $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 = 20:00:00
66#-Q- ulam # Nom du travail LoadLeveler
67#-Q- ulam # @ job_name   = TS
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 ; $RebuildFrequency ; $DateBegin ; $PeriodDateBegin ; $PeriodDateEnd ; $NbRebuildDir ; $StandAlone ; $CompletedFlag ; $TsTask ; $CompToRead ; $FlagToRead ; $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 TS                   # 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=24:00:00   # Limite temps a 2 heures
85#-Q- sx8mercure #PBS -q scalaire
86#-Q- sx9mercure #!/bin/ksh
87#-Q- sx9mercure ######################
88#-Q- sx9mercure ## SX9MERCURE  CCRT ##
89#-Q- sx9mercure ######################
90#-Q- sx9mercure #PBS -N TS                   # Nom du job
91#-Q- sx9mercure #PBS -j o                    # regroupement des stdout et stderr
92#-Q- sx9mercure #PBS -S /usr/bin/ksh         # shell de soumission
93#-Q- sx9mercure #PBS -l memsz_job=1gb        # Limite memoire a 1 Go
94#-Q- sx9mercure #PBS -l elapstim_req=24:00:00   # Limite temps a 2 heures
95#-Q- sx9mercure #PBS -q scalaire
96#-Q- titane #!/bin/ksh
97#-Q- titane ######################
98#-Q- titane ## TITANE   CEA ##
99#-Q- titane ######################
100#-Q- titane #MSUB -r TS             # 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 TS
109#-Q- lxiv8 #PBS -m a
110#-Q- lxiv8 #PBS -j oe
111#-Q- lxiv8 #PBS -q medium
112#-Q- lxiv8 #PBS -o TS.$$
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 allready produced time series. Empty if you start from the beginning
154#D- Default : Value from AA_job if any. Usefull in StandAlone case if you want to continue a time series
155CompletedFlag=${CompletedFlag:=}
156
157#D- Flag to determine task type this script will perform.
158#D- Possible Value : 2D, 3D, Chunck2D, Chunck3D
159#D- Default : Value from AA_job if any. Usefull in StandAlone case.
160TsTask=${TsTask:=2D}
161if [ X${TsTask} = Xempty ] ; then
162    TsTask=""
163fi
164
165#D- Flag to determine if rebuild process has been performed asynchronously
166#D- Possible value true or false.
167#D- If true raw files has allready been patched by rebuild job
168#D- If false create_ts will patch the raw files
169#D- Default : Value from AA_job if any. Usefull in StandAlone case.
170RebuildFrequency=${RebuildFrequency:=true}
171
172#D- Flag to determine job's output directory
173#D- Default : value from libIGCM_post.ksh if any
174POST_DIR=${POST_DIR:=${PBS_O_WORKDIR:=$(pwd)}}
175
176#D- Increased verbosity (1, 2, 3)
177#D- Default : value from AA_job if any
178Verbosity=${Verbosity:=3}
179
180#D- Low level debug : to bypass lib test checks and stack construction
181#D- Default : value from AA_job if any
182DEBUG_debug=${DEBUG_debug:=false}
183
184#D- TEMPORARY Flag to determine atmospheric resolution
185#D- Default : value from atmospheric driver if any
186RESOL_ATM=ALL
187
188#D- Flag to determine surface resolution
189#D- Default : value from surface driver if any
190RESOL_SRF=ALL
191
192#D- Flag to determine surface resolution
193#D- Default : value from surface driver if any
194RESOL_SBG=ALL
195
196#D- TEMPORARY Flag to determine ocean resolution
197#D- Default : value from ocean driver if any
198RESOL_OCE=${RESOL_OCE:=ORCA2}
199
200#D- TEMPORARY Flag to determine ice resolution
201#D- Default : value from ice driver if any
202RESOL_ICE=${RESOL_ICE:=ORCA2}
203
204#D- TEMPORARY Flag to determine marine biogeochemistry resolution
205#D- Default : value from ice driver if any
206RESOL_MBG=${RESOL_MBG:=ORCA2}
207
208########################################################################
209
210. ${libIGCM}/libIGCM_debug/libIGCM_debug.ksh
211      ( ${DEBUG_debug} ) && IGCM_debug_Check
212. ${libIGCM}/libIGCM_card/libIGCM_card.ksh
213     ( ${DEBUG_debug} ) && IGCM_card_Check
214. ${libIGCM}/libIGCM_date/libIGCM_date.ksh
215     ( ${DEBUG_debug} ) && IGCM_date_Check
216#-------
217. ${libIGCM}/libIGCM_sys/libIGCM_sys.ksh
218
219########################################################################
220
221#set -vx
222
223# Useful cleaning function
224MENAGE () 
225{
226    [ -f $3 ] && ( IGCM_sys_RshArchive rm -f $1/$2 ;)
227}
228
229########################################################################
230
231IGCM_sys_MkdirWork ${RUN_DIR_PATH}
232IGCM_sys_Cd ${RUN_DIR_PATH}
233
234# ------------------------------------------------------------------
235# Test if all was right before proceeding further
236# ------------------------------------------------------------------
237IGCM_debug_Verif_Exit_Post
238
239if [ ${StandAlone} = true ] ; then
240    CARD_DIR=${SUBMIT_DIR}
241else
242    CARD_DIR=${RUN_DIR_PATH}/$( basename ${SUBMIT_DIR} )
243    IGCM_sys_Get_Master ${SUBMIT_DIR} ${RUN_DIR_PATH}
244fi
245
246#==================================
247# First of all
248#
249typeset option
250
251#==================================
252# Read UserChoices section:
253IGCM_card_DefineArrayFromSection       ${CARD_DIR}/config.card UserChoices
254echo
255IGCM_debug_Print 1 "DefineArrayFromOption  : config_UserChoices"
256for option in ${config_UserChoices[*]} ; do
257    IGCM_card_DefineVariableFromOption ${CARD_DIR}/config.card UserChoices ${option}
258    eval auxprint=\${config_UserChoices_${option}}
259    IGCM_debug_Print 3 "${option} : ${auxprint}"
260done
261#
262echo
263
264#==================================
265# Read Post section:
266IGCM_card_DefineArrayFromSection ${CARD_DIR}/config.card Post
267echo
268IGCM_debug_Print 1 "DefineArrayFromOption : config_Post"
269for option in ${config_Post[*]} ; do
270  IGCM_card_DefineVariableFromOption ${CARD_DIR}/config.card Post ${option}
271  eval auxprint=\${config_Post_${option}}
272  IGCM_debug_Print 3 "${option} : ${auxprint}"
273done
274#
275echo
276
277#==================================
278# Define default value to keep compatibility with previous card: means before changes due to TGCC
279[ X${config_Post_PackFrequency} = X ] && config_Post_PackFrequency=${config_Post_RebuildFrequency}
280
281#==================================
282# If pack is active then PackFrequency overule the config_UserChoices_PeriodLength
283if ( [ ! X${config_Post_PackFrequency} = X${NULL_STR} ] && [ ! X${config_Post_PackFrequency} = XNONE ] ) ; then
284  config_UserChoices_PeriodLength=${config_Post_PackFrequency}
285fi
286
287#==================================
288#R_SAVE : Job output directory
289#R_BUFR : Job output buffered directory
290if ( [ ! X${config_UserChoices_SpaceName} = X ] && [ ! X${config_UserChoices_ExperimentName} = X ] ) ; then
291    FreeName=$( echo ${config_UserChoices_JobName} | sed 's/.*_//' )
292    R_SAVE=${R_OUT}/${config_UserChoices_TagName}/${config_UserChoices_SpaceName}/${config_UserChoices_ExperimentName}/${FreeName}
293    R_BUFR=${R_BUF}/${config_UserChoices_TagName}/${config_UserChoices_SpaceName}/${config_UserChoices_ExperimentName}/${FreeName}
294    R_DODS=${config_UserChoices_TagName}/${config_UserChoices_SpaceName}/${config_UserChoices_ExperimentName}/${FreeName}
295else
296    R_SAVE=${R_OUT}/${config_UserChoices_TagName}/${config_UserChoices_JobName}
297    R_BUFR=${R_BUF}/${config_UserChoices_TagName}/${config_UserChoices_JobName}
298    R_DODS=${config_UserChoices_TagName}/${config_UserChoices_JobName}
299fi
300#
301# Determine component to take care of depending on kind of task create_ts will perform
302#
303[ ${CompToRead} ] && set -A config_ListOfComponents ${CompToRead} || IGCM_card_DefineArrayFromSection ${CARD_DIR}/config.card ListOfComponents
304#
305# Determine period for time series. Default : value from AA_job or from launch_TS if any
306#
307[ X${CompletedFlag} = X ] || CompletedFlag=$( IGCM_date_ConvertFormatToGregorian ${CompletedFlag} )
308
309DateBegin=${DateBegin:=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateBegin} )}
310#
311PeriodDateEnd=${PeriodDateEnd:=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateEnd} )}
312#
313# Determine Dimension of the produced time series : 2D or 3D
314if (   [ X${TsTask} = XChunck2D ] || [ X${TsTask} = X2D ] ) ; then
315    Dimension=2D
316elif ( [ X${TsTask} = XChunck3D ] || [ X${TsTask} = X3D ] ) ; then
317    Dimension=3D
318else
319    Dimension=""
320fi
321
322# ------------------------------------------------------------------
323#D- Test if all was right before entering the loop
324# ------------------------------------------------------------------
325IGCM_debug_Verif_Exit_Post
326
327########################################################################
328#
329#      Depending on requested time series fill following variables :
330#
331#                           - LISTE_FILE_${comp}[*]
332#                           - LISTE_VARS_${file}[*]
333#                           - LISTE_AXIS_${file}[*]
334#                           - LISTE_PATCH_${file}[*]
335########################################################################
336
337#
338# For each selected component determine which files need post-processing
339#
340DoJob=false
341for comp in ${config_ListOfComponents[*]} ; do
342    #
343    ActiveComp=false
344    #
345    IGCM_card_DefineArrayFromOption ${CARD_DIR}/config.card ListOfComponents ${comp}
346    eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1
347    #
348    card=${CARD_DIR}/COMP/${compname}.card
349
350    IGCM_card_DefineArrayFromOption ${card} OutputFiles List
351    #
352    ListFilesName=${compname}_OutputFiles_List
353    eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1
354    #
355    if [ X${FileName0} != X${NULL_STR} ] ; then
356        #
357        #IGCM_debug_Print 1 "Component      : ${compname}"
358        #
359        # INITIALISATION
360        #
361        typeset i
362        if [ ${FlagToRead} ] ; then
363            ((NbFiles=${FlagToRead}))
364            ((i=${NbFiles}))
365        else
366            eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1
367            i=2
368        fi
369        #
370        until [ $i -gt $NbFiles ]; do
371            #
372            eval flag_post=\${${ListFilesName}[$i]} > /dev/null 2>&1
373            #
374            if [ X${flag_post} != XNONE ] ; then
375                #
376                # For each comp and each file who needs post-processing
377                # determine which variables need time series.
378                #
379                FILE=$( echo ${flag_post} | awk "-FPost_" '{print $2}' )
380                IGCM_card_DefineArrayFromOption ${card}    Post_${FILE} TimeSeriesVars${Dimension}
381                IGCM_card_DefineVariableFromOption ${card} Post_${FILE} ChunckJob${Dimension}
382                #
383                # If TimeSeriesVars list is empty we skip
384                #
385                if [ $( eval echo \${${compname}_Post_${FILE}_TimeSeriesVars${Dimension}} ) = ${NULL_STR} ] ; then
386                    #
387                    IGCM_debug_Print 3 "Nothing to do for ${FILE} according to ${card}"
388                    IGCM_debug_Print 3 "TimeSeriesVars${Dimension} for ${FILE} is empty"
389                    (( i=i+3 ))
390                    continue
391                    #
392                fi
393                #
394                # If files/variables has been switch off by ChunckJob${Dimension}=0 we skip
395                #
396                if [ X$( eval echo \${${compname}_Post_${FILE}_ChunckJob${Dimension}} ) = XOFF ] ; then
397                    IGCM_debug_Print 3 "Nothing to do for ${FILE} according to ${card}"
398                    IGCM_debug_Print 3 "ChunckJob${Dimension}=OFF for ${FILE} so it has been switched off"
399                    (( i=i+3 ))
400                    continue
401                fi
402                #
403                # If we are not a Chunck type task, we skip files/variables handled by chunck task
404                #
405                if ( [ ! X${TsTask} = XChunck${Dimension} ] && [ ! X${TsTask} = X ] && [ ! XChunck${Dimension} = XChunck ] ) ; then
406                    if [ ! $( eval echo \${${compname}_Post_${FILE}_ChunckJob${Dimension}} ) = NONE ] ; then
407                        IGCM_debug_Print 3 "Nothing to do for ${FILE} TimeSeriesVars${Dimension} according to ${card}"
408                        IGCM_debug_Print 3 "Let another chunck task do the job $( eval echo \${${compname}_Post_${FILE}_ChunckJob${Dimension}} )"
409                        (( i=i+3 ))
410                        continue
411                    fi
412                fi
413                #
414                # Now on we know we have things to do
415                #
416
417                #
418                #  We need coordinates axis to properly fill produced time series
419                #
420                IGCM_card_DefineArrayFromOption ${card} Post_${FILE} GatherWithInternal
421                #
422                if [ $( eval echo \${${compname}_Post_${FILE}_GatherWithInternal} ) = ${NULL_STR} ] ; then
423                    #
424                    IGCM_debug_Print 1 "ERROR !! We miss coordinate axis for ${FILE} according to ${card}"
425                    IGCM_debug_Print 1 "So no time series will be produced for ${FILE} !!"
426                    (( i=i+3 ))
427                    continue
428                    #
429                fi
430                #
431                # We need LIST of variables not allready produced (useful for standalone mode)
432                #
433                FlagDir=$( echo ${FILE} | awk -F "_" '{print $1}' )
434                case ${FlagDir} in
435                    *Y)  TS_Dir=TS_YE  ;;
436                    *M)  TS_Dir=TS_MO  ;;
437                    *D)  TS_Dir=TS_DA  ;;
438                    HF)  TS_Dir=TS_HF  ;;
439                    3H)  TS_Dir=TS_HF  ;;
440                    INS) TS_Dir=TS_INS ;;
441                esac
442                #
443                count=0
444                for var in $( eval echo \${${compname}_Post_${FILE}_TimeSeriesVars${Dimension}[*]} ) ; do
445                    #
446                    DIRECTORY=${R_SAVE}/${comp}/Analyse/${TS_Dir}
447                    TestedFile=${config_UserChoices_JobName}_${DateBegin}_${PeriodDateEnd}_${FlagDir}_${var}.nc
448                    #
449                    IGCM_sys_TestFileArchive ${DIRECTORY}/${TestedFile}
450                    if [ ! $? = 0 ] ; then
451                        eval set +A LISTE_VARS_${FILE} \${LISTE_VARS_${FILE}[*]} ${var}
452                        ActiveComp=true
453                        (( count = count + 1 ))
454                    fi
455                done
456                #
457                if [ ${count} -gt 0 ] ; then
458                    #
459                    eval set +A LISTE_FILE_${comp} \${LISTE_FILE_${comp}[*]} ${FILE}
460                    eval set +A LISTE_AXIS_${FILE} \${${compname}_Post_${FILE}_GatherWithInternal[*]}
461                    #
462                    if [ ! X${RebuildFrequency} = Xtrue ] ; then
463                        IGCM_card_DefineArrayFromOption ${card} Post_${FILE} Patches
464                        eval set +A LISTE_PATCHES_${FILE} \${${compname}_Post_${FILE}_Patches[*]}
465                        if [ X$( eval echo \${LISTE_PATCHES_${FILE}[0]} ) !=  X${NULL_STR} ]; then
466                            for Patch in $( eval echo \${LISTE_PATCHES_${FILE}[*]} ); do
467                                if [ Xload${Patch} != X ] ; then
468                                    . ${libIGCM}/libIGCM_post/IGCM_${Patch}.ksh
469                                    eval load${Patch}=loaded
470                                fi
471                            done
472                        fi
473                    fi
474                fi
475            fi
476            (( i=i+3 ))
477        done
478    fi
479    #
480    if [ ${ActiveComp} = true ] ; then
481        set +A ActiveListOfComponents ${ActiveListOfComponents[*]} ${comp}
482    fi
483done
484
485set -A config_ListOfComponents ${ActiveListOfComponents[*]}
486[ ! -z "${ActiveListOfComponents}" ] && DoJob=true
487
488########################################################################
489#
490#               IS THERE SOME ALLREADY PRODUCED TIME SERIES ?
491#                 IF SO BRING THEM IN THE WORKING DIRECTORY
492#
493# PS : Keep in mind that IGCM_sys_Get here is a weak link :
494#      - especially for IDRiS
495#      - no special protection against "command too long" !
496#      - libIGCM_sys should handle that or modify following code part
497#
498########################################################################
499
500if [ ${StandAlone} != true ] ; then
501    Running_Flag=$( IGCM_sys_RshMaster "IGCM_card_DefineVariableFromOption \
502       ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesRunning ; \
503       echo \${run_PostProcessing_TimeSeriesRunning}" )
504
505    #if [ X${Running_Flag} = Xy ] ; then
506    #    # Time Series Job allready running
507    #   IGCM_debug_Print 1 "Time Series Job allready running exit"
508    #   exit
509    #fi
510    # Now run.card know we are running
511
512
513
514
515    IGCM_sys_RshMaster IGCM_card_WriteOption ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesRunning "y"
516
517
518
519
520
521    # Get information from last execution
522    #CompletedFlag=$( IGCM_sys_RshMaster \
523    #   "IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesCompleted ;\
524    #        echo \${run_PostProcessing_TimeSeriesCompleted}" )
525fi
526
527# Is it the first submission or not ?
528
529if ( [ X${CompletedFlag} = X ] || [ X${CompletedFlag} = X$( IGCM_date_AddDaysToGregorianDate ${DateBegin} -1 ) ] ) ; then
530    # First Time Series Submission
531    FIRST_PASS=TRUE
532    Length=$( IGCM_date_DaysInPreviousPeriod ${DateBegin} ${config_UserChoices_PeriodLength} begin)
533    DATE_FIN_JOB_B=$( IGCM_date_AddDaysToGregorianDate ${DateBegin} $(( Length - 1 )) )
534else
535    # Last Completed Time Series
536    FIRST_PASS=FALSE
537    DATE_FIN_JOB_B=${CompletedFlag}
538    date=${DateBegin}_${DATE_FIN_JOB_B}
539    for comp in ${config_ListOfComponents[*]} ; do
540        #
541        IGCM_sys_Mkdir ${RUN_DIR_PATH}/${comp}
542        #
543        IGCM_sys_Cd ${RUN_DIR_PATH}/${comp}
544        #
545        #set -A liste_file
546        unset liste_file
547        #
548        file_path=${R_SAVE}/${comp}/Analyse
549        #
550        i=0
551        file=${NULL_STR}
552        #
553        for file in $( eval echo \${LISTE_FILE_${comp}[*]} ); do
554            #
555            # Determine in which output can we find file
556            # IE : Analyse/TS or Analyse/DA2TS or ...
557            #
558            FlagDir=$( echo ${file} | awk -F "_" '{print $1}' )
559            case ${FlagDir} in
560                *Y)  TS_Dir=TS_YE  ;;
561                *M)  TS_Dir=TS_MO  ;;
562                *D)  TS_Dir=TS_DA  ;;
563                HF)  TS_Dir=TS_HF  ;;
564                3H)  TS_Dir=TS_HF  ;;
565                INS) TS_Dir=TS_INS ;;
566            esac
567            for var in $( eval echo \${LISTE_VARS_${file}[*]} ) ; do
568                #
569                #set +A liste_file ${liste_file[*]} ${file_path}/${TS_Dir}/${config_UserChoices_JobName}_${date}_${FlagDir}_${var}.nc
570                liste_file[${#liste_file[*]}]=${file_path}/${TS_Dir}/${config_UserChoices_JobName}_${date}_${FlagDir}_${var}.nc
571                #
572            done
573        done
574        if [ X${file} != X${NULL_STR} ] ; then
575            IGCM_sys_Get /l liste_file[*] ${RUN_DIR_PATH}/${comp}
576            # Even if some files are missing we tried to continue
577            # Either ListVar in compname.card are asked but not present in original history file
578            # Either a previous TS task failed
579            ExitFlag=false
580            IGCM_debug_Verif_Exit_Post
581        fi
582    done
583    #
584    LEVEL=0
585    #
586fi
587
588########################################################################
589#
590#                          DEFINE LOOP PARAMETERS
591#
592########################################################################
593
594DATE_COUNT=${DATE_FIN_JOB_B}
595DATE_FIN_JOB_B_LOOP=${DATE_FIN_JOB_B}
596
597( [ -n "${LEVEL}" ] && [ ${LEVEL} -eq 0 ] ) && NBRE_FILE_TOT=0 || NBRE_FILE_TOT=1
598
599if [ ${DoJob} = true ] ; then
600    while [ ${DATE_COUNT} -lt ${PeriodDateEnd} ] ; do
601        (( NBRE_FILE_TOT = NBRE_FILE_TOT + 1 ))
602        Length=$( IGCM_date_DaysInNextPeriod ${DATE_COUNT} ${config_UserChoices_PeriodLength} )
603        DATE_COUNT=$( IGCM_date_AddDaysToGregorianDate ${DATE_COUNT} ${Length} )
604    done
605else
606    NBRE_FILE_TOT=0
607fi
608
609if [ ${NBRE_FILE_TOT} -le ${UNIX_MAX_LIMIT} ] ; then
610    NBRE_TOUR=1
611elif [ ${NBRE_FILE_TOT}%${UNIX_MAX_LIMIT} -eq 0 ] ; then
612    let NBRE_TOUR=${NBRE_FILE_TOT}/${UNIX_MAX_LIMIT} 
613else
614    let NBRE_TOUR=${NBRE_FILE_TOT}/${UNIX_MAX_LIMIT}+1
615fi
616
617CURRENT_LOOP=1
618# THIS LOOP GIVES PARAMETERS FOR THE DATE'S LOOP ie : DATE_COURANTE, DATE_FIN.
619# WE HAVE 3 LEVELS
620#    - LEVEL 1 : JUST ONE LOOP TO COMPLETE
621#    - LEVEL 2 : WE ARE IN THE "DEEP" LOOP
622#    - LEVEL 3 : WE ARE IN THE LAST LOOP
623
624while [ ${CURRENT_LOOP} -le  ${NBRE_TOUR} ] ; do
625     
626    if [ ${NBRE_FILE_TOT} -le ${UNIX_MAX_LIMIT} ] ; then 
627        # - LEVEL 1 : JUST ONE LOOP TO COMPLETE
628        NBRE_FILE_LOOP=${NBRE_FILE_TOT}
629
630        if [ ${FIRST_PASS} = TRUE ] ; then
631            DATE_COURANTE=${DATE_FIN_JOB_B_LOOP}
632        else
633            Length=$( IGCM_date_DaysInNextPeriod ${DATE_FIN_JOB_B_LOOP} ${config_UserChoices_PeriodLength} )
634            DATE_COURANTE=$( IGCM_date_AddDaysToGregorianDate ${DATE_FIN_JOB_B_LOOP} ${Length} )
635        fi
636
637        DATE_FIN=${PeriodDateEnd}
638        DATE_FIN_JOB_B_LOOP_PREC=${DATE_FIN_JOB_B_LOOP}
639
640        [ -n "${DATE_LOOP}" ] && DATE_FIN_JOB_B_LOOP=${DATE_LOOP}
641        [ -n "${LEVEL}" ] && FLAG_B="TRUE" || FLAG_B="FALSE"
642
643        LEVEL=1
644        DEPOT="TRUE"     
645    elif [ ${CURRENT_LOOP} -ne  ${NBRE_TOUR} ] ; then
646        # - LEVEL 2 : WE ARE IN THE "DEEP" LOOP
647        NBRE_FILE_LOOP=${UNIX_MAX_LIMIT}
648
649        if [ ! ${FIRST_PASS} = TRUE ] && [ ${CURRENT_LOOP} -eq 1 ] ; then
650            Length=$( IGCM_date_DaysInNextPeriod ${DATE_FIN_JOB_B_LOOP} ${config_UserChoices_PeriodLength} )
651            DATE_COURANTE=$( IGCM_date_AddDaysToGregorianDate ${DATE_FIN_JOB_B_LOOP} ${Length} )
652        elif [ -z "${DATE_COURANTE}" ] ; then
653            DATE_COURANTE=${DATE_FIN_JOB_B}
654        else
655            Length=$( IGCM_date_DaysInNextPeriod ${DATE_FIN} ${config_UserChoices_PeriodLength} )
656            DATE_COURANTE=$( IGCM_date_AddDaysToGregorianDate ${DATE_FIN} ${Length} )
657        fi
658         
659        (( TotLength = 0 ))
660        COMPTEUR=1
661        DATE_LOOP=${DATE_COURANTE}
662
663        while [ ${COMPTEUR} -lt ${NBRE_FILE_LOOP} ] ; do
664            #
665            Length=$( IGCM_date_DaysInNextPeriod ${DATE_LOOP} ${config_UserChoices_PeriodLength} )
666            DATE_LOOP=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} ${Length} )
667            (( TotLength = TotLength + Length ))
668            (( COMPTEUR = COMPTEUR + 1 ))
669            #
670        done # while [ ${COMPTEUR} -le ${NBRE_FILE_LOOP} ] done
671        DATE_FIN=$( IGCM_date_AddDaysToGregorianDate ${DATE_COURANTE} ${TotLength} )
672
673        [ -n "${DATE_LOOP}" ] && DATE_FIN_JOB_B_LOOP_PREC=${DATE_FIN_JOB_B_LOOP} ; DATE_FIN_JOB_B_LOOP=${DATE_LOOP}
674        [ -n "${LEVEL}" ] && [ ${LEVEL} -eq 0 ] && FLAG_B="TRUE" || [ ${CURRENT_LOOP} -gt 1 ] && FLAG_B="TRUE" || FLAG_B="FALSE"
675        DEPOT="FALSE"
676        LEVEL=2
677    else
678        # - LEVEL 3 : WE ARE IN THE LAST LOOP
679        NBRE_FILE_LOOP=$(( ${NBRE_FILE_TOT} % ( ${UNIX_MAX_LIMIT} * ( ${CURRENT_LOOP} - 1 ) ) ))
680        [ ${NBRE_FILE_LOOP} -eq 0 ] && NBRE_FILE_LOOP=${UNIX_MAX_LIMIT}
681
682        Length=$( IGCM_date_DaysInNextPeriod ${DATE_FIN} ${config_UserChoices_PeriodLength} )
683        DATE_COURANTE=$(IGCM_date_AddDaysToGregorianDate ${DATE_FIN} ${Length} )
684        DATE_FIN=${PeriodDateEnd}
685        [ -n "${DATE_LOOP}" ] && DATE_FIN_JOB_B_LOOP_PREC=${DATE_FIN_JOB_B_LOOP} ; DATE_FIN_JOB_B_LOOP=${DATE_LOOP}
686
687        LEVEL=3
688        DEPOT="TRUE"
689        FLAG_B="TRUE"
690    fi
691
692    # THEN FOR EACH FILE TYPE WE LOOP BETWEEN DATE_COURANTE AND DATE_FIN.
693    for comp in ${config_ListOfComponents[*]} ; do
694        #
695        IGCM_sys_Mkdir ${RUN_DIR_PATH}/${comp}
696        #
697        IGCM_sys_Cd ${RUN_DIR_PATH}/${comp}
698        #
699        eval R_OUT_${comp}=${R_SAVE}/${comp}
700        #
701        i=0
702        #
703        for file in $( eval echo \${LISTE_FILE_${comp}[*]} ); do
704            #
705            # Determine in which output can we find file
706            # IE : Output/MO or Output/DA or ...
707            #
708            FlagDir=$( echo ${file} | awk -F "_" '{print $1}' )
709            case ${FlagDir} in
710                *Y)    TS_Dir=TS_YE  ; FreqDir=YE  ;;
711                *M)    TS_Dir=TS_MO  ; FreqDir=MO  ;;
712                *D)    TS_Dir=TS_DA  ; FreqDir=DA  ;;
713                HF)    TS_Dir=TS_HF  ; FreqDir=HF  ;;
714                3H)    TS_Dir=TS_HF  ; FreqDir=HF  ;;
715                INS)   TS_Dir=TS_INS ; FreqDir=INS ;;
716                *) 
717                       IGCM_debug_Print 1 "Error in FlagDir=${FlagDir} for file ${file}."
718                       IGCM_sys_Exit "Job create_ts" ;;
719            esac
720
721            # Initialize array
722            #set -A liste_file
723            #set -A liste_file_tmp
724            unset liste_file
725            unset liste_file_tmp
726            eval file_path=\${R_OUT_${comp}}/Output/${FreqDir}/
727
728            COMPTEUR=1
729            DATE_LOOP=${DATE_COURANTE}
730
731            while [ ${COMPTEUR} -le ${NBRE_FILE_LOOP} ] ; do
732                #
733                Length1=$( IGCM_date_DaysInPreviousPeriod ${DATE_LOOP} ${config_UserChoices_PeriodLength} end)
734                DATE_TAB=$(  IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} $(( 1 - Length1 )) )_${DATE_LOOP}
735
736                Length2=$( IGCM_date_DaysInNextPeriod ${DATE_LOOP} ${config_UserChoices_PeriodLength} )
737                DATE_LOOP=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} ${Length2} )
738
739                #set +A liste_file ${liste_file[*]} ${file_path}${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc
740                #set +A liste_file_tmp ${liste_file_tmp[*]} ${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc
741                liste_file[${#liste_file[*]}]=${file_path}${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc
742                liste_file_tmp[${#liste_file_tmp[*]}]=${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc
743                (( COMPTEUR = COMPTEUR + 1 ))
744                #
745            done # while [ ${COMPTEUR} -le ${NBRE_FILE_LOOP} ] done
746            DATE_LOOP=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} -${Length2} )
747
748            # Get selected files
749            IGCM_sys_Get /l liste_file[*] ${RUN_DIR_PATH}/${comp}
750            IGCM_debug_Verif_Exit_Post
751
752            # Apply IGCM_Patch if needed
753            if [ ! X${RebuildFrequency} = Xtrue ] ; then
754                if [ X$( eval echo \${LISTE_PATCHES_${file}[0]} ) !=  X${NULL_STR} ]; then
755                    for file_t in $( eval echo ${liste_file_tmp[*]} ); do               
756                        for Patch in $( eval echo \${LISTE_PATCHES_${file}[*]} ); do
757                            IGCM_${Patch} ${file_t}
758                            IGCM_debug_Verif_Exit_Post
759                        done
760                    done
761                fi
762            fi
763
764            # WE CAN CONCATENATE FILES AT THIS POINT
765            [ "${FLAG_B}" = "TRUE" ] && DATE_BUILD_B=${DateBegin}_${DATE_FIN_JOB_B_LOOP_PREC}
766            Length=$( IGCM_date_DaysInPreviousPeriod ${DATE_COURANTE} ${config_UserChoices_PeriodLength} end)
767            DATE_BUILD1=$( IGCM_date_AddDaysToGregorianDate ${DATE_COURANTE} -$(( Length - 1 )) )
768            DATE_BUILD=${DATE_BUILD1}_${DATE_FIN}
769            DATE_BUILD_END=${DateBegin}_${DATE_FIN}
770
771            liste_coord=" "
772            for axis in $( eval echo \${LISTE_AXIS_${file}[*]} ); do
773              liste_coord=${liste_coord}${axis}","
774            done
775
776            # Time axis must be the last dimension
777            time_axis=${axis}
778
779            # SWITCH BETWEEN MODEL TO FIT PARTICULAR CASE
780            for var in $( eval echo \${LISTE_VARS_${file}[*]} ) ; do
781                #
782                if [ "${FLAG_B}" = "TRUE" ] ; then
783                    # WE CONCATENATE WITH EXISTING FILES
784                    file1=${config_UserChoices_JobName}_${DATE_BUILD_B}_${FlagDir}_${var}.nc
785                    file_out=${config_UserChoices_JobName}_${DATE_BUILD_END}_${FlagDir}_${var}.nc
786                    IGCM_sys_ncrcat --hst -v ${liste_coord}${var} ${file1} ${liste_file_tmp[*]} ${file_out}
787                    #
788                    IGCM_sys_Rm ${file1}
789                    if [ ! "${DEPOT}" = "TRUE" ] ; then
790                        eval IGCM_sys_Put_Out ${file_out} \${R_OUT_${comp}}/Analyse/${TS_Dir}/${file_out}
791                        # "${file1} = file_before ?
792                        [ ! "${file1}" = "${config_UserChoices_JobName}_${DateBegin}_${DATE_FIN_JOB_B}_${FlagDir}_${var}.nc" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/${TS_Dir} ${file1} ${file_out}
793                    fi
794
795                    ExitFlag=false
796                else
797                    # OR NOT
798                    IGCM_sys_ncrcat --hst -v ${liste_coord}${var} ${liste_file_tmp[*]} ${config_UserChoices_JobName}_${DATE_BUILD}_${FlagDir}_${var}.nc
799                fi
800
801                #
802                if [ "${DEPOT}" = "TRUE" ] ; then
803                    # WE PUT FINAL FILE ON FILE SYSTEM
804                    [ "${FLAG_B}" = "FALSE" ] && file_out=${config_UserChoices_JobName}_${DATE_BUILD}_${FlagDir}_${var}.nc
805                    file_before=${config_UserChoices_JobName}_${DateBegin}_${DATE_FIN_JOB_B}_${FlagDir}_${var}.nc
806                    #
807                    eval IGCM_sys_Put_Out ${file_out} \${R_OUT_${comp}}/Analyse/${TS_Dir}/${file_out}
808                    [ "${FLAG_B}" = "TRUE" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/${TS_Dir} ${file_before} ${file_out}
809                    if [ ! "X${file1}" = "X" ] ; then
810                        [ ! "${file1}" = "${config_UserChoices_JobName}_${DateBegin}_${DATE_FIN_JOB_B}_${FlagDir}_${var}.nc" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/${TS_Dir} ${file1} ${file_out}
811                    fi
812                    #
813                    if ( [ ${FlagDir} = "1M" ] && [ -f ${file_out} ] ) ; then
814                        file_before_YE=${config_UserChoices_JobName}_${DateBegin}_${DATE_FIN_JOB_B}_1Y_${var}.nc
815                        file_out_YE=${config_UserChoices_JobName}_${DATE_BUILD_END}_1Y_${var}.nc
816                        #
817                        # Compute yearly average considering calendar
818                        # and set date of the mid year to 01/07 at 00:00
819                        IGCM_sys_cdo -settime,00:00 -setday,1 -setmon,7 -settunits,days -divdpy -yearsum -muldpm -selvar,${var} ${file_out} ${file_out_YE}
820                        # Extract all ancillary variables except $var, they will be appended after the cdo command
821                        # Needed because cdo applies calculs on all variables
822                        IGCM_sys_ncks -Oh -x -v ${var} ${file_out} ${file_out_YE%%.nc}_tmp1.nc
823                        # This will remove the time axis because cdo rewrites severely with only considered useful variables
824                        IGCM_sys_cdo -mulc,1 ${file_out_YE%%.nc}_tmp1.nc ${file_out_YE%%.nc}_tmp2.nc 2>/dev/null
825                        if [ $? -eq 0 ] ; then
826                                # Now append all ancillary variables if previous cdo operator ok
827                                IGCM_sys_ncks -h -A ${file_out_YE%%.nc}_tmp2.nc ${file_out_YE}
828                        fi
829
830                        # Put global history attribut
831                        IGCM_sys_ncatted -Oh -a history,global,o,c,"build by libIGCM/create_ts" ${file_out_YE}
832                        #
833                        eval IGCM_sys_Put_Out ${file_out_YE} \${R_OUT_${comp}}/Analyse/TS_MO_YE/${file_out_YE}
834                        [ "${FLAG_B}" = "TRUE" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/TS_MO_YE/ ${file_before_YE} ${file_out_YE}
835                        IGCM_sys_Rm ${file_out_YE%%.nc}_tmp*.nc
836                    fi
837                    #
838                    IGCM_sys_Rm ${file_out}
839                    ExitFlag=false
840                    #
841                fi
842                #
843            done     # for var in ${liste_var} ; do
844            IGCM_sys_Rm ${liste_file_tmp[*]}
845        done         # for file in ${liste_file_brut} do
846    done             # for comp in ${config_ListOfComponents[*]} ; do
847    # GO AHEAD IN DEEPEST LOOP
848    (( CURRENT_LOOP = CURRENT_LOOP + 1 ))
849done                 # while [ ${CURRENT_LOOP} -le  ${NBRE_TOUR} ] do
850# FINISH
851
852# DODS copy
853for comp in ${config_ListOfComponents[*]} ; do
854    for TS_Dir in TS_YE TS_MO TS_MO_YE TS_DA TS_HF TS_INS ; do
855        IGCM_sys_TestDirArchive ${R_SAVE}/${comp}/Analyse/${TS_Dir}
856        [ $? = 0 ] && IGCM_sys_Put_Dods ${comp}/Analyse/${TS_Dir}
857    done
858done
859
860export POST_DIR; export SUBMIT_DIR; export libIGCM; export R_INIT; export R_BC; export StandAlone
861export RESOL_ATM; export RESOL_OCE ; export RESOL_ICE ; export RESOL_MBG ; export RESOL_SRF ; export RESOL_SBG
862
863listVarEnv="POST_DIR,SUBMIT_DIR,libIGCM,R_INIT,R_BC,StandAlone,RESOL_ATM,RESOL_OCE,RESOL_ICE,RESOL_MBG,RESOL_SRF,RESOL_SBG"
864export listVarEnv
865
866#D-
867# --------------------------------------------------------------------
868#D- Test if all was right
869# --------------------------------------------------------------------
870IGCM_debug_Verif_Exit_Post
871# --------------------------------------------------------------------
872#D- Submit MONITORING
873# --------------------------------------------------------------------
874if ( [ X${TsTask} = X2D ] || [ X${TsTask} = X3D ] || [ X${TsTask} = X ] ) ; then
875    Script_Post_Output=monitoring.${PeriodDateEnd}
876    IGCM_sys_QsubPost monitoring
877fi
878
879#D-
880# --------------------------------------------------------------------
881#D- Update the run.card
882# --------------------------------------------------------------------
883if [ ${StandAlone} != true ] ; then
884    # Put in run.card end period of time series
885    [ X"${DATE_FIN}" = X ] || IGCM_sys_RshMaster IGCM_card_WriteOption ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesCompleted "${DATE_FIN}"
886    # We have finish the job !
887    IGCM_sys_RshMaster IGCM_card_WriteOption ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesRunning "n"
888fi
889
890# Clean RUN_DIR_PATH (necessary for cesium and titane only)
891IGCM_sys_RmRunDir -Rf ${RUN_DIR_PATH}
892
893date
Note: See TracBrowser for help on using the repository browser.