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

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