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

Last change on this file since 5 was 5, checked in by mmaipsl, 17 years ago

MM: correct Date, Author and Revision svn properties.

  • 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 Date Author Revision
File size: 9.0 KB
Line 
1#!/bin/ksh
2
3#**************************************************************
4# Author: Sebastien Denvil
5# Contact: Sebastien.Denvil@ipsl.jussieu.fr
6# $Date$
7# $Author$
8# $Revision$
9# IPSL (2006)
10#  This software is governed by the CeCILL licence see libIGCM/libIGCM_CeCILL.LIC
11# History:
12# Modification:
13#
14#**************************************************************
15
16#=======================================================================
17function IGCM_post_Initialize
18{
19    IGCM_debug_PushStack "IGCM_post_Initialize"
20
21    # Debug Print :
22    echo
23    IGCM_debug_Print 1 "IGCM_post_Initialize :"
24    echo
25
26    typeset POST NbDays PeriodEndJul PostEndJul LengthDays
27    POST=false
28
29    # READ TIME SERIES OR SEASONAL FREQUENCY
30    # AND TURN ON THE FLAG WHEN MODULO IS ZERO
31    for post_freq in RebuildFrequency TimeSeriesFrequency SeasonalFrequency ; do
32        #
33        # Initialize
34        #
35        eval ${post_freq}=false
36        #
37        # Define the variable ${config_Post_${post_freq}}
38        # who contains frequency for specific post-treatment
39        #
40        IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card Post ${post_freq}
41        #
42        # Extract frequency from above variable
43        #
44        config_Post_post_freq=$( eval echo \${config_Post_${post_freq}} )
45        #
46        if ( [ X${config_Post_post_freq} = X${NULL_STR} ] || [ X${config_Post_post_freq} = XNONE ] ) ; then
47          #
48          continue
49          #
50        fi
51        #
52        # For each componant select determine which files need post-processing
53        #
54        for comp in ${config_ListOfComponents[*]} ; do
55            #
56            #echo "-----"
57            eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1
58            ListFilesName=${compname}_OutputFiles_List
59            eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1
60            #
61            if [ X${FileName0} != X${NULL_STR} ] ; then
62              #
63              #IGCM_debug_Print 1 "Component      : ${compname}"
64              #
65              # INITIALISATION
66              #
67              eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1
68              typeset i=0
69              #
70              until [ $i -eq $NbFiles ]; do
71                #
72                eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1
73                eval file_in=${file_in_}
74                let $(( i_ = i+2 ))
75                eval flag_post_=\${${ListFilesName}[$i_]} > /dev/null 2>&1
76                eval flag_post=${flag_post_}
77                #
78                if [ X${flag_post} != XNONE ] ; then
79                  #
80                  # Initialize ${flag_post}_${compname}_${post_freq}
81                  #
82                  eval ${flag_post}_${compname}_${post_freq}=false
83                  #
84                  case ${config_Post_post_freq} in
85                    *y|*Y)
86                      PeriodYear=$( echo ${config_Post_post_freq} | sed -e "s/[yY]//" )
87                      case ${config_UserChoices_PeriodLength} in
88                        1Y|1y)
89                          if [ $( expr ${CumulPeriod} % ${PeriodYear}  ) -eq 0 ] ;  then
90                             eval ${flag_post}_${compname}_${post_freq}=true
91                             eval ${post_freq}=true
92                             POST=true
93                          fi ;;
94                        1M|1m)
95                          if [ $( expr ${CumulPeriod} % $( expr ${PeriodYear} \* 12 ) ) -eq 0 ] ; then
96                             eval ${flag_post}_${compname}_${post_freq}=true
97                             eval ${post_freq}=true
98                             POST=true
99                          fi ;;
100                        *D|*d)
101                          LengthDays=$( echo ${config_UserChoices_PeriodLength} | sed -e "s/[dD]//" )
102                          NbDays=$( IGCM_date_DaysInYear ${year} )
103                          if [ ${config_UserChoices_CalendarType} = 360d ] | [ ${config_UserChoices_CalendarType} = noleap ] ; then
104                             if [ $( expr ${CumulPeriod} % $( expr \( ${NbDays} \* ${PeriodYear} \/ ${LengthDays} \) ) ) -eq 0 ] ; then
105                                eval ${flag_post}_${compname}_${post_freq}=true
106                                eval ${post_freq}=true
107                                POST=true
108                             fi
109                          else
110                              if [ ${PeriodYear} -eq 1 ] ; then
111                                PeriodEndJul=$( IGCM_date_ConvertGregorianDateToJulian ${PeriodDateEnd} )
112                                PostEndJul=${year}${NbDays}
113                                #echo "PeriodYear=${PeriodYear} Year ; NbDays${NbDays} PeriodEndJul=${PeriodEndJul} PostEndJul=${PostEndJul}"
114                                if [ ${PostEndJul} -le ${PeriodEndJul} ] ; then
115                                   eval ${flag_post}_${compname}_${post_freq}=true
116                                   eval ${post_freq}=true
117                                   POST=true
118                                fi
119                              else
120                                echo "For ${post_freq}, for ${comp} and ${file_in} :"
121                                echo "We have a daily WriteFrequency and ${post_freq}=${PeriodYear}Y."
122                                echo "No post-treatment."
123                              fi
124                            fi;;
125                      esac ;;
126                    1M|1m)
127                      case ${config_UserChoices_PeriodLength} in
128                        1Y|1y)
129                          IGCM_debug_Print 3 "Frequency not allowed for TimeSeriesFrequency in ${flag_post}" ;;
130                        1M|1m)
131                          eval ${flag_post}_${compname}_${post_freq}=true
132                          eval ${post_freq}=true
133                          POST=true;;
134                        *D|*d)
135                          NbDays=$( IGCM_date_DaysInMonth ${year} ${month} )
136                          PeriodEndJul=$( IGCM_date_ConvertGregorianDateToJulian ${PeriodDateEnd} )
137                          PostEndJul=$( IGCM_date_ConvertGregorianDateToJulian ${year}${month}${NbDays} )
138                          #echo "year_month=${year}_${month} Month ; NbDays${NbDays} PeriodEndJul=${PeriodEndJul} PostEndJul=${PostEndJul}"
139                          if [ ${PostEndJul} -le ${PeriodEndJul} ] ; then
140                            eval ${flag_post}_${compname}_${post_freq}=true
141                            eval ${post_freq}=true
142                            POST=true
143                          fi
144                          ;;
145                      esac
146                        ;;
147                    NONE|none)
148                      ;;
149                    *)
150                      IGCM_debug_Print 3 "KeyWord not allowed for ${post_freq} in config.card"
151                      ;;
152                  esac
153                fi
154                let $(( i=i+3 ))
155              done
156            fi
157        done
158    done
159    IGCM_debug_Print 1 "POST-TREATEMENT flag value : ${POST}"
160    [ ${POST} = true ] && IGCM_post_Submit
161
162    IGCM_debug_PopStack "IGCM_post_Initialize"
163}
164
165function IGCM_post_Submit
166{
167    IGCM_debug_PushStack "IGCM_post_Submit"
168
169    # Debug Print :
170    echo
171    IGCM_debug_Print 1 "IGCM_post_Submit :"
172    echo
173
174    typeset comp
175
176    POST_DIR=${R_OUT_POST}/${config_UserChoices_TagName}/${config_UserChoices_JobName}
177    echo "POST_DIR = ${POST_DIR}"
178
179    #============== REBUILD POST-TREATMENT =============#
180    if [ ${RebuildFrequency} = true ] ; then
181        #
182        IGCM_debug_Print 2 "REBUILD POST-TREATMENT :"
183        echo
184        #
185        # BUILD A PACKED LIST FOR POST-TREATMENT JOB
186        # BECAUSE IT'S NOT POSSIBLE TO DEFINE DYNAMICAL
187        # VARIABLE NAME THROUGHT RSH !!
188        #
189        LISTE_PACK=" "
190        #
191    fi
192
193    #============ TIME SERIES POST-TREATMENT ===========#
194    if [ ${TimeSeriesFrequency} = true ] ; then
195
196        IGCM_debug_Print 2 "TIME SERIES POST-TREATMENT :"
197        echo
198        #
199        typeset listVarEnv
200        listVarEnv="MODIPSL,libIGCM,libIGCM_SX,SUBMIT_DIR,POST_DIR,DateBegin,PeriodDateEnd,StandAlone,RESOL_ATM,RESOL_OCE,RESOL_ICE,RESOL_SRF"
201        IGCM_sys_RshPost <<-EOF
202        export MODIPSL=${MODIPSL}
203        export libIGCM_SX=${libIGCM}
204        export libIGCM=${libIGCM_POST}
205        export SUBMIT_DIR=${SUBMIT_DIR}
206        export POST_DIR=${POST_DIR}
207        export DateBegin=${DateBegin}
208        export PeriodDateEnd=${PeriodDateEnd}
209        export StandAlone=false
210        export RESOL_ATM=${RESOL_ATM}
211        export RESOL_OCE=${RESOL_OCE}
212        export RESOL_ICE=${RESOL_ICE}
213        export RESOL_SRF=${RESOL_SRF}
214        export listVarEnv=${listVarEnv}
215        . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
216        . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
217        IGCM_sys_MkdirWork ${POST_DIR}
218        IGCM_debug_Verif_Exit
219        IGCM_sys_QsubPost create_ts
220EOF
221    fi
222
223    #=============  SEASONAL POST-TREATMENT ============#
224    if [ ${SeasonalFrequency} = true ] ; then
225        #
226        IGCM_debug_Print 2 "SEASONNAL POST-TREATMENT :"
227        echo
228        #
229        typeset listVarEnv
230        listVarEnv="MODIPSL,libIGCM,libIGCM_SX,SUBMIT_DIR,POST_DIR,DateBegin,PeriodDateEnd,StandAlone,RESOL_ATM,RESOL_OCE,RESOL_ICE,RESOL_SRF"
231        IGCM_sys_RshPost <<-EOF
232        export MODIPSL=${MODIPSL}
233        export SUBMIT_DIR=${SUBMIT_DIR}
234        export libIGCM_SX=${libIGCM}
235        export libIGCM=${libIGCM_POST}
236        export SUBMIT_DIR=${SUBMIT_DIR}
237        export POST_DIR=${POST_DIR}
238        export DateBegin=${DateBegin}
239        export PeriodDateEnd=${PeriodDateEnd}
240        export StandAlone=false
241        export RESOL_ATM=${RESOL_ATM}
242        export RESOL_OCE=${RESOL_OCE}
243        export RESOL_ICE=${RESOL_ICE}
244        export RESOL_SRF=${RESOL_SRF}
245        export listVarEnv=${listVarEnv}
246        . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh
247        . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh
248        IGCM_sys_MkdirWork ${POST_DIR}
249        IGCM_debug_Verif_Exit
250        IGCM_sys_QsubPost create_se
251EOF
252    fi
253
254    IGCM_debug_PopStack "IGCM_post_Submit"
255}
256
257
Note: See TracBrowser for help on using the repository browser.