source: trunk/libIGCM/libIGCM_post/libIGCM_post.ksh @ 409

Last change on this file since 409 was 409, checked in by sdipsl, 13 years ago
  • correct bug with TS 3D without chunck see ticket #52
  • catch return code from all nco operator except ncrcat and exit if SpaceName? is PROD. clean error code handling. Special case for cdo command. see ticket #51
    • it means that if SpaceName?=PROD all must run absolutely perfectly ; otherwise libIGCM will stop.
  • For Smooth file, first access is always true for Period=1. Get Files when SmoothMin?<CumulPeriod?<SmoothMax? and modulo [min]:[modulo:][max] is true. see ticket #44
  • Under testing : do not use unless you are willing to help testing.
  • 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: 32.6 KB
Line 
1#!/bin/ksh
2
3#**************************************************************
4# Author: Sebastien Denvil
5# Contact: Sebastien.Denvil__at__ipsl.jussieu.fr
6# $Revision::                                          $ Revision of last commit
7# $Author::                                            $ Author of last commit
8# $Date::                                              $ Date of last commit
9# IPSL (2006)
10#  This software is governed by the CeCILL licence see libIGCM/libIGCM_CeCILL.LIC
11#
12#**************************************************************
13
14#=======================================================================
15
16function IGCM_post_Configure
17{
18    IGCM_debug_PushStack "IGCM_post_Configure"
19
20    # Debug Print :
21    echo
22    IGCM_debug_Print 1 "IGCM_post_Configure :"
23    echo
24    #
25    # Initialize
26    #
27    POST=false
28    RebuildFrequency=false
29    TimeSeriesFrequency=false
30    SeasonalFrequency=false
31    #
32    # ONLY IF SOMETHING NEEDS TO BE DONE (EATHER TIME SERIES OR SEASONAL) COMPUTE THE MODULOS
33    #
34    if [ X${AsynchronousRebuild} = Xtrue ] ; then
35        list_post="RebuildFrequency"
36    fi
37    #
38    if ( [ X${TimeSeries} = Xtrue ] || [ X${TimeSeries2D} = Xtrue ] || [ X${TimeSeries3D} = Xtrue ] ) ; then
39        list_post="${list_post} TimeSeriesFrequency"
40    fi
41    #
42    if [ X${Seasonal} = Xtrue ] ; then
43        list_post="${list_post} SeasonalFrequency"
44    fi
45
46    # Overrule special cases
47    if ( [ ! X${config_Post_TimeSeriesFrequency} = X${NULL_STR} ] && \
48         [ ! X${config_Post_TimeSeriesFrequency} = XNONE ]        && \
49         [ ${SimulationLengthInDays} -ge ${ExperienceLengthInDays} ] ) ; then
50        TimeSeriesFrequency=true
51        POST=true
52    fi
53    #
54    if ( [ ! X${config_Post_RebuildFrequency} = X${NULL_STR} ] && \
55         [ ! X${config_Post_RebuildFrequency} = XNONE ]        && \
56         [ ${SimulationLengthInDays} -ge ${ExperienceLengthInDays} ] ) ; then
57        RebuildFrequency=true
58        POST=true
59    fi
60
61    # READ REBUILD OR TIME SERIES OR SEASONAL FREQUENCY
62    # AND TURN ON THE SUBMISSION FLAG WHEN MODULO IS ZERO
63    for post_freq in ${list_post} ; do
64        # Extract frequency from previously defined variable
65        config_Post_post_freq=$( eval echo \${config_Post_${post_freq}} )
66        # Offset for Seasonal Average starting period
67        if [ ${post_freq} = SeasonalFrequency ] ; then
68            if ( [ X${config_Post_SeasonalFrequencyOffset} = X${NULL_STR} ] || [ X${config_Post_SeasonalFrequencyOffset} = XNONE ] || [ X${config_Post_SeasonalFrequencyOffset} = X ] ) ; then
69                PeriodOffset=0
70            else
71                PeriodOffset=${config_Post_SeasonalFrequencyOffset}
72            fi
73        else
74            PeriodOffset=0
75        fi
76        # Compute Modulo between frequencys (/!\second argument will be multiplied by CumuPeriod/!\)
77        # RebuildFrequency needs additionnal information
78        if [ ${post_freq} = RebuildFrequency ] ; then
79            IGCM_post_ModuloRuntimeFrequency config_Post_post_freq config_UserChoices_PeriodLength NbRebuildDir
80        else
81            IGCM_post_ModuloRuntimeFrequency config_Post_post_freq config_UserChoices_PeriodLength
82        fi
83        #
84        IGCM_debug_Print 1 "${post_freq} flag value : ${RebuildFrequency}"
85    done
86    #
87    echo
88    IGCM_debug_Print 1 "POST-TREATEMENT flag value : ${POST}"
89    #
90    IGCM_debug_PopStack "IGCM_post_Configure"
91}
92
93function IGCM_post_Submit
94{
95    IGCM_debug_PushStack "IGCM_post_Submit"
96
97    typeset listVarEnv
98
99    POST_DIR=${R_OUT_POST}/${config_UserChoices_TagName}/${config_UserChoices_JobName}
100
101    if [ ${POST} = true ]; then
102        echo
103        IGCM_debug_Print 1 "IGCM_post_Submit :"
104        echo
105        IGCM_debug_Print 1 "POST_DIR = ${POST_DIR}"
106    fi
107
108    #============ TIME SERIES POST-TREATMENT ===========#
109    if [ ${TimeSeriesFrequency} = true ] ; then
110
111        IGCM_debug_Print 2 "TIME SERIES POST-PROCESSING ACTIVATED :"
112        echo
113
114
115
116        # Get information from last execution
117        IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesCompleted
118        CompletedFlag=${run_PostProcessing_TimeSeriesCompleted}
119        #
120
121
122
123        listVarEnv="DEBUG_debug,MODIPSL,libIGCM,libIGCM_SX,SUBMIT_DIR,POST_DIR,MASTER,RebuildFrequency,DateBegin,PeriodDateEnd,StandAlone,CompletedFlag,TsTask,CompToRead,FlagToRead,RESOL_ATM,RESOL_OCE,RESOL_ICE,RESOL_MBG,RESOL_SRF,RESOL_SBG"
124        #
125        jLoop=${#ListDimension[*]}
126        j=0
127        until [ $j -ge ${jLoop} ]; do
128            Dimension=${ListDimension[${j}]}
129            #
130            if [ X$( eval echo \${TimeSeries${Dimension}} ) = Xtrue ] ; then
131                #
132                IGCM_debug_Print 2 "TIME SERIES POST-PROCESSING ${Dimension} ACTIVATED :"
133                echo
134                unset CompToRead
135                unset FlagToRead
136                #
137                if [ X${Dimension} = X ] ; then
138                    TsTask="empty"
139                    Script_Post_Output=create_ts.${PeriodDateEnd}
140                else
141                    TsTask=${Dimension}
142                    Script_Post_Output=create_ts.${PeriodDateEnd}.${TsTask}
143                fi
144                #
145                if [ ${RebuildFrequency} = true ] && [ ${DRYRUN} -le 1 ] ; then
146                    #
147                    if [ -f ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh ] ; then
148                        echo "export DEBUG_debug=${DEBUG_debug}            " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
149                        echo "export MODIPSL=${MODIPSL}                    " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
150                        echo "export libIGCM_SX=${libIGCM}                 " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
151                        echo "export libIGCM=${libIGCM_POST}               " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
152                        echo "export SUBMIT_DIR=${SUBMIT_DIR}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
153                        echo "export POST_DIR=${POST_DIR}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
154                        echo "export MASTER=${MASTER}                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
155                        echo "export RebuildFrequency=${RebuildFrequency}  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
156                        echo "export DateBegin=${DateBegin}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
157                        echo "export PeriodDateEnd=${PeriodDateEnd}        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
158                        echo "export StandAlone=false                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
159                        echo "export CompletedFlag=${CompletedFlag}        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
160                        echo "export TsTask=${TsTask}                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
161                        echo "export RESOL_ATM=${RESOL_ATM}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
162                        echo "export RESOL_OCE=${RESOL_OCE}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
163                        echo "export RESOL_ICE=${RESOL_ICE}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
164                        echo "export RESOL_MBG=${RESOL_MBG}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
165                        echo "export RESOL_SRF=${RESOL_SRF}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
166                        echo "export RESOL_SBG=${RESOL_SBG}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
167                        echo "export listVarEnv=${listVarEnv}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
168                        echo "export Script_Post_Output=${Script_Post_Output}" >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
169                        echo "IGCM_sys_MkdirWork ${POST_DIR}               " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
170                        echo "IGCM_debug_Verif_Exit                        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
171                        echo "IGCM_sys_QsubPost create_ts                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
172                    fi
173                    #
174                else
175                    #
176                    IGCM_sys_RshPost <<-EOF
177                    export DEBUG_debug=${DEBUG_debug}
178                    export MODIPSL=${MODIPSL}
179                    export libIGCM_SX=${libIGCM}
180                    export libIGCM=${libIGCM_POST}
181                    export SUBMIT_DIR=${SUBMIT_DIR}
182                    export POST_DIR=${POST_DIR}
183                    export MASTER=${MASTER}
184                    export RebuildFrequency=${RebuildFrequency}
185                    export DateBegin=${DateBegin}
186                    export PeriodDateEnd=${PeriodDateEnd}
187                    export StandAlone=false
188                    export CompletedFlag=${CompletedFlag}
189                    export TsTask=${TsTask}
190                    export RESOL_ATM=${RESOL_ATM}
191                    export RESOL_OCE=${RESOL_OCE}
192                    export RESOL_ICE=${RESOL_ICE}
193                    export RESOL_MBG=${RESOL_MBG}
194                    export RESOL_SRF=${RESOL_SRF}
195                    export RESOL_SBG=${RESOL_SBG}
196                    export listVarEnv=${listVarEnv}
197                    export Script_Post_Output=${Script_Post_Output}
198                    . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
199                    . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
200                    IGCM_sys_MkdirWork ${POST_DIR}
201                    IGCM_debug_Verif_Exit
202                    IGCM_sys_QsubPost create_ts
203EOF
204                fi
205            fi
206            #
207            if [ X$( eval echo \${TimeSeriesChunck${Dimension}} ) = Xtrue ] ; then
208                #
209                IGCM_debug_Print 2 "TIME SERIES POST-PROCESSING ${Dimension} WITH CHUNCK ACTIVATED :"
210                echo
211                # Need to Remember This One
212                SavedDateBegin=${DateBegin}
213                # Kind of task create_ts will perform
214                TsTask=Chunck${Dimension}
215                # Number of chunck jobs to configure and submit
216                eval NbJob=\${#CHUNCK${Dimension}_COMP[@]}
217                typeset i
218                i=0
219                until [ $i -ge $NbJob ]; do
220                    CompToRead=$( eval echo \${CHUNCK${Dimension}_COMP[\${i}]} )
221                    FlagToRead=$( eval echo \${CHUNCK${Dimension}_FLAG[\${i}]} )
222                    NameToRead=$( eval echo \${CHUNCK${Dimension}_NAME[\${i}]} )
223                    ChunckSize=$( eval echo \${CHUNCK${Dimension}_SIZE[\${i}]} )
224                    # Chunck Length (mandatory in Year)
225                    YearsChunckLength=$( echo ${ChunckSize} | sed -e "s/[yY]//" )
226                    #
227                    IGCM_date_GetYearMonth ${DateBegin}     YearBegin MonthBegin
228                    #
229                    IGCM_date_GetYearMonth ${PeriodDateEnd} YearEnd   MonthEnd
230                    # How many chunck in total since simulation began
231                    NbYearsChunckLoop=$(( ( ${YearEnd} - ${YearBegin} + 1 ) / ${YearsChunckLength} ))
232                    #  Tweak special case
233                    [ $(( ( ${YearEnd} - ${YearBegin} + 1 ) % ${YearsChunckLength} )) = 0 ] && NbYearsChunckLoop=$(( ${NbYearsChunckLoop} - 1 ))
234                    # Starting Year of the current chunck
235                    ChunckTsYearBegin=$(( ${NbYearsChunckLoop} *  ${YearsChunckLength} + ${YearBegin} ))
236                    # Starting date of the current chunck
237                    ChunckTsDateBegin=${ChunckTsYearBegin}${MonthBegin}01
238                    #
239                    Script_Post_Output=create_ts.${PeriodDateEnd}.${TsTask}.${CompToRead}.${NameToRead}
240                    #
241                    if [ ${RebuildFrequency} = true ] && [ ${DRYRUN} -le 1 ] ; then
242                        #
243                        if [ -f ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh ] ; then
244                            echo "export DEBUG_debug=${DEBUG_debug}            " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
245                            echo "export MODIPSL=${MODIPSL}                    " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
246                            echo "export libIGCM_SX=${libIGCM}                 " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
247                            echo "export libIGCM=${libIGCM_POST}               " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
248                            echo "export SUBMIT_DIR=${SUBMIT_DIR}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
249                            echo "export POST_DIR=${POST_DIR}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
250                            echo "export MASTER=${MASTER}                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
251                            echo "export RebuildFrequency=${RebuildFrequency}  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
252                            echo "export DateBegin=${ChunckTsDateBegin}        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
253                            echo "export PeriodDateEnd=${PeriodDateEnd}        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
254                            echo "export StandAlone=false                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
255                            echo "export CompletedFlag=${CompletedFlag}        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
256                            echo "export TsTask=${TsTask}                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
257                            echo "export CompToRead=${CompToRead}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
258                            echo "export FlagToRead=${FlagToRead}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
259                            echo "export RESOL_ATM=${RESOL_ATM}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
260                            echo "export RESOL_OCE=${RESOL_OCE}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
261                            echo "export RESOL_ICE=${RESOL_ICE}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
262                            echo "export RESOL_MBG=${RESOL_MBG}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
263                            echo "export RESOL_SRF=${RESOL_SRF}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
264                            echo "export RESOL_SBG=${RESOL_SBG}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
265                            echo "export listVarEnv=${listVarEnv}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
266                            echo "export Script_Post_Output=${Script_Post_Output}" >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
267                            echo "IGCM_sys_MkdirWork ${POST_DIR}               " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
268                            echo "IGCM_debug_Verif_Exit                        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
269                            echo "IGCM_sys_QsubPost create_ts                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
270                        fi
271                        #
272                    else
273                        #
274                        IGCM_sys_RshPost <<-EOF
275                        export DEBUG_debug=${DEBUG_debug}
276                        export MODIPSL=${MODIPSL}
277                        export libIGCM_SX=${libIGCM}
278                        export libIGCM=${libIGCM_POST}
279                        export SUBMIT_DIR=${SUBMIT_DIR}
280                        export POST_DIR=${POST_DIR}
281                        export MASTER=${MASTER}
282                        export RebuildFrequency=${RebuildFrequency}
283                        export DateBegin=${ChunckTsDateBegin}
284                        export PeriodDateEnd=${PeriodDateEnd}
285                        export StandAlone=false
286                        export CompletedFlag=${CompletedFlag}
287                        export TsTask=${TsTask}
288                        export CompToRead=${CompToRead}
289                        export FlagToRead=${FlagToRead}
290                        export RESOL_ATM=${RESOL_ATM}
291                        export RESOL_OCE=${RESOL_OCE}
292                        export RESOL_ICE=${RESOL_ICE}
293                        export RESOL_MBG=${RESOL_MBG}
294                        export RESOL_SRF=${RESOL_SRF}
295                        export RESOL_SBG=${RESOL_SBG}
296                        export listVarEnv=${listVarEnv}
297                        export Script_Post_Output=${Script_Post_Output}
298                        . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
299                        . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
300                        IGCM_sys_MkdirWork ${POST_DIR}
301                        IGCM_debug_Verif_Exit
302                        IGCM_sys_QsubPost create_ts
303EOF
304                        #
305                    fi
306                    #
307                    export DateBegin=${SavedDateBegin}
308                    #
309                    (( i=i+1 ))
310                    #
311                done
312            fi
313            (( j=j+1 ))
314        done
315    fi
316
317    #=============  SEASONAL POST-TREATMENT ============#
318    if [ ${SeasonalFrequency} = true ] ; then
319        #
320        IGCM_debug_Print 2 "SEASONNAL POST-TREATMENT :"
321        echo
322        #
323        Script_Post_Output=create_se.${PeriodDateEnd}
324        #
325        listVarEnv="DEBUG_debug,MODIPSL,libIGCM,libIGCM_SX,SUBMIT_DIR,POST_DIR,MASTER,RebuildFrequency,DateBegin,PeriodDateEnd,StandAlone,RESOL_ATM,RESOL_OCE,RESOL_ICE,RESOL_MBG,RESOL_SRF,RESOL_SBG"
326
327        if [ ${RebuildFrequency} = true ] && [ ${DRYRUN} -le 1 ] ; then
328            #
329            echo "export DEBUG_debug=${DEBUG_debug}            " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
330            echo "export MODIPSL=${MODIPSL}                    " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
331            echo "export libIGCM_SX=${libIGCM}                 " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
332            echo "export libIGCM=${libIGCM_POST}               " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
333            echo "export SUBMIT_DIR=${SUBMIT_DIR}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
334            echo "export POST_DIR=${POST_DIR}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
335            echo "export MASTER=${MASTER}                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
336            echo "export RebuildFrequency=${RebuildFrequency}  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
337            echo "export DateBegin=${DateBegin}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
338            echo "export PeriodDateEnd=${PeriodDateEnd}        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
339            echo "export StandAlone=false                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
340            echo "export RESOL_ATM=${RESOL_ATM}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
341            echo "export RESOL_OCE=${RESOL_OCE}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
342            echo "export RESOL_ICE=${RESOL_ICE}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
343            echo "export RESOL_MBG=${RESOL_MBG}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
344            echo "export RESOL_SRF=${RESOL_SRF}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
345            echo "export RESOL_SBG=${RESOL_SBG}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
346            echo "export listVarEnv=${listVarEnv}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
347            echo "export Script_Post_Output=${Script_Post_Output}" >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
348            echo "IGCM_sys_MkdirWork ${POST_DIR}               " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
349            echo "IGCM_debug_Verif_Exit                        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
350            echo "IGCM_sys_QsubPost create_se                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
351            #
352        else
353            #
354            IGCM_sys_RshPost <<-EOF
355            export DEBUG_debug=${DEBUG_debug}
356            export MODIPSL=${MODIPSL}
357            export libIGCM_SX=${libIGCM}
358            export libIGCM=${libIGCM_POST}
359            export SUBMIT_DIR=${SUBMIT_DIR}
360            export POST_DIR=${POST_DIR}
361            export MASTER=${MASTER}
362            export RebuildFrequency=${RebuildFrequency}
363            export DateBegin=${DateBegin}
364            export PeriodDateEnd=${PeriodDateEnd}
365            export StandAlone=false
366            export RESOL_ATM=${RESOL_ATM}
367            export RESOL_OCE=${RESOL_OCE}
368            export RESOL_ICE=${RESOL_ICE}
369            export RESOL_MBG=${RESOL_MBG}
370            export RESOL_SRF=${RESOL_SRF}
371            export RESOL_SBG=${RESOL_SBG}
372            export listVarEnv=${listVarEnv}
373            export Script_Post_Output=${Script_Post_Output}
374            . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
375            . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
376            IGCM_sys_MkdirWork ${POST_DIR}
377            IGCM_debug_Verif_Exit
378            IGCM_sys_QsubPost create_se
379EOF
380        #
381        fi
382    fi
383
384    #============== REBUILD POST-TREATMENT =============#
385    if ( [ ! X${config_Post_RebuildFrequency} = X${NULL_STR} ] && [ ! X${config_Post_RebuildFrequency} = XNONE ] ) ; then
386        # -----------------------------------------------------------------------------------
387        # Function IGCM_FlushRebuild define in rebuild.ksh has not been closed yet. Do it now
388        # -----------------------------------------------------------------------------------
389        if [ ${DRYRUN} -le 1 ] ; then
390            echo "IGCM_debug_PopStack \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
391            echo "}                                         " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
392        fi
393        if [ ${config_Post_RebuildFromArchive} = true ] ; then
394            IGCM_sys_Put_Dir REBUILD_${PeriodDateBegin} ${REBUILD_DIR}
395        else
396            IGCM_sys_Mv      REBUILD_${PeriodDateBegin} ${REBUILD_DIR}
397        fi
398    fi
399    #
400    if [ ${RebuildFrequency} = true ] ; then
401        if ( [ ${config_Post_RebuildFromArchive} = true ] ) ; then
402            IGCM_debug_Print 2 "REBUILD POST-TREATMENT FROM ARCHIVE:"
403            echo
404            #
405            script=rebuild_fromArchive
406        else
407            IGCM_debug_Print 2 "REBUILD POST-TREATMENT FROM WORKDIR:"
408            echo
409            #
410            script=rebuild_fromWorkdir
411        fi
412        #
413        Script_Post_Output=${script}.${PeriodDateEnd}
414        #
415        listVarEnv="DEBUG_debug,MODIPSL,libIGCM,libIGCM_SX,SUBMIT_DIR,REBUILD_DIR,POST_DIR,MASTER,RebuildFromArchive,DateBegin,PeriodDateBegin,PeriodDateEnd,NbRebuildDir,StandAlone,RESOL_ATM,RESOL_OCE,RESOL_ICE,RESOL_MBG,RESOL_SRF,RESOL_SBG"
416        IGCM_sys_RshPost <<-EOF
417        export DEBUG_debug=${DEBUG_debug}
418        export MODIPSL=${MODIPSL}
419        export libIGCM_SX=${libIGCM}
420        export libIGCM=${libIGCM_POST}
421        export SUBMIT_DIR=${SUBMIT_DIR}
422        export REBUILD_DIR=${REBUILD_DIR}
423        export POST_DIR=${POST_DIR}
424        export MASTER=${MASTER}
425        export RebuildFromArchive=${config_Post_RebuildFromArchive}
426        export DateBegin=${DateBegin}
427        export PeriodDateBegin=${PeriodDateBegin}
428        export PeriodDateEnd=${PeriodDateEnd}
429        export NbRebuildDir=${NbRebuildDir}
430        export StandAlone=false
431        export RESOL_ATM=${RESOL_ATM}
432        export RESOL_OCE=${RESOL_OCE}
433        export RESOL_ICE=${RESOL_ICE}
434        export RESOL_MBG=${RESOL_MBG}
435        export RESOL_SRF=${RESOL_SRF}
436        export RESOL_SBG=${RESOL_SBG}
437        export listVarEnv=${listVarEnv}
438        export Script_Post_Output=${Script_Post_Output}
439        . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
440        . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
441        IGCM_sys_MkdirWork ${POST_DIR}
442        IGCM_debug_Verif_Exit
443        IGCM_sys_QsubPost ${script}
444EOF
445
446    fi
447
448    IGCM_debug_PopStack "IGCM_post_Submit"
449}
450
451#===================================
452function IGCM_post_CheckModuloFrequency
453{
454    IGCM_debug_PushStack "IGCM_post_CheckModuloFrequency" $*
455
456    # Used by IGCM_config_Check
457    # from 2 libIGCM compatible frequency (*Y, *M, *D, *y, *m, *d)
458    # Issue an exit instruction IGCM_debug_Exit if there modulo is not zero
459    # Input parameter are the name of the variable, not the frequency value itself
460    # example
461    # IGCM_post_ModuloFrequency config_Post_RebuildFrequency config_UserChoices_PeriodLength
462
463    typeset MasterName SlaveName MasterFrequency SlaveFrequency PeriodMasterYear PeriodMasterMonth PeriodMasterDay PeriodSlaveYear PeriodSlaveMonth PeriodSlaveDay
464
465    # Get the name of the variable
466    MasterName=$1
467    SlaveName=$2
468    # Get the value the above name points to
469    MasterFrequency=$( eval echo \${${1}} )
470    SlaveFrequency=$( eval echo \${${2}} )
471
472    echo
473    IGCM_debug_Print 1 "IGCM_post_CheckModuloFrequency : Master=${MasterFrequency} Slave=${SlaveFrequency}"
474    echo
475
476    case ${MasterFrequency} in
477        *y|*Y)
478            PeriodMasterYear=$( echo ${MasterFrequency} | sed -e "s/[yY]//" )
479            case ${SlaveFrequency} in
480                *Y|*y)
481                    PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
482                    if ( [ ${PeriodSlaveYear} -gt ${PeriodMasterYear} ] || \
483                        [ $(( ${PeriodMasterYear} % ${PeriodSlaveYear} )) -ne 0 ] )then
484                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
485                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
486                        IGCM_debug_Exit "Check your frequency"
487                    fi ;;
488                *M|*m)
489                    PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
490                    if ( [ ${PeriodSlaveMonth} -gt $(( ${PeriodMasterYear} * 12 )) ] || \
491                        [ $(( ( ${PeriodMasterYear} * 12 ) % ${PeriodSlaveMonth} )) -ne 0 ] ) ; then
492                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
493                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
494                        IGCM_debug_Exit "Check your frequency"
495                    fi ;;
496                *D|*d)
497                    PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
498                    NbDays=$( IGCM_date_DaysInYear ${year} )
499                    if [ ${config_UserChoices_CalendarType} = 360d ] || [ ${config_UserChoices_CalendarType} = noleap ] ; then
500                        if ( [ ${PeriodSlaveDay} -gt $(( ${PeriodMasterYear} * ${NbDays} )) ] || \
501                            [ $(( ( ${PeriodMasterYear} * ${NbDays} ) % ${PeriodSlaveDay} )) -ne 0 ] ; ) then
502                            IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
503                            IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
504                            IGCM_debug_Exit "Check your frequency"
505                        fi
506                    else
507                        IGCM_debug_Print 3 "For ${MasterName} with leap calendar:"
508                        IGCM_debug_Print 3 "We have a daily ${SlaveName} frequency and ${MasterName}=${MasterFrequency}"
509                        IGCM_debug_Print 3 "No post-treatment. Case not properly handle at this moment."
510                        IGCM_debug_Exit "Check your frequency"
511                    fi ;;
512            esac ;;
513        *M|*m)
514            PeriodMasterMonth=$( echo ${MasterFrequency} | sed -e "s/[mM]//" )
515            case ${SlaveFrequency} in               
516                *Y|*y)
517                    PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
518                    if ( [ ${PeriodMasterMonth} -gt $(( ${PeriodSlaveYear} * 12 )) ] || \
519                        [ $(( ${PeriodMasterMonth} % ( ${PeriodSlaveYear} * 12 ) )) -ne 0 ] ) ; then
520                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
521                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
522                        IGCM_debug_Exit "Check your frequency"
523                    fi ;;
524                *M|*m)
525                    PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
526                    if ( [ ${PeriodSlaveMonth} -gt ${PeriodMasterMonth} ] || \
527                        [ $(( ${PeriodMasterMonth} % ${PeriodSlaveMonth} )) -ne 0 ] ) ;  then           
528                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
529                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
530                        IGCM_debug_Exit "Check your frequency"
531                    fi ;;
532                *D|*d)
533                    IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
534                    IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
535                    IGCM_debug_Exit "Check your frequency" ;;
536            esac ;;
537        *D|*d)
538            PeriodMasterDay=$( echo ${MasterFrequency} | sed -e "s/[dD]//" )
539            case ${SlaveFrequency} in
540                *Y|*y)
541                    IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
542                    IGCM_debug_Print 3 "${MasterName} frequency ${MasterFrequency}"
543                    IGCM_debug_Exit "Check your frequency" ;;
544                *M|*m)
545                    IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
546                    IGCM_debug_Print 3 "${MasterName} frequency ${MasterFrequency}"
547                    IGCM_debug_Exit "Check your frequency" ;;
548                *D|*d)
549                    PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
550                    if ( [ ${PeriodSlaveDay} -gt ${PeriodMasterDay} ] || \
551                        [ $(( ${PeriodMasterDay} % ${PeriodSlaveDay} )) -ne 0 ] ) ;  then
552                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
553                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
554                        IGCM_debug_Exit "Check your frequency"
555                    fi ;;
556            esac ;;
557        NONE|none) 
558            ;;
559        *)
560            IGCM_debug_Print 3 "KeyWord ${MasterFrequency} not allowed for ${MasterName} in config.card"
561            IGCM_debug_Exit "Check your ${MasterName} in config.card" ;;
562    esac
563
564    IGCM_debug_PopStack "IGCM_post_CheckModuloFrequency"
565}
566
567#===================================
568function IGCM_post_ModuloRuntimeFrequency
569{
570    IGCM_debug_PushStack "IGCM_post_ModuloRuntimeFrequency" $*
571
572    # Used by IGCM_post_Configure
573    # - from libIGCM (config_UserChoices_PeriodLength frequency * CumulPeriod) and
574    # - post-processing compatible frequency (*Y, *M, *D, *y, *m, *d)
575    # --> turn on post-processing submission when their modulo is zero
576    # Input parameter are the name of the variable, not the frequency value itself
577    # example
578    # IGCM_post_ModuloRuntimeFrequency config_Post_SeasonalFrequency config_UserChoices_PeriodLength
579
580    typeset MasterName SlaveName MasterFrequency SlaveFrequency PeriodMasterYear PeriodMasterMonth PeriodMasterDay PeriodSlaveYear PeriodSlaveMonth PeriodSlaveDay
581
582    # Get the name of the variable
583    MasterName=$1
584    SlaveName=$2
585 
586    # Get the value the above name points to
587    eval MasterFrequency=\${${1}}
588    eval SlaveFrequency=\${${2}}
589
590    echo
591    IGCM_debug_Print 1 "IGCM_post_ModuloRuntimeFrequency : Master=${MasterFrequency} Slave=${SlaveFrequency} CumulPeriod=${CumulPeriod}"
592    echo
593
594    case ${MasterFrequency} in
595        *y|*Y)
596            PeriodMasterYear=$( echo ${MasterFrequency} | sed -e "s/[yY]//" )
597            case ${SlaveFrequency} in
598                *Y|*y)
599                    PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
600                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveYear} - ${PeriodOffset} ) % ${PeriodMasterYear} )) -eq 0 ] ;  then
601                        if [ $(( ${CumulPeriod} * ${PeriodSlaveYear} - ${PeriodOffset} )) -ne 0 ] ; then
602                            eval ${post_freq}=true ; POST=true
603                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterYear} / ${PeriodSlaveYear} ))
604                        fi
605                    fi;;
606                *M|*m)
607                    PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
608                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveMonth} - ${PeriodOffset} * 12 ) % ( ${PeriodMasterYear} * 12 ) )) -eq 0 ] ; then
609                        if [ $(( ${CumulPeriod} * ${PeriodSlaveMonth} - ${PeriodOffset} * 12 )) -ne 0 ] ; then
610                            eval ${post_freq}=true ; POST=true
611                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ( 12 * ${PeriodMasterYear} ) / ${PeriodSlaveMonth} ))
612                        fi
613                    fi;;
614                *D|*d)
615                    PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
616                    NbDays=$( IGCM_date_DaysInYear ${year} )
617                    if [ $(( ( ${CumulPeriod} - ( ${PeriodOffset} * ${NbDays} / ${PeriodSlaveDay} ) ) % ( ${NbDays} * ${PeriodMasterYear} / ${PeriodSlaveDay} ) )) -eq 0 ] ; then
618                        if [ $(( ${CumulPeriod} - ( ${PeriodOffset} * ${NbDays} / ${PeriodSlaveDay} ) )) -ne 0 ] ; then
619                            eval ${post_freq}=true ; POST=true
620                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ( ${NbDays} * ${PeriodMasterYear} ) / ${PeriodSlaveDay} ))
621                        fi
622                    fi;;
623            esac ;;
624        *M|*m)
625            PeriodMasterMonth=$( echo ${MasterFrequency} | sed -e "s/[mM]//" )
626            case ${SlaveFrequency} in
627                *Y|*y)
628                    PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
629                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveYear} * 12 - ${PeriodOffset} ) % ( ${PeriodMasterMonth} ) )) -eq 0 ] ; then
630                        if [ $(( ${CumulPeriod} * ${PeriodSlaveYear} * 12 - ${PeriodOffset} )) -ne 0 ] ; then
631                            eval ${post_freq}=true ; POST=true
632                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterMonth} / ( 12 * ${PeriodSlaveYear} ) ))
633                        fi
634                    fi;;
635                *M|*m)
636                    PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
637                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveMonth} - ${PeriodOffset} ) % ${PeriodMasterMonth} )) -eq 0 ] ;  then
638                        if [ $(( ${CumulPeriod} * ${PeriodSlaveMonth} -  ${PeriodOffset} )) -ne 0 ] ; then
639                            eval ${post_freq}=true ; POST=true
640                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterMonth} / ${PeriodSlaveMonth} ))
641                        fi
642                    fi;;
643                *D|*d)
644                    IGCM_debug_Print 3 "PeriodLength frequency ${SlaveFrequency} not compatbile with"
645                    IGCM_debug_Print 3 "${flag_post} frequency : ${MasterFrequency} " ;;
646            esac ;;
647        *D|*d)
648            PeriodMasterDay=$( echo ${MasterFrequency} | sed -e "s/[dD]//" )
649            case ${SlaveFrequency} in
650                *Y|*y)
651                    IGCM_debug_Print 3 "PeriodLength frequency ${SlaveFrequency} not compatbile with"
652                    IGCM_debug_Print 3 "${flag_post} frequency : ${MasterFrequency} " ;;
653                *M|*m)
654                    IGCM_debug_Print 3 "PeriodLength frequency ${SlaveFrequency} not compatbile with"
655                    IGCM_debug_Print 3 "${flag_post} frequency : ${MasterFrequency} " ;;
656                *D|*d)
657                    PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
658                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveDay} - ${PeriodOffset} ) % ${PeriodMasterDay} )) -eq 0 ] ;  then
659                        if [ $(( ${CumulPeriod} * ${PeriodSlaveDay} - ${PeriodOffset} )) -ne 0 ] ; then
660                            eval ${post_freq}=true ; POST=true
661                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterDay} / ${PeriodSlaveDay} ))
662                        fi
663                    fi;;
664            esac ;;
665        NONE|none)
666            ;;
667        *)
668            IGCM_debug_Print 3 "KeyWord not allowed for ${post_freq} in config.card"
669            ;;
670    esac
671
672    IGCM_debug_PopStack "IGCM_post_ModuloRuntimeFrequency"
673}
Note: See TracBrowser for help on using the repository browser.