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

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