source: branches/libIGCM_MPI_OpenMP/libIGCM_post/libIGCM_post.ksh @ 577

Last change on this file since 577 was 571, checked in by mafoipsl, 12 years ago

First try to merge libIGCM_MPI_OpenMP branch with libIGCM trunk revision 569. Tested on vargas with PackFrequency?=NONE included into config.card.

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