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

Last change on this file since 590 was 590, checked in by sdipsl, 12 years ago
  • can extract needed restart from a tar (up to 20 minutes on titane)
    • still to do : introduce a lag when cleaning the restart buffer so that we don't look into the tar too often
    • still to do : work on the clean_month procedure
  • rebuild process submit pack_output process if needed
    • still to do : a pack_output able to submit create_ts/create_se if needed
  • bugfixes/cosmetics/cleaning
  • SX9 and titane OK.
  • 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: 39.1 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  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  #============== PACK PROCESSING FOR RESTART AND DEBUG FILES =============#
415  if [ ${PackFrequency} = true ] ; then
416    IGCM_debug_Print 1 "PACK POST-PROCESSING"
417    echo
418    ## Need to Remember This One
419    SavedDateBegin=${DateBegin}
420    ## Need to Remember This One
421    SavedDateEnd=${DateEnd}
422    #
423    DaysTemp=$(( $( IGCM_date_DaysInPreviousPeriod ${PeriodDateEnd} ${config_Post_PackFrequency} end ) - 1 ))
424    #
425    PackDateBegin=$( IGCM_date_AddDaysToGregorianDate ${PeriodDateEnd} -${DaysTemp} )
426    #
427    script=pack_debug
428    #
429    Script_Post_Output=${script}.${PeriodDateEnd}
430    #
431    listVarEnv="DEBUG_debug,MODIPSL,libIGCM,libIGCM_SX,SUBMIT_DIR,POST_DIR,MASTER,DateBegin,DateEnd,PeriodPack,StandAlone"
432    IGCM_sys_RshPost <<-EOF
433    export DEBUG_debug=${DEBUG_debug}
434    export MODIPSL=${MODIPSL}
435    export libIGCM_SX=${libIGCM}
436    export libIGCM=${libIGCM_POST}
437    export SUBMIT_DIR=${SUBMIT_DIR}
438    export POST_DIR=${POST_DIR}
439    export MASTER=${MASTER}
440    export DateBegin=${PackDateBegin}
441    export DateEnd=${PeriodDateEnd}
442    export PeriodPack=${config_Post_PackFrequency}
443    export StandAlone=false
444    export listVarEnv=${listVarEnv}
445    export Script_Post_Output=${Script_Post_Output}
446    . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
447    . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
448    IGCM_sys_MkdirWork ${POST_DIR}
449    IGCM_debug_Verif_Exit_Post
450    IGCM_sys_QsubPost ${script}
451EOF
452    #
453    script=pack_restart
454    #
455    Script_Post_Output=${script}.${PeriodDateEnd}
456    #
457    IGCM_sys_RshPost <<-EOF
458    export DEBUG_debug=${DEBUG_debug}
459    export MODIPSL=${MODIPSL}
460    export libIGCM_SX=${libIGCM}
461    export libIGCM=${libIGCM_POST}
462    export SUBMIT_DIR=${SUBMIT_DIR}
463    export POST_DIR=${POST_DIR}
464    export MASTER=${MASTER}
465    export DateBegin=${PackDateBegin}
466    export DateEnd=${PeriodDateEnd}
467    export PeriodPack=${config_Post_PackFrequency}
468    export StandAlone=false
469    export listVarEnv=${listVarEnv}
470    export Script_Post_Output=${Script_Post_Output}
471    . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
472    . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
473    IGCM_sys_MkdirWork ${POST_DIR}
474    IGCM_debug_Verif_Exit_Post
475    IGCM_sys_QsubPost ${script}
476EOF
477    #
478    script=pack_output
479    #
480    Script_Post_Output=${script}.${PeriodDateEnd}
481    #
482    if [ ${RebuildFrequency} = true ] ; then
483      #
484      if [ -f ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh ] ; then
485        #
486#       if [ X${MASTER} = Xtitane ] ; then
487#         echo "IGCM_sys_RshPost <<-EOF"                     >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
488#       fi
489        echo "export DEBUG_debug=${DEBUG_debug}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
490        echo "export MODIPSL=${MODIPSL}                      " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
491        echo "export libIGCM_SX=${libIGCM}                   " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
492        echo "export libIGCM=${libIGCM_POST}                 " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
493        echo "export SUBMIT_DIR=${SUBMIT_DIR}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
494        echo "export POST_DIR=${POST_DIR}                    " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
495        echo "export MASTER=${MASTER}                        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
496        echo "export DateBegin=${PackDateBegin}              " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
497        echo "export DateEnd=${PeriodDateEnd}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
498        echo "export PeriodPack=${config_Post_PackFrequency} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
499        echo "export StandAlone=false                        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
500        echo "export listVarEnv=${listVarEnv}                " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
501        echo "export Script_Post_Output=${Script_Post_Output}" >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
502        echo "export script=${script}                        " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
503#       if [ X${MASTER} = Xtitane ] ; then
504#         echo ". ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh" >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
505#         echo ". ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh"     >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
506#       fi
507        echo "IGCM_sys_MkdirWork ${POST_DIR}                 " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
508        echo "IGCM_debug_Verif_Exit_Post                     " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
509        echo "IGCM_sys_QsubPost ${script}                    " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
510#       if [ X${MASTER} = Xtitane ] ; then
511#         echo "EOF"                                         >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
512#       fi
513      fi
514    else
515      IGCM_sys_RshPost <<-EOF
516    export DEBUG_debug=${DEBUG_debug}
517    export MODIPSL=${MODIPSL}
518    export libIGCM_SX=${libIGCM}
519    export libIGCM=${libIGCM_POST}
520    export SUBMIT_DIR=${SUBMIT_DIR}
521    export POST_DIR=${POST_DIR}
522    export MASTER=${MASTER}
523    export DateBegin=${PackDateBegin}
524    export DateEnd=${PeriodDateEnd}
525    export PeriodPack=${config_Post_PackFrequency}
526    export StandAlone=false
527    export listVarEnv=${listVarEnv}
528    export Script_Post_Output=${Script_Post_Output}
529    . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
530    . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
531    IGCM_sys_MkdirWork ${POST_DIR}
532    IGCM_debug_Verif_Exit_Post
533    IGCM_sys_QsubPost ${script}
534EOF
535    export DateBegin=${SavedDateBegin}
536    export DateEnd=${SavedDateEnd}
537    fi
538  fi
539
540  #============== REBUILD POST-PROCESSING =============#
541  if [ X${AsynchronousRebuild} = Xtrue ] ; then
542    # -----------------------------------------------------------------------------------
543    # Function IGCM_FlushRebuild define in rebuild.ksh has not been closed yet. Do it now
544    # -----------------------------------------------------------------------------------
545    if [ ${DRYRUN} -le 1 ] ; then
546      echo "IGCM_debug_PopStack \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
547      echo "}                                         " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh
548    fi
549    if [ ${config_Post_RebuildFromArchive} = true ] ; then
550      IGCM_sys_Put_Dir REBUILD_${PeriodDateBegin} ${REBUILD_DIR}
551    else
552      IGCM_sys_Mv      REBUILD_${PeriodDateBegin} ${REBUILD_DIR}
553    fi
554  fi
555  #
556  if [ ${RebuildFrequency} = true ] ; then
557    if ( [ ${config_Post_RebuildFromArchive} = true ] ) ; then
558      IGCM_debug_Print 1 "REBUILD POST-PROCESSING FROM ARCHIVE"
559      echo
560      #
561      script=rebuild_fromArchive
562    else
563      IGCM_debug_Print 1 "REBUILD POST-PROCESSING FROM WORKDIR"
564      echo
565      #
566      script=rebuild_fromWorkdir
567    fi
568    #
569    Script_Post_Output=${script}.${PeriodDateEnd}
570    #
571    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"
572    IGCM_sys_RshPost <<-EOF
573    export DEBUG_debug=${DEBUG_debug}
574    export MODIPSL=${MODIPSL}
575    export libIGCM_SX=${libIGCM}
576    export libIGCM=${libIGCM_POST}
577    export SUBMIT_DIR=${SUBMIT_DIR}
578    export REBUILD_DIR=${REBUILD_DIR}
579    export POST_DIR=${POST_DIR}
580    export MASTER=${MASTER}
581    export RebuildFromArchive=${config_Post_RebuildFromArchive}
582    export DateBegin=${DateBegin}
583    export PeriodDateBegin=${PeriodDateBegin}
584    export PeriodDateEnd=${PeriodDateEnd}
585    export NbRebuildDir=${NbRebuildDir}
586    export StandAlone=false
587    export RESOL_ATM=${RESOL_ATM}
588    export RESOL_OCE=${RESOL_OCE}
589    export RESOL_ICE=${RESOL_ICE}
590    export RESOL_MBG=${RESOL_MBG}
591    export RESOL_SRF=${RESOL_SRF}
592    export RESOL_SBG=${RESOL_SBG}
593    export listVarEnv=${listVarEnv}
594    export Script_Post_Output=${Script_Post_Output}
595    . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
596    . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
597    IGCM_sys_MkdirWork ${POST_DIR}
598    IGCM_debug_Verif_Exit_Post
599    IGCM_sys_QsubPost ${script}
600EOF
601  fi
602  IGCM_debug_PopStack "IGCM_post_Submit"
603}
604
605#===================================
606function IGCM_post_CheckModuloFrequency
607{
608  IGCM_debug_PushStack "IGCM_post_CheckModuloFrequency" $*
609
610  # Used by IGCM_config_Check
611  # from 2 libIGCM compatible frequency (*Y, *M, *D, *y, *m, *d)
612  # Issue an exit instruction IGCM_debug_Exit if there modulo is not zero
613  # Input parameter are the name of the variable, not the frequency value itself
614  # example
615  # IGCM_post_ModuloFrequency config_Post_RebuildFrequency config_UserChoices_PeriodLength
616
617  typeset MasterName SlaveName MasterFrequency SlaveFrequency PeriodMasterYear PeriodMasterMonth PeriodMasterDay PeriodSlaveYear PeriodSlaveMonth PeriodSlaveDay
618
619  # Get the name of the variable
620  MasterName=$1
621  SlaveName=$2
622  # Get the value the above name points to
623  MasterFrequency=$( eval echo \${${1}} )
624  SlaveFrequency=$( eval echo \${${2}} )
625
626  IGCM_debug_Print 2 "IGCM_post_CheckModuloFrequency : Master=${MasterFrequency} Slave=${SlaveFrequency}"
627
628  case ${MasterFrequency} in
629  *y|*Y)
630    PeriodMasterYear=$( echo ${MasterFrequency} | sed -e "s/[yY]//" )
631    case ${SlaveFrequency} in
632    *Y|*y)
633      PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
634      if ( [ ${PeriodSlaveYear} -gt ${PeriodMasterYear} ] || \
635        [ $(( ${PeriodMasterYear} % ${PeriodSlaveYear} )) -ne 0 ] )then
636        IGCM_debug_Print 1 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
637        IGCM_debug_Print 1 "${MasterName} frequency : ${MasterFrequency}"
638        IGCM_debug_Exit "Check your frequency"
639      fi ;;
640    *M|*m)
641      PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
642      if ( [ ${PeriodSlaveMonth} -gt $(( ${PeriodMasterYear} * 12 )) ] || \
643        [ $(( ( ${PeriodMasterYear} * 12 ) % ${PeriodSlaveMonth} )) -ne 0 ] ) ; then
644        IGCM_debug_Print 1 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
645        IGCM_debug_Print 1 "${MasterName} frequency : ${MasterFrequency}"
646        IGCM_debug_Exit "Check your frequency"
647      fi ;;
648    *D|*d)
649      PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
650      NbDays=$( IGCM_date_DaysInYear ${year} )
651      if [ ${config_UserChoices_CalendarType} = 360d ] || [ ${config_UserChoices_CalendarType} = noleap ] ; then
652        if ( [ ${PeriodSlaveDay} -gt $(( ${PeriodMasterYear} * ${NbDays} )) ] || \
653          [ $(( ( ${PeriodMasterYear} * ${NbDays} ) % ${PeriodSlaveDay} )) -ne 0 ] ; ) then
654          IGCM_debug_Print 1 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
655          IGCM_debug_Print 1 "${MasterName} frequency : ${MasterFrequency}"
656          IGCM_debug_Exit "Check your frequency"
657        fi
658      else
659        IGCM_debug_Print 1 "For ${MasterName} with leap calendar:"
660        IGCM_debug_Print 1 "We have a daily ${SlaveName} frequency and ${MasterName}=${MasterFrequency}"
661        IGCM_debug_Print 1 "No post-treatment. Case not properly handle at this moment by libIGCM. Sorry"
662        IGCM_debug_Exit    "Check your frequency ${MasterName} and choose a daily frequency for this one too."
663      fi ;;
664    esac ;;
665  *M|*m)
666    PeriodMasterMonth=$( echo ${MasterFrequency} | sed -e "s/[mM]//" )
667    case ${SlaveFrequency} in
668    *Y|*y)
669      PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
670      if ( [ ${PeriodMasterMonth} -gt $(( ${PeriodSlaveYear} * 12 )) ] || \
671        [ $(( ${PeriodMasterMonth} % ( ${PeriodSlaveYear} * 12 ) )) -ne 0 ] ) ; then
672        IGCM_debug_Print 1 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
673        IGCM_debug_Print 1 "${MasterName} frequency : ${MasterFrequency}"
674        IGCM_debug_Exit "Check your frequency"
675      fi ;;
676    *M|*m)
677      PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
678      if ( [ ${PeriodSlaveMonth} -gt ${PeriodMasterMonth} ] || \
679        [ $(( ${PeriodMasterMonth} % ${PeriodSlaveMonth} )) -ne 0 ] ) ;  then           
680        IGCM_debug_Print 1 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
681        IGCM_debug_Print 1 "${MasterName} frequency : ${MasterFrequency}"
682        IGCM_debug_Exit "Check your frequency"
683      fi ;;
684    *D|*d)
685      IGCM_debug_Print 1 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
686      IGCM_debug_Print 1 "${MasterName} frequency : ${MasterFrequency}"
687      IGCM_debug_Exit "Check your frequency" ;;
688    esac ;;
689  *D|*d)
690    PeriodMasterDay=$( echo ${MasterFrequency} | sed -e "s/[dD]//" )
691    case ${SlaveFrequency} in
692    *Y|*y)
693      IGCM_debug_Print 1 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
694      IGCM_debug_Print 1 "${MasterName} frequency ${MasterFrequency}"
695      IGCM_debug_Exit "Check your frequency" ;;
696    *M|*m)
697      IGCM_debug_Print 1 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
698      IGCM_debug_Print 1 "${MasterName} frequency ${MasterFrequency}"
699      IGCM_debug_Exit "Check your frequency" ;;
700    *D|*d)
701      PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
702      if ( [ ${PeriodSlaveDay} -gt ${PeriodMasterDay} ] || \
703        [ $(( ${PeriodMasterDay} % ${PeriodSlaveDay} )) -ne 0 ] ) ;  then
704        IGCM_debug_Print 1 "${SlaveName} frequency ${SlaveFrequency} not compatbile with"
705        IGCM_debug_Print 1 "${MasterName} frequency : ${MasterFrequency}"
706        IGCM_debug_Exit "Check your frequency"
707      fi ;;
708    esac ;;
709  NONE|none)
710    ;;
711  *)
712    IGCM_debug_Print 1 "KeyWord ${MasterFrequency} not allowed for ${MasterName} in config.card"
713    IGCM_debug_Exit "Check your ${MasterName} in config.card" ;;
714  esac
715
716  IGCM_debug_PopStack "IGCM_post_CheckModuloFrequency"
717}
718
719#===================================
720function IGCM_post_ModuloRuntimeFrequency
721{
722  IGCM_debug_PushStack "IGCM_post_ModuloRuntimeFrequency" $*
723
724  # Used by IGCM_post_Configure
725  # - from libIGCM (config_UserChoices_PeriodLength frequency * CumulPeriod) and
726  # - post-processing compatible frequency (*Y, *M, *D, *y, *m, *d)
727  # --> turn on post-processing submission when their modulo is zero
728  # Input parameter are the name of the variable, not the frequency value itself
729  # example
730  # IGCM_post_ModuloRuntimeFrequency config_Post_SeasonalFrequency config_UserChoices_PeriodLength
731
732  typeset MasterName SlaveName MasterFrequency SlaveFrequency PeriodMasterYear PeriodMasterMonth PeriodMasterDay PeriodSlaveYear PeriodSlaveMonth PeriodSlaveDay
733
734  # Get the name of the variable
735  MasterName=$1
736  SlaveName=$2
737 
738  # Get the value the above name points to
739  eval MasterFrequency=\${${1}}
740  eval SlaveFrequency=\${${2}}
741
742  echo
743  IGCM_debug_Print 2 "IGCM_post_ModuloRuntimeFrequency : Master=${MasterFrequency} Slave=${SlaveFrequency} CumulPeriod=${CumulPeriod}"
744
745  case ${MasterFrequency} in
746  *y|*Y)
747    PeriodMasterYear=$( echo ${MasterFrequency} | sed -e "s/[yY]//" )
748    case ${SlaveFrequency} in
749    *Y|*y)
750      PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
751      if [ $(( ( ${CumulPeriod} * ${PeriodSlaveYear} - ${PeriodOffset} ) % ${PeriodMasterYear} )) -eq 0 ] ;  then
752        if [ $(( ${CumulPeriod} * ${PeriodSlaveYear} - ${PeriodOffset} )) -ne 0 ] ; then
753          eval ${post_freq}=true ; POST=true
754          [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterYear} / ${PeriodSlaveYear} ))
755        fi
756      fi;;
757    *M|*m)
758      PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
759      if [ $(( ( ${CumulPeriod} * ${PeriodSlaveMonth} - ${PeriodOffset} * 12 ) % ( ${PeriodMasterYear} * 12 ) )) -eq 0 ] ; then
760        if [ $(( ${CumulPeriod} * ${PeriodSlaveMonth} - ${PeriodOffset} * 12 )) -ne 0 ] ; then
761          eval ${post_freq}=true ; POST=true
762          [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ( 12 * ${PeriodMasterYear} ) / ${PeriodSlaveMonth} ))
763        fi
764      fi;;
765    *D|*d)
766      PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
767      NbDays=$( IGCM_date_DaysInYear ${year} )
768      if [ $(( ( ${CumulPeriod} - ( ${PeriodOffset} * ${NbDays} / ${PeriodSlaveDay} ) ) % ( ${NbDays} * ${PeriodMasterYear} / ${PeriodSlaveDay} ) )) -eq 0 ] ; then
769        if [ $(( ${CumulPeriod} - ( ${PeriodOffset} * ${NbDays} / ${PeriodSlaveDay} ) )) -ne 0 ] ; then
770          eval ${post_freq}=true ; POST=true
771          [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ( ${NbDays} * ${PeriodMasterYear} ) / ${PeriodSlaveDay} ))
772        fi
773      fi;;
774    esac ;;
775  *M|*m)
776    PeriodMasterMonth=$( echo ${MasterFrequency} | sed -e "s/[mM]//" )
777    case ${SlaveFrequency} in
778    *Y|*y)
779      PeriodSlaveYear=$( echo ${SlaveFrequency} | sed -e "s/[yY]//" )
780      if [ $(( ( ${CumulPeriod} * ${PeriodSlaveYear} * 12 - ${PeriodOffset} ) % ( ${PeriodMasterMonth} ) )) -eq 0 ] ; then
781        if [ $(( ${CumulPeriod} * ${PeriodSlaveYear} * 12 - ${PeriodOffset} )) -ne 0 ] ; then
782          eval ${post_freq}=true ; POST=true
783          [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterMonth} / ( 12 * ${PeriodSlaveYear} ) ))
784        fi
785      fi;;
786    *M|*m)
787      PeriodSlaveMonth=$( echo ${SlaveFrequency} | sed -e "s/[mM]//" )
788      if [ $(( ( ${CumulPeriod} * ${PeriodSlaveMonth} - ${PeriodOffset} ) % ${PeriodMasterMonth} )) -eq 0 ] ;  then
789        if [ $(( ${CumulPeriod} * ${PeriodSlaveMonth} -  ${PeriodOffset} )) -ne 0 ] ; then
790          eval ${post_freq}=true ; POST=true
791          [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterMonth} / ${PeriodSlaveMonth} ))
792        fi
793      fi;;
794    *D|*d)
795      IGCM_debug_Print 1 "PeriodLength frequency ${SlaveFrequency} not compatbile with"
796      IGCM_debug_Print 1 "${flag_post} frequency : ${MasterFrequency} " ;;
797    esac ;;
798  *D|*d)
799    PeriodMasterDay=$( echo ${MasterFrequency} | sed -e "s/[dD]//" )
800    case ${SlaveFrequency} in
801    *Y|*y)
802      IGCM_debug_Print 1 "PeriodLength frequency ${SlaveFrequency} not compatbile with"
803      IGCM_debug_Print 1 "${flag_post} frequency : ${MasterFrequency} " ;;
804    *M|*m)
805      IGCM_debug_Print 1 "PeriodLength frequency ${SlaveFrequency} not compatbile with"
806      IGCM_debug_Print 1 "${flag_post} frequency : ${MasterFrequency} " ;;
807    *D|*d)
808      PeriodSlaveDay=$( echo ${SlaveFrequency} | sed -e "s/[dD]//" )
809      if [ $(( ( ${CumulPeriod} * ${PeriodSlaveDay} - ${PeriodOffset} ) % ${PeriodMasterDay} )) -eq 0 ] ;  then
810        if [ $(( ${CumulPeriod} * ${PeriodSlaveDay} - ${PeriodOffset} )) -ne 0 ] ; then
811          eval ${post_freq}=true ; POST=true
812          [ X${3} = XNbRebuildDir ] && NbRebuildDir=$(( ${PeriodMasterDay} / ${PeriodSlaveDay} ))
813        fi
814      fi;;
815    esac ;;
816  NONE|none)
817    ;;
818  *)
819    IGCM_debug_Print 1 "KeyWord not allowed for ${post_freq} in config.card"
820    ;;
821  esac
822
823  IGCM_debug_PopStack "IGCM_post_ModuloRuntimeFrequency"
824}
Note: See TracBrowser for help on using the repository browser.