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

Last change on this file since 437 was 417, checked in by sdipsl, 13 years ago
  • The bugfix to correct bug with TS 3D without chunck was wrong see ticket #52
  • unset must be done in the IGCM_flush_rebuild function or in the RshCall? due to variable scope consideration
  • 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: 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 ] && [ ${DRYRUN} -le 1 ] ; 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                          " >> ${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
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 ] && [ ${DRYRUN} -le 1 ] ; 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                          " >> ${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
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 ] && [ ${DRYRUN} -le 1 ] ; then
330            #
331            echo "export DEBUG_debug=${DEBUG_debug}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
332            echo "export MODIPSL=${MODIPSL}                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
333            echo "export libIGCM_SX=${libIGCM}                   " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
334            echo "export libIGCM=${libIGCM_POST}                 " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
335            echo "export SUBMIT_DIR=${SUBMIT_DIR}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
336            echo "export POST_DIR=${POST_DIR}                    " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
337            echo "export MASTER=${MASTER}                        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
338            echo "export RebuildFrequency=${RebuildFrequency}    " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
339            echo "export DateBegin=${DateBegin}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
340            echo "export PeriodDateEnd=${PeriodDateEnd}          " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
341            echo "export StandAlone=false                        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
342            echo "export RESOL_ATM=${RESOL_ATM}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
343            echo "export RESOL_OCE=${RESOL_OCE}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
344            echo "export RESOL_ICE=${RESOL_ICE}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
345            echo "export RESOL_MBG=${RESOL_MBG}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
346            echo "export RESOL_SRF=${RESOL_SRF}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
347            echo "export RESOL_SBG=${RESOL_SBG}                  " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
348            echo "export listVarEnv=${listVarEnv}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
349            echo "export Script_Post_Output=${Script_Post_Output}" >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
350            echo "IGCM_sys_MkdirWork ${POST_DIR}                 " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
351            echo "IGCM_debug_Verif_Exit                          " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
352            echo "IGCM_sys_QsubPost create_se                    " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
353            #
354        else
355            #
356            IGCM_sys_RshPost <<-EOF
357            export DEBUG_debug=${DEBUG_debug}
358            export MODIPSL=${MODIPSL}
359            export libIGCM_SX=${libIGCM}
360            export libIGCM=${libIGCM_POST}
361            export SUBMIT_DIR=${SUBMIT_DIR}
362            export POST_DIR=${POST_DIR}
363            export MASTER=${MASTER}
364            export RebuildFrequency=${RebuildFrequency}
365            export DateBegin=${DateBegin}
366            export PeriodDateEnd=${PeriodDateEnd}
367            export StandAlone=false
368            export RESOL_ATM=${RESOL_ATM}
369            export RESOL_OCE=${RESOL_OCE}
370            export RESOL_ICE=${RESOL_ICE}
371            export RESOL_MBG=${RESOL_MBG}
372            export RESOL_SRF=${RESOL_SRF}
373            export RESOL_SBG=${RESOL_SBG}
374            export listVarEnv=${listVarEnv}
375            export Script_Post_Output=${Script_Post_Output}
376            . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
377            . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
378            IGCM_sys_MkdirWork ${POST_DIR}
379            IGCM_debug_Verif_Exit
380            IGCM_sys_QsubPost create_se
381EOF
382        #
383        fi
384    fi
385
386    #============== REBUILD POST-TREATMENT =============#
387    if ( [ ! X${config_Post_RebuildFrequency} = X${NULL_STR} ] && [ ! X${config_Post_RebuildFrequency} = XNONE ] ) ; then
388        # -----------------------------------------------------------------------------------
389        # Function IGCM_FlushRebuild define in rebuild.ksh has not been closed yet. Do it now
390        # -----------------------------------------------------------------------------------
391        if [ ${DRYRUN} -le 1 ] ; then
392            echo "IGCM_debug_PopStack \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
393            echo "}                                         " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
394        fi
395        if [ ${config_Post_RebuildFromArchive} = true ] ; then
396            IGCM_sys_Put_Dir REBUILD_${PeriodDateBegin} ${REBUILD_DIR}
397        else
398            IGCM_sys_Mv      REBUILD_${PeriodDateBegin} ${REBUILD_DIR}
399        fi
400    fi
401    #
402    if [ ${RebuildFrequency} = true ] ; then
403        if ( [ ${config_Post_RebuildFromArchive} = true ] ) ; then
404            IGCM_debug_Print 2 "REBUILD POST-TREATMENT FROM ARCHIVE:"
405            echo
406            #
407            script=rebuild_fromArchive
408        else
409            IGCM_debug_Print 2 "REBUILD POST-TREATMENT FROM WORKDIR:"
410            echo
411            #
412            script=rebuild_fromWorkdir
413        fi
414        #
415        Script_Post_Output=${script}.${PeriodDateEnd}
416        #
417        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"
418        IGCM_sys_RshPost <<-EOF
419        export DEBUG_debug=${DEBUG_debug}
420        export MODIPSL=${MODIPSL}
421        export libIGCM_SX=${libIGCM}
422        export libIGCM=${libIGCM_POST}
423        export SUBMIT_DIR=${SUBMIT_DIR}
424        export REBUILD_DIR=${REBUILD_DIR}
425        export POST_DIR=${POST_DIR}
426        export MASTER=${MASTER}
427        export RebuildFromArchive=${config_Post_RebuildFromArchive}
428        export DateBegin=${DateBegin}
429        export PeriodDateBegin=${PeriodDateBegin}
430        export PeriodDateEnd=${PeriodDateEnd}
431        export NbRebuildDir=${NbRebuildDir}
432        export StandAlone=false
433        export RESOL_ATM=${RESOL_ATM}
434        export RESOL_OCE=${RESOL_OCE}
435        export RESOL_ICE=${RESOL_ICE}
436        export RESOL_MBG=${RESOL_MBG}
437        export RESOL_SRF=${RESOL_SRF}
438        export RESOL_SBG=${RESOL_SBG}
439        export listVarEnv=${listVarEnv}
440        export Script_Post_Output=${Script_Post_Output}
441        . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
442        . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
443        IGCM_sys_MkdirWork ${POST_DIR}
444        IGCM_debug_Verif_Exit
445        IGCM_sys_QsubPost ${script}
446EOF
447
448    fi
449
450    IGCM_debug_PopStack "IGCM_post_Submit"
451}
452
453#===================================
454function IGCM_post_CheckModuloFrequency
455{
456    IGCM_debug_PushStack "IGCM_post_CheckModuloFrequency" $*
457
458    # Used by IGCM_config_Check
459    # from 2 libIGCM compatible frequency (*Y, *M, *D, *y, *m, *d)
460    # Issue an exit instruction IGCM_debug_Exit if there modulo is not zero
461    # Input parameter are the name of the variable, not the frequency value itself
462    # example
463    # IGCM_post_ModuloFrequency config_Post_RebuildFrequency config_UserChoices_PeriodLength
464
465    typeset MasterName SlaveName MasterFrequency SlaveFrequency PeriodMasterYear PeriodMasterMonth PeriodMasterDay PeriodSlaveYear PeriodSlaveMonth PeriodSlaveDay
466
467    # Get the name of the variable
468    MasterName=$1
469    SlaveName=$2
470    # Get the value the above name points to
471    MasterFrequency=$( eval echo \${${1}} )
472    SlaveFrequency=$( eval echo \${${2}} )
473
474    echo
475    IGCM_debug_Print 1 "IGCM_post_CheckModuloFrequency : Master=${MasterFrequency} Slave=${SlaveFrequency}"
476    echo
477
478    case ${MasterFrequency} in
479        *y|*Y)
480            PeriodMasterYear=$( echo ${MasterFrequency} | sed -e "s/[yY]//" )
481            case ${SlaveFrequency} in
482                *Y|*y)
483                    PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
484                    if ( [ ${PeriodSlaveYear} -gt ${PeriodMasterYear} ] || \
485                        [ $(( ${PeriodMasterYear} % ${PeriodSlaveYear} )) -ne 0 ] )then
486                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
487                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
488                        IGCM_debug_Exit "Check your frequency"
489                    fi ;;
490                *M|*m)
491                    PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
492                    if ( [ ${PeriodSlaveMonth} -gt $(( ${PeriodMasterYear} * 12 )) ] || \
493                        [ $(( ( ${PeriodMasterYear} * 12 ) % ${PeriodSlaveMonth} )) -ne 0 ] ) ; then
494                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
495                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
496                        IGCM_debug_Exit "Check your frequency"
497                    fi ;;
498                *D|*d)
499                    PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
500                    NbDays=$( IGCM_date_DaysInYear ${year} )
501                    if [ ${config_UserChoices_CalendarType} = 360d ] || [ ${config_UserChoices_CalendarType} = noleap ] ; then
502                        if ( [ ${PeriodSlaveDay} -gt $(( ${PeriodMasterYear} * ${NbDays} )) ] || \
503                            [ $(( ( ${PeriodMasterYear} * ${NbDays} ) % ${PeriodSlaveDay} )) -ne 0 ] ; ) then
504                            IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
505                            IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
506                            IGCM_debug_Exit "Check your frequency"
507                        fi
508                    else
509                        IGCM_debug_Print 3 "For ${MasterName} with leap calendar:"
510                        IGCM_debug_Print 3 "We have a daily ${SlaveName} frequency and ${MasterName}=${MasterFrequency}"
511                        IGCM_debug_Print 3 "No post-treatment. Case not properly handle at this moment."
512                        IGCM_debug_Exit "Check your frequency"
513                    fi ;;
514            esac ;;
515        *M|*m)
516            PeriodMasterMonth=$( echo ${MasterFrequency} | sed -e "s/[mM]//" )
517            case ${SlaveFrequency} in               
518                *Y|*y)
519                    PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
520                    if ( [ ${PeriodMasterMonth} -gt $(( ${PeriodSlaveYear} * 12 )) ] || \
521                        [ $(( ${PeriodMasterMonth} % ( ${PeriodSlaveYear} * 12 ) )) -ne 0 ] ) ; then
522                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
523                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
524                        IGCM_debug_Exit "Check your frequency"
525                    fi ;;
526                *M|*m)
527                    PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
528                    if ( [ ${PeriodSlaveMonth} -gt ${PeriodMasterMonth} ] || \
529                        [ $(( ${PeriodMasterMonth} % ${PeriodSlaveMonth} )) -ne 0 ] ) ;  then           
530                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
531                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
532                        IGCM_debug_Exit "Check your frequency"
533                    fi ;;
534                *D|*d)
535                    IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
536                    IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
537                    IGCM_debug_Exit "Check your frequency" ;;
538            esac ;;
539        *D|*d)
540            PeriodMasterDay=$( echo ${MasterFrequency} | sed -e "s/[dD]//" )
541            case ${SlaveFrequency} in
542                *Y|*y)
543                    IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
544                    IGCM_debug_Print 3 "${MasterName} frequency ${MasterFrequency}"
545                    IGCM_debug_Exit "Check your frequency" ;;
546                *M|*m)
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                *D|*d)
551                    PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
552                    if ( [ ${PeriodSlaveDay} -gt ${PeriodMasterDay} ] || \
553                        [ $(( ${PeriodMasterDay} % ${PeriodSlaveDay} )) -ne 0 ] ) ;  then
554                        IGCM_debug_Print 3 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
555                        IGCM_debug_Print 3 "${MasterName} frequency : ${MasterFrequency}"
556                        IGCM_debug_Exit "Check your frequency"
557                    fi ;;
558            esac ;;
559        NONE|none) 
560            ;;
561        *)
562            IGCM_debug_Print 3 "KeyWord ${MasterFrequency} not allowed for ${MasterName} in config.card"
563            IGCM_debug_Exit "Check your ${MasterName} in config.card" ;;
564    esac
565
566    IGCM_debug_PopStack "IGCM_post_CheckModuloFrequency"
567}
568
569#===================================
570function IGCM_post_ModuloRuntimeFrequency
571{
572    IGCM_debug_PushStack "IGCM_post_ModuloRuntimeFrequency" $*
573
574    # Used by IGCM_post_Configure
575    # - from libIGCM (config_UserChoices_PeriodLength frequency * CumulPeriod) and
576    # - post-processing compatible frequency (*Y, *M, *D, *y, *m, *d)
577    # --> turn on post-processing submission when their modulo is zero
578    # Input parameter are the name of the variable, not the frequency value itself
579    # example
580    # IGCM_post_ModuloRuntimeFrequency config_Post_SeasonalFrequency config_UserChoices_PeriodLength
581
582    typeset MasterName SlaveName MasterFrequency SlaveFrequency PeriodMasterYear PeriodMasterMonth PeriodMasterDay PeriodSlaveYear PeriodSlaveMonth PeriodSlaveDay
583
584    # Get the name of the variable
585    MasterName=$1
586    SlaveName=$2
587 
588    # Get the value the above name points to
589    eval MasterFrequency=\${${1}}
590    eval SlaveFrequency=\${${2}}
591
592    echo
593    IGCM_debug_Print 1 "IGCM_post_ModuloRuntimeFrequency : Master=${MasterFrequency} Slave=${SlaveFrequency} CumulPeriod=${CumulPeriod}"
594    echo
595
596    case ${MasterFrequency} in
597        *y|*Y)
598            PeriodMasterYear=$( echo ${MasterFrequency} | sed -e "s/[yY]//" )
599            case ${SlaveFrequency} in
600                *Y|*y)
601                    PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
602                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveYear} - ${PeriodOffset} ) % ${PeriodMasterYear} )) -eq 0 ] ;  then
603                        if [ $(( ${CumulPeriod} * ${PeriodSlaveYear} - ${PeriodOffset} )) -ne 0 ] ; then
604                            eval ${post_freq}=true ; POST=true
605                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterYear} / ${PeriodSlaveYear} ))
606                        fi
607                    fi;;
608                *M|*m)
609                    PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
610                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveMonth} - ${PeriodOffset} * 12 ) % ( ${PeriodMasterYear} * 12 ) )) -eq 0 ] ; then
611                        if [ $(( ${CumulPeriod} * ${PeriodSlaveMonth} - ${PeriodOffset} * 12 )) -ne 0 ] ; then
612                            eval ${post_freq}=true ; POST=true
613                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ( 12 * ${PeriodMasterYear} ) / ${PeriodSlaveMonth} ))
614                        fi
615                    fi;;
616                *D|*d)
617                    PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
618                    NbDays=$( IGCM_date_DaysInYear ${year} )
619                    if [ $(( ( ${CumulPeriod} - ( ${PeriodOffset} * ${NbDays} / ${PeriodSlaveDay} ) ) % ( ${NbDays} * ${PeriodMasterYear} / ${PeriodSlaveDay} ) )) -eq 0 ] ; then
620                        if [ $(( ${CumulPeriod} - ( ${PeriodOffset} * ${NbDays} / ${PeriodSlaveDay} ) )) -ne 0 ] ; then
621                            eval ${post_freq}=true ; POST=true
622                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ( ${NbDays} * ${PeriodMasterYear} ) / ${PeriodSlaveDay} ))
623                        fi
624                    fi;;
625            esac ;;
626        *M|*m)
627            PeriodMasterMonth=$( echo ${MasterFrequency} | sed -e "s/[mM]//" )
628            case ${SlaveFrequency} in
629                *Y|*y)
630                    PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
631                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveYear} * 12 - ${PeriodOffset} ) % ( ${PeriodMasterMonth} ) )) -eq 0 ] ; then
632                        if [ $(( ${CumulPeriod} * ${PeriodSlaveYear} * 12 - ${PeriodOffset} )) -ne 0 ] ; then
633                            eval ${post_freq}=true ; POST=true
634                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterMonth} / ( 12 * ${PeriodSlaveYear} ) ))
635                        fi
636                    fi;;
637                *M|*m)
638                    PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
639                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveMonth} - ${PeriodOffset} ) % ${PeriodMasterMonth} )) -eq 0 ] ;  then
640                        if [ $(( ${CumulPeriod} * ${PeriodSlaveMonth} -  ${PeriodOffset} )) -ne 0 ] ; then
641                            eval ${post_freq}=true ; POST=true
642                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterMonth} / ${PeriodSlaveMonth} ))
643                        fi
644                    fi;;
645                *D|*d)
646                    IGCM_debug_Print 3 "PeriodLength frequency ${SlaveFrequency} not compatbile with"
647                    IGCM_debug_Print 3 "${flag_post} frequency : ${MasterFrequency} " ;;
648            esac ;;
649        *D|*d)
650            PeriodMasterDay=$( echo ${MasterFrequency} | sed -e "s/[dD]//" )
651            case ${SlaveFrequency} in
652                *Y|*y)
653                    IGCM_debug_Print 3 "PeriodLength frequency ${SlaveFrequency} not compatbile with"
654                    IGCM_debug_Print 3 "${flag_post} frequency : ${MasterFrequency} " ;;
655                *M|*m)
656                    IGCM_debug_Print 3 "PeriodLength frequency ${SlaveFrequency} not compatbile with"
657                    IGCM_debug_Print 3 "${flag_post} frequency : ${MasterFrequency} " ;;
658                *D|*d)
659                    PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
660                    if [ $(( ( ${CumulPeriod} * ${PeriodSlaveDay} - ${PeriodOffset} ) % ${PeriodMasterDay} )) -eq 0 ] ;  then
661                        if [ $(( ${CumulPeriod} * ${PeriodSlaveDay} - ${PeriodOffset} )) -ne 0 ] ; then
662                            eval ${post_freq}=true ; POST=true
663                            [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterDay} / ${PeriodSlaveDay} ))
664                        fi
665                    fi;;
666            esac ;;
667        NONE|none)
668            ;;
669        *)
670            IGCM_debug_Print 3 "KeyWord not allowed for ${post_freq} in config.card"
671            ;;
672    esac
673
674    IGCM_debug_PopStack "IGCM_post_ModuloRuntimeFrequency"
675}
Note: See TracBrowser for help on using the repository browser.