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

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