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

Last change on this file since 380 was 380, checked in by sdipsl, 14 years ago
  • Add a IGCM_config_Check function to test coherency between post-processing frequency. See #29. Will exit before execution if incoherency are found (example rebuild every 6 months, having a 1Y PeriodLenght? and a 2 months TimeSeriesFrequency?...)
  • libIGCM_post.ksh refactoring, making general function to handle frequency, easier to read hopefully. Still some simplification to add
  • DRYRUN was not maintain since a long time. Fix that. Minor adaptation still need to be done for sx8 and sx9 (ie when you want to DRYRUN from a machine initially devoted to the post-processing). DRYRUN is aimed for developpement purpose, prefer StandAlone? method to post-process after the fact.
  • we clean SUBMIT_DIR keeping only the 5 youngest Script_Output_* files. Good for workdir quota.
  • simplify rebuildFrom* options : remove R_SAVE and config_UserChoices_JobName used by IGCM_Patch_20091118_mask.ksh. rebuild.ksh will define that ; AA_create* already know that.
  • when exiting because of a RErun an old job : be more explicit and point the files who initiated this action, together with a link to clean_month.job
  • remove some redundant typeset
  • clean libIGCM_sys.ksh : remove machines
  • and cosmetics.
  • 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: 33.3 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    POST_DIR=${R_OUT_POST}/${config_UserChoices_TagName}/${config_UserChoices_JobName}
98
99    if [ ${POST} = true ]; then
100        echo
101        IGCM_debug_Print 1 "IGCM_post_Submit :"
102        echo
103        IGCM_debug_Print 1 "POST_DIR = ${POST_DIR}"
104    fi
105
106    #============ TIME SERIES POST-TREATMENT ===========#
107    if [ ${TimeSeriesFrequency} = true ] ; then
108
109        IGCM_debug_Print 2 "TIME SERIES POST-PROCESSING ACTIVATED :"
110        echo
111
112
113
114        # Get information from last execution
115        IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesCompleted
116        CompletedFlag=${run_PostProcessing_TimeSeriesCompleted}
117        #
118
119
120
121        typeset listVarEnv
122        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"
123        #
124        jLoop=${#ListDimension[*]}
125        j=0
126        until [ $j -ge ${jLoop} ]; do
127            Dimension=${ListDimension[${j}]}
128            #
129            if [ X$( eval echo \${TimeSeries${Dimension}} ) = Xtrue ] ; then
130                #
131                IGCM_debug_Print 2 "TIME SERIES POST-PROCESSING ${Dimension} ACTIVATED :"
132                echo
133                #
134                if [ X${Dimension} = X ] ; then
135                    TsTask="empty"
136                else
137                    TsTask=${Dimension}
138                fi
139                #
140                if [ ${RebuildFrequency} = true ] && [ ${DRYRUN} -le 1 ] ; then
141                    #
142                    if [ -f ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh ] ; then
143                        echo "export DEBUG_debug=${DEBUG_debug}            " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
144                        echo "export MODIPSL=${MODIPSL}                    " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
145                        echo "export libIGCM_SX=${libIGCM}                 " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
146                        echo "export libIGCM=${libIGCM_POST}               " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
147                        echo "export SUBMIT_DIR=${SUBMIT_DIR}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
148                        echo "export POST_DIR=${POST_DIR}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
149                        echo "export MASTER=${MASTER}                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
150                        echo "export RebuildFrequency=${RebuildFrequency}  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
151                        echo "export DateBegin=${DateBegin}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
152                        echo "export PeriodDateEnd=${PeriodDateEnd}        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
153                        echo "export StandAlone=false                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
154                        echo "export CompletedFlag=${CompletedFlag}        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
155                        echo "export TsTask=${TsTask}                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
156                        echo "export RESOL_ATM=${RESOL_ATM}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
157                        echo "export RESOL_OCE=${RESOL_OCE}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
158                        echo "export RESOL_ICE=${RESOL_ICE}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
159                        echo "export RESOL_MBG=${RESOL_MBG}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
160                        echo "export RESOL_SRF=${RESOL_SRF}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
161                        echo "export RESOL_SBG=${RESOL_SBG}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
162                        echo "export listVarEnv=${listVarEnv}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
163                        echo "IGCM_sys_MkdirWork ${POST_DIR}               " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
164                        echo "IGCM_debug_Verif_Exit                        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
165                        echo "IGCM_sys_QsubPost create_ts                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
166                    fi
167                    #
168                else
169                    #
170                    IGCM_sys_RshPost <<-EOF
171                    export DEBUG_debug=${DEBUG_debug}
172                    export MODIPSL=${MODIPSL}
173                    export libIGCM_SX=${libIGCM}
174                    export libIGCM=${libIGCM_POST}
175                    export SUBMIT_DIR=${SUBMIT_DIR}
176                    export POST_DIR=${POST_DIR}
177                    export MASTER=${MASTER}
178                    export RebuildFrequency=${RebuildFrequency}
179                    export DateBegin=${DateBegin}
180                    export PeriodDateEnd=${PeriodDateEnd}
181                    export StandAlone=false
182                    export CompletedFlag=${CompletedFlag}
183                    export TsTask=${TsTask}
184                    export RESOL_ATM=${RESOL_ATM}
185                    export RESOL_OCE=${RESOL_OCE}
186                    export RESOL_ICE=${RESOL_ICE}
187                    export RESOL_MBG=${RESOL_MBG}
188                    export RESOL_SRF=${RESOL_SRF}
189                    export RESOL_SBG=${RESOL_SBG}
190                    export listVarEnv=${listVarEnv}
191                    . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
192                    . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
193                    IGCM_sys_MkdirWork ${POST_DIR}
194                    IGCM_debug_Verif_Exit
195                    IGCM_sys_QsubPost create_ts
196EOF
197                fi
198            fi
199            #
200            if [ X$( eval echo \${TimeSeriesChunck${Dimension}} ) = Xtrue ] ; then
201                #
202                IGCM_debug_Print 2 "TIME SERIES POST-PROCESSING ${Dimension} WITH CHUNCK ACTIVATED :"
203                echo
204                # Need to Remember This One
205                SavedDateBegin=${DateBegin}
206                # Kind of task create_ts will perform
207                TsTask=Chunck${Dimension}
208                # Number of chunck jobs to configure and submit
209                eval NbJob=\${#CHUNCK${Dimension}_COMP[@]}
210                typeset i
211                i=0
212                until [ $i -ge $NbJob ]; do
213                    CompToRead=$( eval echo \${CHUNCK${Dimension}_COMP[\${i}]} )
214                    FlagToRead=$( eval echo \${CHUNCK${Dimension}_FLAG[\${i}]} )
215                    ChunckSize=$( eval echo \${CHUNCK${Dimension}_SIZE[\${i}]} )
216                    # Chunck Length (mandatory in Year)
217                    YearsChunckLength=$( echo ${ChunckSize} | sed -e "s/[yY]//" )
218                    #
219                    IGCM_date_GetYearMonth ${DateBegin}     YearBegin MonthBegin
220                    #
221                    IGCM_date_GetYearMonth ${PeriodDateEnd} YearEnd   MonthEnd
222                    # How many chunck in total since simulation began
223                    NbYearsChunckLoop=$(( ( ${YearEnd} - ${YearBegin} + 1 ) / ${YearsChunckLength} ))
224                    #  Tweak special case
225                    [ $(( ( ${YearEnd} - ${YearBegin} + 1 ) % ${YearsChunckLength} )) = 0 ] && NbYearsChunckLoop=$(( ${NbYearsChunckLoop} - 1 ))
226                    # Starting Year of the current chunck
227                    ChunckTsYearBegin=$(( ${NbYearsChunckLoop} *  ${YearsChunckLength} + ${YearBegin} ))
228                    # Starting date of the current chunck
229                    ChunckTsDateBegin=${ChunckTsYearBegin}${MonthBegin}01
230                    #
231                    if [ ${RebuildFrequency} = true ] && [ ${DRYRUN} -le 1 ] ; then
232                        #
233                        if [ -f ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh ] ; then
234                            echo "export DEBUG_debug=${DEBUG_debug}            " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
235                            echo "export MODIPSL=${MODIPSL}                    " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
236                            echo "export libIGCM_SX=${libIGCM}                 " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
237                            echo "export libIGCM=${libIGCM_POST}               " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
238                            echo "export SUBMIT_DIR=${SUBMIT_DIR}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
239                            echo "export POST_DIR=${POST_DIR}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
240                            echo "export MASTER=${MASTER}                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
241                            echo "export RebuildFrequency=${RebuildFrequency}  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
242                            echo "export DateBegin=${ChunckTsDateBegin}        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
243                            echo "export PeriodDateEnd=${PeriodDateEnd}        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
244                            echo "export StandAlone=false                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
245                            echo "export CompletedFlag=${CompletedFlag}        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
246                            echo "export TsTask=${TsTask}                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
247                            echo "export CompToRead=${CompToRead}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
248                            echo "export FlagToRead=${FlagToRead}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
249                            echo "export RESOL_ATM=${RESOL_ATM}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
250                            echo "export RESOL_OCE=${RESOL_OCE}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
251                            echo "export RESOL_ICE=${RESOL_ICE}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
252                            echo "export RESOL_MBG=${RESOL_MBG}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
253                            echo "export RESOL_SRF=${RESOL_SRF}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
254                            echo "export RESOL_SBG=${RESOL_SBG}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
255                            echo "export listVarEnv=${listVarEnv}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
256                            echo "IGCM_sys_MkdirWork ${POST_DIR}               " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
257                            echo "IGCM_debug_Verif_Exit                        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
258                            echo "IGCM_sys_QsubPost create_ts                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
259                        fi
260                        #
261                    else
262                        #
263                        IGCM_sys_RshPost <<-EOF
264                        export DEBUG_debug=${DEBUG_debug}
265                        export MODIPSL=${MODIPSL}
266                        export libIGCM_SX=${libIGCM}
267                        export libIGCM=${libIGCM_POST}
268                        export SUBMIT_DIR=${SUBMIT_DIR}
269                        export POST_DIR=${POST_DIR}
270                        export MASTER=${MASTER}
271                        export RebuildFrequency=${RebuildFrequency}
272                        export DateBegin=${ChunckTsDateBegin}
273                        export PeriodDateEnd=${PeriodDateEnd}
274                        export StandAlone=false
275                        export CompletedFlag=${CompletedFlag}
276                        export TsTask=${TsTask}
277                        export CompToRead=${CompToRead}
278                        export FlagToRead=${FlagToRead}
279                        export RESOL_ATM=${RESOL_ATM}
280                        export RESOL_OCE=${RESOL_OCE}
281                        export RESOL_ICE=${RESOL_ICE}
282                        export RESOL_MBG=${RESOL_MBG}
283                        export RESOL_SRF=${RESOL_SRF}
284                        export RESOL_SBG=${RESOL_SBG}
285                        export listVarEnv=${listVarEnv}
286                        . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
287                        . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
288                        IGCM_sys_MkdirWork ${POST_DIR}
289                        IGCM_debug_Verif_Exit
290                        IGCM_sys_QsubPost create_ts
291EOF
292                        #
293                    fi
294                    #
295                    export DateBegin=${SavedDateBegin}
296                    #
297                    (( i=i+1 ))
298                    #
299                done
300            fi
301            (( j=j+1 ))
302        done
303    fi
304
305    #=============  SEASONAL POST-TREATMENT ============#
306    if [ ${SeasonalFrequency} = true ] ; then
307        #
308        IGCM_debug_Print 2 "SEASONNAL POST-TREATMENT :"
309        echo
310        #
311        typeset listVarEnv
312        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"
313
314        if [ ${RebuildFrequency} = true ] && [ ${DRYRUN} -le 1 ] ; then
315            #
316            echo "export DEBUG_debug=${DEBUG_debug}            " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
317            echo "export MODIPSL=${MODIPSL}                    " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
318            echo "export libIGCM_SX=${libIGCM}                 " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
319            echo "export libIGCM=${libIGCM_POST}               " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
320            echo "export SUBMIT_DIR=${SUBMIT_DIR}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
321            echo "export POST_DIR=${POST_DIR}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
322            echo "export MASTER=${MASTER}                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
323            echo "export RebuildFrequency=${RebuildFrequency}  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
324            echo "export DateBegin=${DateBegin}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
325            echo "export PeriodDateEnd=${PeriodDateEnd}        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
326            echo "export StandAlone=false                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
327            echo "export RESOL_ATM=${RESOL_ATM}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
328            echo "export RESOL_OCE=${RESOL_OCE}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
329            echo "export RESOL_ICE=${RESOL_ICE}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
330            echo "export RESOL_MBG=${RESOL_MBG}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
331            echo "export RESOL_SRF=${RESOL_SRF}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
332            echo "export RESOL_SBG=${RESOL_SBG}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
333            echo "export listVarEnv=${listVarEnv}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
334            echo "IGCM_sys_MkdirWork ${POST_DIR}               " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
335            echo "IGCM_debug_Verif_Exit                        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
336            echo "IGCM_sys_QsubPost create_se                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
337            #
338        else
339            #
340            IGCM_sys_RshPost <<-EOF
341            export DEBUG_debug=${DEBUG_debug}
342            export MODIPSL=${MODIPSL}
343            export libIGCM_SX=${libIGCM}
344            export libIGCM=${libIGCM_POST}
345            export SUBMIT_DIR=${SUBMIT_DIR}
346            export POST_DIR=${POST_DIR}
347            export MASTER=${MASTER}
348            export RebuildFrequency=${RebuildFrequency}
349            export DateBegin=${DateBegin}
350            export PeriodDateEnd=${PeriodDateEnd}
351            export StandAlone=false
352            export RESOL_ATM=${RESOL_ATM}
353            export RESOL_OCE=${RESOL_OCE}
354            export RESOL_ICE=${RESOL_ICE}
355            export RESOL_MBG=${RESOL_MBG}
356            export RESOL_SRF=${RESOL_SRF}
357            export RESOL_SBG=${RESOL_SBG}
358            export listVarEnv=${listVarEnv}
359            . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
360            . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
361            IGCM_sys_MkdirWork ${POST_DIR}
362            IGCM_debug_Verif_Exit
363            IGCM_sys_QsubPost create_se
364EOF
365        #
366        fi
367    fi
368
369    #============== REBUILD POST-TREATMENT =============#
370    if ( [ ! X${config_Post_RebuildFrequency} = X${NULL_STR} ] && [ ! X${config_Post_RebuildFrequency} = XNONE ] ) ; then
371        # -----------------------------------------------------------------------------------
372        # Function IGCM_FlushRebuild define in rebuild.ksh has not been closed yet. Do it now
373        # -----------------------------------------------------------------------------------
374        if [ ${DRYRUN} -le 1 ] ; then
375            echo "IGCM_debug_PopStack \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
376            echo "}                                       " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
377        fi
378        if [ ${config_Post_RebuildFromArchive} = true ] ; then
379            IGCM_sys_Put_Dir REBUILD_${PeriodDateBegin} ${REBUILD_DIR}
380        else
381            IGCM_sys_Mv      REBUILD_${PeriodDateBegin} ${REBUILD_DIR}
382        fi
383    fi
384    #
385    if [ ${RebuildFrequency} = true ] ; then
386        #
387        if ( [ ${config_Post_RebuildFromArchive} = true ] ) ; then
388            #
389            IGCM_debug_Print 2 "REBUILD POST-TREATMENT FROM ARCHIVE:"
390            echo
391            #
392            typeset listVarEnv
393            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"
394            IGCM_sys_RshPost <<-EOF
395            export DEBUG_debug=${DEBUG_debug}
396            export MODIPSL=${MODIPSL}
397            export libIGCM_SX=${libIGCM}
398            export libIGCM=${libIGCM_POST}
399            export SUBMIT_DIR=${SUBMIT_DIR}
400            export REBUILD_DIR=${REBUILD_DIR}
401            export POST_DIR=${POST_DIR}
402            export MASTER=${MASTER}
403            export RebuildFromArchive=${config_Post_RebuildFromArchive}
404            export DateBegin=${DateBegin}
405            export PeriodDateBegin=${PeriodDateBegin}
406            export PeriodDateEnd=${PeriodDateEnd}
407            export NbRebuildDir=${NbRebuildDir}
408            export StandAlone=false
409            export RESOL_ATM=${RESOL_ATM}
410            export RESOL_OCE=${RESOL_OCE}
411            export RESOL_ICE=${RESOL_ICE}
412            export RESOL_MBG=${RESOL_MBG}
413            export RESOL_SRF=${RESOL_SRF}
414            export RESOL_SBG=${RESOL_SBG}
415            export listVarEnv=${listVarEnv}
416            . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
417            . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
418            IGCM_sys_MkdirWork ${POST_DIR}
419            IGCM_debug_Verif_Exit
420            IGCM_sys_QsubPost rebuild_fromArchive
421EOF
422        else
423            #
424            IGCM_debug_Print 2 "REBUILD POST-TREATMENT FROM WORKDIR:"
425            echo
426            #
427            typeset listVarEnv
428            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"
429            IGCM_sys_RshPost <<-EOF
430            export DEBUG_debug=${DEBUG_debug}
431            export MODIPSL=${MODIPSL}
432            export libIGCM_SX=${libIGCM}
433            export libIGCM=${libIGCM_POST}
434            export SUBMIT_DIR=${SUBMIT_DIR}
435            export REBUILD_DIR=${REBUILD_DIR}
436            export POST_DIR=${POST_DIR}
437            export MASTER=${MASTER}
438            export RebuildFromArchive=${config_Post_RebuildFromArchive}
439            export DateBegin=${DateBegin}
440            export PeriodDateBegin=${PeriodDateBegin}
441            export PeriodDateEnd=${PeriodDateEnd}
442            export NbRebuildDir=${NbRebuildDir}
443            export StandAlone=false
444            export RESOL_ATM=${RESOL_ATM}
445            export RESOL_OCE=${RESOL_OCE}
446            export RESOL_ICE=${RESOL_ICE}
447            export RESOL_MBG=${RESOL_MBG}
448            export RESOL_SRF=${RESOL_SRF}
449            export RESOL_SBG=${RESOL_SBG}
450            export listVarEnv=${listVarEnv}
451            . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
452            . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
453            IGCM_sys_MkdirWork ${POST_DIR}
454            IGCM_debug_Verif_Exit
455            IGCM_sys_QsubPost rebuild_fromWorkdir
456EOF
457        fi
458    fi
459
460    IGCM_debug_PopStack "IGCM_post_Submit"
461}
462
463#===================================
464function IGCM_post_CheckModuloFrequency
465{
466    IGCM_debug_PushStack "IGCM_post_CheckModuloFrequency" $*
467
468    set -vx
469
470    # Used by IGCM_config_Check
471    # from 2 libIGCM compatible frequency (*Y, *M, *D, *y, *m, *d)
472    # Issue an exit instruction IGCM_debug_Exit if there modulo is not zero
473    # Input parameter are the name of the variable, not the frequency value itself
474    # example
475    # IGCM_post_ModuloFrequency config_Post_RebuildFrequency config_UserChoices_PeriodLength
476
477    typeset MasterName SlaveName MasterFrequency SlaveFrequency PeriodMasterYear PeriodMasterMonth PeriodMasterDay PeriodSlaveYear PeriodSlaveMonth PeriodSlaveDay
478
479    # Get the name of the variable
480    MasterName=$1
481    SlaveName=$2
482    # Get the value the above name points to
483    MasterFrequency=$( eval echo \${${1}} )
484    SlaveFrequency=$( eval echo \${${2}} )
485
486    echo
487    IGCM_debug_Print 1 "IGCM_post_CheckModuloFrequency : Master=${MasterFrequency} Slave=${SlaveFrequency}"
488    echo
489
490    case ${MasterFrequency} in
491        *y|*Y)
492            PeriodMasterYear=$( echo ${MasterFrequency} | sed -e "s/[yY]//" )
493            case ${SlaveFrequency} in
494                *Y|*y)
495                    PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
496                    if ( [ ${PeriodSlaveYear} -gt ${PeriodMasterYear} ] || \
497                        [ $(( ${PeriodMasterYear} % ${PeriodSlaveYear} )) -ne 0 ] )then
498                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
499                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
500                        IGCM_debug_Exit "Check your frequency"
501                    fi ;;
502                *M|*m)
503                    PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
504                    if ( [ ${PeriodSlaveMonth} -gt $(( ${PeriodMasterYear} * 12 )) ] || \
505                        [ $(( ( ${PeriodMasterYear} * 12 ) % ${PeriodSlaveMonth} )) -ne 0 ] ) ; then
506                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
507                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
508                        IGCM_debug_Exit "Check your frequency"
509                    fi ;;
510                *D|*d)
511                    PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
512                    NbDays=$( IGCM_date_DaysInYear ${year} )
513                    if [ ${config_UserChoices_CalendarType} = 360d ] || [ ${config_UserChoices_CalendarType} = noleap ] ; then
514                        if ( [ ${PeriodSlaveDay} -gt $(( ${PeriodMasterYear} * ${NbDays} )) ] || \
515                            [ $(( ( ${PeriodMasterYear} * ${NbDays} ) % ${PeriodSlaveDay} )) -ne 0 ] ; ) then
516                            IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
517                            IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
518                            IGCM_debug_Exit "Check your frequency"
519                        fi
520                    else
521                        IGCM_debug_Print 3 "For ${MasterName} with leap calendar:"
522                        IGCM_debug_Print 3 "We have a daily ${SlaveName} frequency and ${MasterName}=${MasterFrequency}"
523                        IGCM_debug_Print 3 "No post-treatment. Case not properly handle at this moment."
524                        IGCM_debug_Exit "Check your frequency"
525                    fi ;;
526            esac ;;
527        *M|*m)
528            PeriodMasterMonth=$( echo ${MasterFrequency} | sed -e "s/[mM]//" )
529            case ${SlaveFrequency} in               
530                *Y|*y)
531                    PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
532                    if ( [ ${PeriodMasterMonth} -gt $(( ${PeriodSlaveYear} * 12 )) ] || \
533                        [ $(( ${PeriodMasterMonth} % ( ${PeriodSlaveYear} * 12 ) )) -ne 0 ] ) ; then
534                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
535                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
536                        IGCM_debug_Exit "Check your frequency"
537                    fi ;;
538                *M|*m)
539                    PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
540                    if ( [ ${PeriodSlaveMonth} -gt ${PeriodMasterMonth} ] || \
541                        [ $(( ${PeriodMasterMonth} % ${PeriodSlaveMonth} )) -ne 0 ] ) ;  then           
542                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
543                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
544                        IGCM_debug_Exit "Check your frequency"
545                    fi ;;
546                *D|*d)
547                    IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
548                    IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
549                    IGCM_debug_Exit "Check your frequency" ;;
550            esac ;;
551        *D|*d)
552            PeriodMasterDay=$( echo ${MasterFrequency} | sed -e "s/[dD]//" )
553            case ${SlaveFrequency} in
554                *Y|*y)
555                    IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
556                    IGCM_debug_Print 3 "${MasterName} frequency ${MasterFrequency}"
557                    IGCM_debug_Exit "Check your frequency" ;;
558                *M|*m)
559                    IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
560                    IGCM_debug_Print 3 "${MasterName} frequency ${MasterFrequency}"
561                    IGCM_debug_Exit "Check your frequency" ;;
562                *D|*d)
563                    PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
564                    if ( [ ${PeriodSlaveDay} -gt ${PeriodMasterDay} ] || \
565                        [ $(( ${PeriodMasterDay} % ${PeriodSlaveDay} )) -ne 0 ] ) ;  then
566                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
567                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
568                        IGCM_debug_Exit "Check your frequency"
569                    fi ;;
570            esac ;;
571        NONE|none) 
572            ;;
573        *)
574            IGCM_debug_Print 3 "KeyWord ${MasterFrequency} not allowed for ${MasterName} in config.card"
575            IGCM_debug_Exit "Check your ${MasterName} in config.card" ;;
576    esac
577
578    IGCM_debug_PopStack "IGCM_post_CheckModuloFrequency"
579}
580
581#===================================
582function IGCM_post_ModuloRuntimeFrequency
583{
584    IGCM_debug_PushStack "IGCM_post_ModuloRuntimeFrequency" $*
585
586    set -vx
587
588    # Used by IGCM_post_Configure
589    # - from libIGCM (config_UserChoices_PeriodLength frequency * CumulPeriod) and
590    # - post-processing compatible frequency (*Y, *M, *D, *y, *m, *d)
591    # --> turn on post-processing submission when their modulo is zero
592    # Input parameter are the name of the variable, not the frequency value itself
593    # example
594    # IGCM_post_ModuloRuntimeFrequency config_Post_SeasonalFrequency config_UserChoices_PeriodLength
595
596    typeset MasterName SlaveName MasterFrequency SlaveFrequency PeriodMasterYear PeriodMasterMonth PeriodMasterDay PeriodSlaveYear PeriodSlaveMonth PeriodSlaveDay
597
598    # Get the name of the variable
599    MasterName=$1
600    SlaveName=$2
601 
602    # Get the value the above name points to
603    eval MasterFrequency=\${${1}}
604    eval SlaveFrequency=\${${2}}
605
606    echo
607    IGCM_debug_Print 1 "IGCM_post_ModuloRuntimeFrequency : Master=${MasterFrequency} Slave=${SlaveFrequency} CumulPeriod=${CumulPeriod}"
608    echo
609
610    case ${MasterFrequency} in
611        *y|*Y)
612            PeriodMasterYear=$( echo ${MasterFrequency} | sed -e "s/[yY]//" )
613            case ${SlaveFrequency} in
614                *Y|*y)
615                    PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
616                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveYear} - ${PeriodOffset} ) % ${PeriodMasterYear} )) -eq 0 ] ;  then
617                        if [ $(( ${CumulPeriod} * ${PeriodSlaveYear} - ${PeriodOffset} )) -ne 0 ] ; then
618                            eval ${post_freq}=true ; POST=true
619                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterYear} / ${PeriodSlaveYear} ))
620                        fi
621                    fi;;
622                *M|*m)
623                    PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
624                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveMonth} - ${PeriodOffset} * 12 ) % ( ${PeriodMasterYear} * 12 ) )) -eq 0 ] ; then
625                        if [ $(( ${CumulPeriod} * ${PeriodSlaveMonth} - ${PeriodOffset} * 12 )) -ne 0 ] ; then
626                            eval ${post_freq}=true ; POST=true
627                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ( 12 * ${PeriodMasterYear} ) / ${PeriodSlaveMonth} ))
628                        fi
629                    fi;;
630                *D|*d)
631                    PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
632                    NbDays=$( IGCM_date_DaysInYear ${year} )
633                    if [ $(( ( ${CumulPeriod} - ( ${PeriodOffset} * ${NbDays} / ${PeriodSlaveDay} ) ) % ( ${NbDays} * ${PeriodMasterYear} / ${PeriodSlaveDay} ) )) -eq 0 ] ; then
634                        if [ $(( ${CumulPeriod} - ( ${PeriodOffset} * ${NbDays} / ${PeriodSlaveDay} ) )) -ne 0 ] ; then
635                            eval ${post_freq}=true ; POST=true
636                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ( ${NbDays} * ${PeriodMasterYear} ) / ${PeriodSlaveDay} ))
637                        fi
638                    fi;;
639            esac ;;
640        *M|*m)
641            PeriodMasterMonth=$( echo ${MasterFrequency} | sed -e "s/[mM]//" )
642            case ${SlaveFrequency} in
643                *Y|*y)
644                    PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
645                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveYear} * 12 - ${PeriodOffset} ) % ( ${PeriodMasterMonth} ) )) -eq 0 ] ; then
646                        if [ $(( ${CumulPeriod} * ${PeriodSlaveYear} * 12 - ${PeriodOffset} )) -ne 0 ] ; then
647                            eval ${post_freq}=true ; POST=true
648                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterMonth} / ( 12 * ${PeriodSlaveYear} ) ))
649                        fi
650                    fi;;
651                *M|*m)
652                    PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
653                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveMonth} - ${PeriodOffset} ) % ${PeriodMasterMonth} )) -eq 0 ] ;  then
654                        if [ $(( ${CumulPeriod} * ${PeriodSlaveMonth} -  ${PeriodOffset} )) -ne 0 ] ; then
655                            eval ${post_freq}=true ; POST=true
656                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterMonth} / ${PeriodSlaveMonth} ))
657                        fi
658                    fi;;
659                *D|*d)
660                    IGCM_debug_Print 3 "PeriodLength frequency ${SlaveFrequency} not compatbile with"
661                    IGCM_debug_Print 3 "${flag_post} frequency : ${MasterFrequency} " ;;
662            esac ;;
663        *D|*d)
664            PeriodMasterDay=$( echo ${MasterFrequency} | sed -e "s/[dD]//" )
665            case ${SlaveFrequency} in
666                *Y|*y)
667                    IGCM_debug_Print 3 "PeriodLength frequency ${SlaveFrequency} not compatbile with"
668                    IGCM_debug_Print 3 "${flag_post} frequency : ${MasterFrequency} " ;;
669                *M|*m)
670                    IGCM_debug_Print 3 "PeriodLength frequency ${SlaveFrequency} not compatbile with"
671                    IGCM_debug_Print 3 "${flag_post} frequency : ${MasterFrequency} " ;;
672                *D|*d)
673                    PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
674                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveDay} - ${PeriodOffset} ) % ${PeriodMasterDay} )) -eq 0 ] ;  then
675                        if [ $(( ${CumulPeriod} * ${PeriodSlaveDay} - ${PeriodOffset} )) -ne 0 ] ; then
676                            eval ${post_freq}=true ; POST=true
677                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterDay} / ${PeriodSlaveDay} ))
678                        fi
679                    fi;;
680            esac ;;
681        NONE|none)
682            ;;
683        *)
684            IGCM_debug_Print 3 "KeyWord not allowed for ${post_freq} in config.card"
685            ;;
686    esac
687
688    IGCM_debug_PopStack "IGCM_post_ModuloRuntimeFrequency"
689}
Note: See TracBrowser for help on using the repository browser.