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

Last change on this file since 545 was 545, checked in by sdipsl, 12 years ago
  • clean_month.job adapted to R_BUFR
  • R_IN points to CCCWORKDIR /ccc/work/cont003/dsm/p86ipsl/IGCM
  • bugfixes, simplification, refactoring, cosmetics
  • Property licence set to
    The following licence information concerns ONLY the libIGCM tools
    ==================================================================

    Copyright © Centre National de la Recherche Scientifique CNRS
    Commissariat à l'Énergie Atomique CEA

    libIGCM : Library for Portable Models Computation of IGCM Group.

    IGCM Group is the french IPSL Global Climate Model Group.

    This library is a set of shell scripts and functions whose purpose is
    the management of the initialization, the launch, the transfer of
    output files, the post-processing and the monitoring of datas produce
    by any numerical program on any plateforme.

    This software is governed by the CeCILL license under French law and
    abiding by the rules of distribution of free software. You can use,
    modify and/ or redistribute the software under the terms of the CeCILL
    license as circulated by CEA, CNRS and INRIA at the following URL
    "http://www.cecill.info".

    As a counterpart to the access to the source code and rights to copy,
    modify and redistribute granted by the license, users are provided only
    with a limited warranty and the software's author, the holder of the
    economic rights, and the successive licensors have only limited
    liability.

    In this respect, the user's attention is drawn to the risks associated
    with loading, using, modifying and/or developing or reproducing the
    software by the user in light of its specific status of free software,
    that may mean that it is complicated to manipulate, and that also
    therefore means that it is reserved for developers and experienced
    professionals having in-depth computer knowledge. Users are therefore
    encouraged to load and test the software's suitability as regards their
    requirements in conditions enabling the security of their systems and/or
    data to be ensured and, more generally, to use and operate it in the
    same conditions as regards security.

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