source: trunk/libIGCM/AA_create_se @ 240

Last change on this file since 240 was 240, checked in by sdipsl, 14 years ago
  • Bugfix. update the counter before we bypass the loop when using new Seasonal option is not ON
  • 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: 21.9 KB
Line 
1#-Q- platine #!/usr/bin/ksh
2#-Q- platine ###################
3#-Q- platine ## PLATINE   CEA ##
4#-Q- platine ###################
5#-Q- platine #BSUB -J SE                     # Nom du job
6#-Q- platine #BSUB -N                        # message a la fin du job
7#-Q- platine #BSUB -n 1                      # reservation des processeurs pour le job
8#-Q- platine #BSUB -W 1:00                   # Limite temps
9#-Q- platine #BSUB -q post              # Passage en queue post
10#-Q- sx8brodie #!/bin/ksh
11#-Q- sx8brodie #######################
12#-Q- sx8brodie ## SX8BRODIE   IDRIS ##
13#-Q- sx8brodie #######################
14#-Q- sx8brodie # Temps Elapsed max. d'une requete hh:mm:ss
15#-Q- sx8brodie # @ wall_clock_limit = 20:00:00
16#-Q- sx8brodie # Nom du travail LoadLeveler
17#-Q- sx8brodie # @ job_name   = SE
18#-Q- sx8brodie # Fichier de sortie standard du travail       
19#-Q- sx8brodie # @ output     = $(job_name).$(jobid)
20#-Q- sx8brodie # Fichier de sortie d'erreur du travail
21#-Q- sx8brodie # @ error      =  $(job_name).$(jobid)
22#-Q- sx8brodie # pour recevoir un mail en cas de depassement du temps Elapsed (ou autre pb.)
23#-Q- sx8brodie # @ notification = error
24#-Q- sx8brodie # @ environment  = $DEBUG_debug ; $MODIPSL ; $libIGCM ; $libIGCM_SX ; $SUBMIT_DIR ; $REBUILD_DIR ; $RebuildFromArchive ; $POST_DIR ; $MASTER ; $DateBegin ; $PeriodDateBegin ; $PeriodDateEnd ; $NbRebuildDir ; $StandAlone ; $RESOL_ATM ; $RESOL_OCE ; $RESOL_ICE ; $RESOL_MBG ; $RESOL_SRF ; $RESOL_SBG ; $MASTER
25#-Q- sx8brodie # @ queue
26#-Q- aix6 #!/bin/ksh
27#-Q- aix6 #######################
28#-Q- aix6 ##   VARGAS   IDRIS  ##
29#-Q- aix6 #######################
30#-Q- aix6 # Temps Elapsed max. d'une requete hh:mm:ss
31#-Q- aix6 # @ wall_clock_limit = 20:00:00
32#-Q- aix6 # Nom du travail LoadLeveler
33#-Q- aix6 # @ job_name   = SE
34#-Q- aix6 # Fichier de sortie standard du travail       
35#-Q- aix6 # @ output     = $(job_name).$(jobid)
36#-Q- aix6 # Fichier de sortie d'erreur du travail
37#-Q- aix6 # @ error      =  $(job_name).$(jobid)
38#-Q- aix6 # pour recevoir un mail en cas de depassement du temps Elapsed (ou autre pb.)
39#-Q- aix6 # @ notification = error
40#-Q- aix6 # @ environment  = $DEBUG_debug ; $MODIPSL ; $libIGCM ; $libIGCM_SX ; $SUBMIT_DIR ; $REBUILD_DIR ; $RebuildFromArchive ; $POST_DIR ; $MASTER ; $DateBegin ; $PeriodDateBegin ; $PeriodDateEnd ; $NbRebuildDir ; $StandAlone ; $RESOL_ATM ; $RESOL_OCE ; $RESOL_ICE ; $RESOL_MBG ; $RESOL_SRF ; $RESOL_SBG ; $MASTER
41#-Q- aix6 # @ queue
42#-Q- sx8mercure #!/bin/ksh
43#-Q- sx8mercure ######################
44#-Q- sx8mercure ## SX8MERCURE   CEA ##
45#-Q- sx8mercure ######################
46#-Q- sx8mercure #PBS -N SE                   # Nom du job
47#-Q- sx8mercure #PBS -j o                    # regroupement des stdout et stderr
48#-Q- sx8mercure #PBS -S /usr/bin/ksh         # shell de soumission
49#-Q- sx8mercure #PBS -l memsz_job=1gb        # Limite memoire a 1 Go
50#-Q- sx8mercure #PBS -l cputim_job=1:00:00   # Limite temps a 1 heures
51#-Q- sx8mercure #PBS -q scalaire
52#-Q- sx9mercure #!/bin/ksh
53#-Q- sx9mercure ######################
54#-Q- sx9mercure ## SX9MERCURE   CEA ##
55#-Q- sx9mercure ######################
56#-Q- sx9mercure #MSUB -r SE             # Nom du job               
57#-Q- sx9mercure #MSUB -N 1              # Reservation du noeud
58#-Q- sx9mercure #MSUB -n 1              # Reservation du processus
59#-Q- sx9mercure #MSUB -T 86400          # Limite de temps elapsed du job
60#-Q- sx9mercure #MSUB -E "-j o"
61#-Q- sx9mercure #MSUB -E "-S /bin/ksh"
62#-Q- sx9mercure ##MSUB -e nco.out        # Sortie standard
63#-Q- sx9mercure ##MSUB -o nco.out        # Sortie standard
64#-Q- titane #!/bin/ksh
65#-Q- titane ######################
66#-Q- titane ## TITANE   CEA ##
67#-Q- titane ######################
68#-Q- titane #MSUB -r SE             # Nom du job               
69#-Q- titane #MSUB -N 1              # Reservation du noeud
70#-Q- titane #MSUB -n 1              # Reservation du processus
71#-Q- titane #MSUB -T 86400          # Limite de temps elapsed du job
72#-Q- titane #MSUB -E "-j o"
73#-Q- titane #MSUB -E "-S /bin/ksh"
74#-Q- titane ##MSUB -e nco.out        # Sortie standard
75#-Q- titane ##MSUB -o nco.out        # Sortie standard
76#-Q- default #!/bin/ksh
77#-Q- default ##################
78#-Q- default ## DEFAULT HOST ##
79#-Q- default ##################
80
81# $Date$
82# $Author$
83# $Revision$
84# IPSL (2006)
85#  This software is governed by the CeCILL licence see libIGCM/libIGCM_CeCILL.LIC
86
87#set -eu
88#set -vx
89
90date
91
92#-Q- sx8brodie export OMP_NUM_THREADS=1
93#-Q- aix6 export OMP_NUM_THREADS=1
94
95########################################################################
96
97#D- Flag to determine if this job in a standalone mode
98#D- Default : value from AA_job if any
99StandAlone=${StandAlone:=true}
100
101#D- Low level debug : to bypass lib test checks and stack construction
102#D- Default : value from AA_job if any
103libIGCM=${libIGCM:=::modipsl::/libIGCM}
104# WARNING for StandAlone used : To run this script on some machine,
105# you must check MirrorlibIGCM variable in sys library.
106# If this variable is true, you must use libIGCM_POST path instead
107# of your running libIGCM directory.
108
109#D- Flag to determine if rebuild process has been performed asynchronously
110#D- Possible value true or false.
111#D- If true raw files has allready been patched by rebuild job
112#D- If false create_ts will patch the raw files
113#D- Default : Value from AA_job if any. Usefull in StandAlone case.
114RebuildFrequency=${RebuildFrequency:=true}
115
116#D- Flag to determine atlas job's output directory
117#D- Default : value from libIGCM_post.ksh if any
118POST_DIR=${POST_DIR:=${PBS_O_WORKDIR}}
119
120#D- Increased verbosity (1, 2, 3)
121#D- Default : value from AA_job if any
122Verbosity=${Verbosity:=3}
123
124#D- Low level debug : to bypass lib test checks and stack construction
125#D- Default : value from AA_job if any
126DEBUG_debug=${DEBUG_debug:=false}
127
128#D- TEMPORARY Flag to determine atmospheric resolution
129#D- Default : value from atmospheric driver if any
130RESOL_ATM=${RESOL_ATM:=ALL}
131
132#D- TEMPORARY Flag to determine ocean resolution
133#D- Default : value from ocean driver if any
134RESOL_OCE=${RESOL_OCE:=ORCA2}
135
136#D- TEMPORARY Flag to determine ice resolution
137#D- Default : value from ice driver if any
138RESOL_ICE=${RESOL_ICE:=ORCA2}
139
140#D- TEMPORARY Flag to determine marine biogeochemistry resolution
141#D- Default : value from ice driver if any
142RESOL_MBG=${RESOL_MBG:=ORCA2}
143
144#D- Flag to determine surface resolution
145#D- Default : value from surface driver if any
146RESOL_SRF=ALL
147
148#D- Flag to determine surface resolution
149#D- Default : value from surface driver if any
150RESOL_SBG=ALL
151
152########################################################################
153
154. ${libIGCM}/libIGCM_debug/libIGCM_debug.ksh
155      ( ${DEBUG_debug} ) && IGCM_debug_Check
156. ${libIGCM}/libIGCM_card/libIGCM_card.ksh
157     ( ${DEBUG_debug} ) && IGCM_card_Check
158. ${libIGCM}/libIGCM_date/libIGCM_date.ksh
159     ( ${DEBUG_debug} ) && IGCM_date_Check
160#-------
161. ${libIGCM}/libIGCM_sys/libIGCM_sys.ksh
162
163########################################################################
164
165#set -vx
166
167IGCM_sys_MkdirWork ${RUN_DIR_PATH}
168IGCM_sys_Cd ${RUN_DIR_PATH}
169
170if [ ${StandAlone} = true ] ; then
171    CARD_DIR=${SUBMIT_DIR}
172else
173    CARD_DIR=${RUN_DIR_PATH}/$( basename ${SUBMIT_DIR} )
174    IGCM_sys_Get_Master ${SUBMIT_DIR} ${RUN_DIR_PATH}
175fi
176
177#
178# First of all
179#
180IGCM_card_DefineArrayFromSection   ${CARD_DIR}/config.card UserChoices
181typeset option
182for option in ${config_UserChoices[*]} ; do
183    IGCM_card_DefineVariableFromOption ${CARD_DIR}/config.card UserChoices ${option}
184done
185#
186echo
187IGCM_debug_Print 1 "DefineArrayFromOption  : config_UserChoices"
188IGCM_debug_PrintVariables 3 config_UserChoices_JobName
189IGCM_debug_PrintVariables 3 config_UserChoices_LongName
190IGCM_debug_PrintVariables 3 config_UserChoices_TagName
191IGCM_debug_PrintVariables 3 config_UserChoices_CalendarType
192IGCM_debug_PrintVariables 3 config_UserChoices_DateBegin
193IGCM_debug_PrintVariables 3 config_UserChoices_DateEnd
194IGCM_debug_PrintVariables 3 config_UserChoices_PeriodLength
195echo
196
197#==================================
198
199R_SAVE=${R_OUT}/${config_UserChoices_TagName}/${config_UserChoices_JobName}
200#
201IGCM_card_DefineArrayFromSection   ${CARD_DIR}/config.card ListOfComponents
202#
203IGCM_card_DefineVariableFromOption ${CARD_DIR}/config.card Post SeasonalFrequency
204#
205# Determine period for seasonnal average. Default : value from AA_job if any
206#
207DateBegin=${DateBegin:=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateBegin} )}
208#
209PeriodDateEnd=${PeriodDateEnd:=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateEnd} )}
210#
211freq=$( echo ${config_Post_SeasonalFrequency} |  sed -e "s/[yY]//" )
212#
213an_fin=$(( $( IGCM_date_ConvertGregorianDateToJulian ${PeriodDateEnd} ) / 1000 ))
214an_deb=$( IGCM_date_YearDigit $(( an_fin - freq + 1 )) )
215an_fin=$( IGCM_date_YearDigit ${an_fin} )
216#
217# For each component selected determine which files need post-processing
218#
219for comp in ${config_ListOfComponents[*]} ; do
220    #
221    IGCM_card_DefineArrayFromOption ${CARD_DIR}/config.card ListOfComponents ${comp}
222    eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1
223    #
224    card=${CARD_DIR}/COMP/${compname}.card
225    IGCM_card_DefineArrayFromOption ${card} OutputFiles List
226    #
227    ListFilesName=${compname}_OutputFiles_List
228    eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1
229    #
230    if [ X${FileName0} != X${NULL_STR} ] ; then
231        #
232        # INITIALISATION
233        #
234        eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1
235        typeset i=2
236        #
237        until [ $i -gt $NbFiles ]; do
238            #
239            eval flag_post_=\${${ListFilesName}[$i]} > /dev/null 2>&1
240            eval flag_post=${flag_post_}
241            #
242            if [ X${flag_post} != XNONE ] ; then
243                #
244                # Check if seasonal is required for this file
245                #
246                IGCM_card_DefineArrayFromSection ${card} ${flag_post}
247                #
248                # Seasonal case : If option Seasonal is not found (old cards) put SEASONAL ON by default
249                #
250                # variable option allready typeset above
251                for option in $( eval echo \${${compname}_${flag_post}[*]} ) ; do
252                    if [ ${option} = Seasonal ] ; then
253                        FoundSeasonal=true
254                        IGCM_card_DefineVariableFromOption ${card} ${flag_post} Seasonal
255                    fi
256                done
257                #
258                if [ ! X${FoundSeasonal} = Xtrue ] ; then
259                    eval ${compname}_${flag_post}_Seasonal=ON
260                fi
261                #
262                if [ ! X$( eval echo \${${compname}_${flag_post}_Seasonal} ) = XON ] ; then
263                    let $(( i=i+3 ))
264                    continue
265                fi
266                #
267                # CREATE LIST
268                #
269                FILE=$( echo ${flag_post} | awk "-FPost_" '{print $2}' )
270                #
271                DIRECTORY=${R_SAVE}/${comp}/Analyse/SE
272                #
273                TestedFile=${config_UserChoices_JobName}_SE_${an_deb}_${an_fin}_${FILE}.nc
274                #
275                IGCM_sys_TestFileArchive ${DIRECTORY}/${TestedFile}
276                if [ ! $? = 0 ] ; then
277                    eval set +A LISTE_FILE_${comp} \$\{LISTE_FILE_${comp}[*]} ${FILE}
278                    if [ ! ${RebuildFrequency} = true ] ; then
279                        IGCM_card_DefineArrayFromOption ${card} Post_${FILE} Patches
280                        eval set +A LISTE_PATCHES_${FILE} \$\{${compname}_Post_${FILE}_Patches[*]}
281                        if [ X$( eval echo \${LISTE_PATCHES_${FILE}[0]} ) !=  X${NULL_STR} ]; then
282                            for Patch in $( eval echo \${LISTE_PATCHES_${FILE}[*]} ); do
283                                if [ Xload${Patch} != X ] ; then
284                                    . ${libIGCM}/libIGCM_post/IGCM_${Patch}.ksh
285                                    eval load${Patch}=loaded
286                                fi
287                            done
288                        fi
289                    fi
290                fi
291            fi
292            let $(( i=i+3 ))
293        done # until [ $i -eq $NbFiles ]
294    fi
295done         # for comp
296
297for comp in ${config_ListOfComponents[*]} ; do
298    #
299    eval R_OUT_${comp}=${R_SAVE}/${comp}
300    #
301    i=0
302    for file in $( eval echo \${LISTE_FILE_${comp}[*]} ); do
303        #
304        # Determine in which output can we find file
305        # IE : Output/MO or Output/DA or ...
306        #
307        FlagDir=$( echo ${file} | awk -F "_" '{print $1}' )
308        case ${FlagDir} in
309            1Y)    FreqDir=YE  ;;
310            1M)    FreqDir=MO  ;;
311            5D|1D) FreqDir=DA  ;;
312            HF)    FreqDir=HF  ;;
313            INS)   FreqDir=INS ;;
314        esac
315        #
316        RESULT_SE=${config_UserChoices_JobName}_SE_${an_deb}_${an_fin}_${file}.nc
317        # Do not redoo an existing SE
318        IGCM_sys_TestFileArchive ${R_SAVE}/${comp}/Analyse/SE/${RESULT_SE}
319        if [ $? = 0 ] ; then
320            continue
321        fi
322        #
323        eval file_path=\${R_OUT_${comp}}/Output/${FreqDir}/
324        #
325        case ${config_UserChoices_PeriodLength} in
326        # For Yearly simulation :
327        1Y|1y)
328          (( an = an_deb ))
329          # Initialize array
330          #set -A liste_file_se
331          #set -A liste_file_se_tmp
332          unset liste_file_se
333          unset liste_file_se_tmp
334          while [ ${an} -le ${an_fin} ] ; do
335              moisL=$( IGCM_date_DaysInMonth ${an} ${mois} )
336              #
337              an4=$(printf "%04i\n" ${an} )
338              #
339              diy=$( IGCM_date_DaysInYear $an4 )
340              afin=$( IGCM_date_AddDaysToGregorianDate ${an4}0101 $(( diy - 1 )) )
341              date=${an4}0101_${afin}
342              #set +A liste_file_se ${liste_file_se[*]} ${file_path}${config_UserChoices_JobName}_${date}_${file}.nc
343              #set +A liste_file_se_tmp ${liste_file_se_tmp[*]} ${config_UserChoices_JobName}_${date}_${file}.nc
344              liste_file_se[${#liste_file_se[*]}]=${file_path}${config_UserChoices_JobName}_${date}_${file}.nc
345              liste_file_se_tmp[${#liste_file_se_tmp[*]}]=${config_UserChoices_JobName}_${date}_${file}.nc
346              (( an = an + 1 ))
347          done
348          #
349          IGCM_sys_Get /l liste_file_se[*] ${RUN_DIR_PATH}
350          eval ExitFlag=false
351          IGCM_debug_Verif_Exit_Post
352         
353          # Apply IGCM_Patch if needed
354          if [ ! ${RebuildFrequency} = true ] ; then
355              if [ X$( eval echo \${LISTE_PATCHES_${file}[0]} ) !=  X${NULL_STR} ]; then
356                  for file_t in $( eval echo ${liste_file_se_tmp[*]} ); do
357                      for Patch in $( eval echo \${LISTE_PATCHES_${file}[*]} ); do
358                          IGCM_${Patch} ${file_t}
359                      done
360                  done
361              fi
362          fi
363                     
364          # Search of common list of variables to be treated
365          nbfile=0
366          for file_common_var in ${liste_file_se_tmp[*]} ; do
367              ncks -m ${file_common_var} | grep '# dim. =' | cut -d ':' -f 1 >> tmpfile_ncra
368              let nbfile=nbfile+1
369          done
370          list_var_final_ncra=`cat tmpfile_ncra | sort | uniq -c | awk -v nbfile=$nbfile '{if ($1 == nbfile) {print $2}}' | paste -s -d ','`
371          IGCM_sys_Rm tmpfile_ncra
372
373          for mois in  01 02 03 04 05 06 07 08 09 10 11 12 ; do
374          #
375              (( nb = ${mois} - 1 ))
376          #
377              OUT_SE[${nb}]=${config_UserChoices_JobName}_SE${mois}_${an_deb}_${an_fin}_${file}.nc
378              IGCM_sys_ncra -O -v ${list_var_final_ncra} -d time_counter,${nb},,12 ${liste_file_se_tmp[*]} ${OUT_SE[${nb}]}
379          done
380          IGCM_sys_Rm ${liste_file_se_tmp[*]}
381          eval ExitFlag=false
382          IGCM_debug_Verif_Exit_Post
383          ;;
384        # For Monthly simulation :
385        1M|1m)
386          for mois in  01 02 03 04 05 06 07 08 09 10 11 12 ; do
387              #
388              (( nb = ${mois} - 1 ))
389              #
390              OUT_SE[${nb}]=${config_UserChoices_JobName}_SE${mois}_${an_deb}_${an_fin}_${file}.nc
391              #
392              (( an = an_deb ))
393              # Initialize array
394              #set -A liste_file_se
395              #set -A liste_file_se_tmp
396              unset liste_file_se
397              unset liste_file_se_tmp
398              while [ ${an} -le ${an_fin} ] ; do
399                  moisL=$( IGCM_date_DaysInMonth ${an} ${mois} )
400                  #
401                  an4=$(printf "%04i\n" ${an} )
402                  #
403                  date=${an4}${mois}01_${an4}${mois}${moisL}
404                  #set +A liste_file_se ${liste_file_se[*]} ${file_path}${config_UserChoices_JobName}_${date}_${file}.nc
405                  #set +A liste_file_se_tmp ${liste_file_se_tmp[*]} ${config_UserChoices_JobName}_${date}_${file}.nc
406                  liste_file_se[${#liste_file_se[*]}]=${file_path}${config_UserChoices_JobName}_${date}_${file}.nc
407                  liste_file_se_tmp[${#liste_file_se_tmp[*]}]=${config_UserChoices_JobName}_${date}_${file}.nc
408
409                  (( an = an + 1 ))
410              done
411              #
412              IGCM_sys_Get /l liste_file_se[*] ${RUN_DIR_PATH}
413              eval ExitFlag=false
414              IGCM_debug_Verif_Exit_Post
415             
416              # Apply IGCM_Patch if needed
417              if [ ! ${RebuildFrequency} = true ] ; then
418                  if [ X$( eval echo \${LISTE_PATCHES_${file}[0]} ) !=  X${NULL_STR} ]; then
419                      for file_t in $( eval echo ${liste_file_se_tmp[*]} ); do
420                          for Patch in $( eval echo \${LISTE_PATCHES_${file}[*]} ); do
421                              IGCM_${Patch} ${file_t}
422                          done
423                      done
424                  fi
425              fi
426             
427              # Search of common list of variables to be treated
428              nbfile=0
429              for file_common_var in ${liste_file_se_tmp[*]} ; do
430                  ncks -m ${file_common_var} | grep '# dim. =' | cut -d ':' -f 1 >> tmpfile_ncra
431                  let nbfile=nbfile+1
432              done
433              list_var_final_ncra=`cat tmpfile_ncra | sort | uniq -c | awk -v nbfile=$nbfile '{if ($1 == nbfile) {print $2}}' | paste -s -d ','`
434              IGCM_sys_Rm tmpfile_ncra
435              IGCM_sys_ncra -O -v ${list_var_final_ncra} ${liste_file_se_tmp[*]} ${OUT_SE[${nb}]}
436
437              IGCM_sys_Rm ${liste_file_se_tmp[*]}
438              eval ExitFlag=false
439              IGCM_debug_Verif_Exit_Post
440          done
441          ;;
442        *D|*d)
443          for mois in  01 02 03 04 05 06 07 08 09 10 11 12 ; do
444              #
445              (( nb = ${mois} - 1 ))
446              #
447              OUT_SE[${nb}]=${config_UserChoices_JobName}_SE${mois}_${an_deb}_${an_fin}_${file}.nc
448              #
449              (( an = an_deb ))
450              # Initialize array
451              #set -A liste_file_se
452              #set -A liste_file_se_tmp
453              unset liste_file_se
454              unset liste_file_se_tmp
455              while [ ${an} -le ${an_fin} ] ; do
456                  moisL=$( IGCM_date_DaysInMonth ${an} ${mois} )
457                  #
458                  an4=$(printf "%04i\n" ${an} )
459                  #
460                  length_d=$(( ${config_UserChoices_PeriodLength} - 1 ))
461                  # for one day
462                  if [ ${length_d} -eq 1 ] ; then
463                      (( length_d = 0 ))
464                  fi
465                  (( day  = 1 ))
466                  while [ ${day} -le ${moisL} ] ; do
467                      day2=$(printf "%02i\n" ${day} )
468                      day_beg=${an4}${mois}${day2}
469                      day_end=$( IGCM_date_AddDaysToGregorianDate ${day_beg} ${length_d} )
470                      date=${an4}${mois}${day_beg}_${an4}${mois}${day_end}
471                      #set +A liste_file_se ${liste_file_se[*]} ${file_path}${config_UserChoices_JobName}_${date}_${file}.nc
472                      #set +A liste_file_se_tmp ${liste_file_se_tmp[*]} ${config_UserChoices_JobName}_${date}_${file}.nc
473                      liste_file_se[${#liste_file_se[*]}]=${file_path}${config_UserChoices_JobName}_${date}_${file}.nc
474                      liste_file_se_tmp[${#liste_file_se_tmp[*]}]=${config_UserChoices_JobName}_${date}_${file}.nc
475                      (( day = day + 1 ))
476                  done
477                  (( an = an + 1 ))
478              done
479              #
480              IGCM_sys_Get /l liste_file_se[*] ${RUN_DIR_PATH}
481              eval ExitFlag=false
482              IGCM_debug_Verif_Exit_Post
483             
484              # Apply IGCM_Patch if needed
485              if [ ! ${RebuildFrequency} = true ] ; then
486                  if [ X$( eval echo \${LISTE_PATCHES_${file}[0]} ) !=  X${NULL_STR} ]; then
487                      for file_t in $( eval echo ${liste_file_se_tmp[*]} ); do
488                          for Patch in $( eval echo \${LISTE_PATCHES_${file}[*]} ); do
489                              IGCM_${Patch} ${file_t}
490                          done
491                      done
492                  fi
493              fi
494
495              # Search of common list of variables to be treated
496              nbfile=0
497              for file_common_var in ${liste_file_se_tmp[*]} ; do
498                  ncks -m ${file_common_var} | grep '# dim. =' | cut -d ':' -f 1 >> tmpfile_ncra
499                  let nbfile=nbfile+1
500              done
501              list_var_final_ncra=`cat tmpfile_ncra | sort | uniq -c | awk -v nbfile=$nbfile '{if ($1 == nbfile) {print $2}}' | paste -s -d ','`
502              IGCM_sys_Rm tmpfile_ncra
503
504              IGCM_sys_ncra -O -v ${list_var_final_ncra} ${liste_file_se_tmp[*]} ${OUT_SE[${nb}]}
505              IGCM_sys_Rm ${liste_file_se_tmp[*]}
506              eval ExitFlag=false
507              IGCM_debug_Verif_Exit_Post
508          done
509          ;;
510        esac
511        #
512
513        # Search of common list of variables to be treated
514        nbfile=0
515        for file_common_var in ${OUT_SE[*]} ; do
516           ncks -m ${file_common_var} | grep '# dim. =' | cut -d ':' -f 1 >> tmpfile_ncrcat
517           let nbfile=nbfile+1
518        done
519        list_var_final_ncrcat=`cat tmpfile_ncrcat | sort | uniq -c | awk -v nbfile=$nbfile '{if ($1 == nbfile) {print $2}}' | paste -s -d ','`
520        IGCM_sys_Rm tmpfile_ncrcat
521
522        IGCM_sys_ncrcat -O -v ${list_var_final_ncrcat} ${OUT_SE[*]} ${RESULT_SE}
523        #
524        IGCM_sys_Rm ${OUT_SE[*]}
525        #
526        ${ncatted} -a modulo,time_counter,c,c," " ${RESULT_SE}
527        #
528        eval IGCM_sys_Put_Out ${RESULT_SE} \${R_OUT_${comp}}/Analyse/SE/${RESULT_SE}
529        IGCM_sys_Rm ${RESULT_SE}
530        #
531        eval ExitFlag=false
532        IGCM_debug_Verif_Exit_Post
533    done
534done
535
536# DODS copy
537for comp in ${config_ListOfComponents[*]} ; do
538    IGCM_sys_TestDirArchive ${R_SAVE}/${comp}/Analyse/SE
539    [ $? = 0 ] && IGCM_sys_Put_Dods ${comp}/Analyse/SE
540done
541
542YEARS=${an_deb}_${an_fin}
543
544export POST_DIR; export SUBMIT_DIR; export libIGCM; export R_INIT; export R_BC; export StandAlone
545export RESOL_ATM; export RESOL_OCE ; export RESOL_ICE ; export RESOL_MBG ; export RESOL_SRF ; export RESOL_SBG
546export R_SAVE; export config_UserChoices_JobName; export config_UserChoices_TagName; export YEARS;
547listVarEnv="POST_DIR,SUBMIT_DIR,libIGCM,R_INIT,R_BC,StandAlone,RESOL_ATM,RESOL_OCE,RESOL_ICE,RESOL_MBG,RESOL_SRF,RESOL_SBG,R_SAVE,config_UserChoices_JobName,config_UserChoices_TagName,YEARS"
548export listVarEnv;
549
550#D-
551# --------------------------------------------------------------------
552#D- Test if all was right before ATLAS
553# --------------------------------------------------------------------
554IGCM_debug_Verif_Exit_Post
555
556if [ ${config_UserChoices_TagName} = "IPSLCM4_v1_OASIS3" ] || \
557   [ ${config_UserChoices_TagName} = "IPSLCM4_v2" ]        || \
558   [ ${config_UserChoices_TagName} = "IPSL_ESM_V1" ] ; then
559    #
560    IGCM_sys_QsubPost atlas_ORCHIDEE     ;
561    IGCM_sys_QsubPost atlas_LMDZ         ;
562    IGCM_sys_QsubPost atlas_ORCA_LIM     ;
563    IGCM_sys_QsubPost additionnal        ;
564    #
565elif [ ${config_UserChoices_TagName} = "IPSLCM5" ] ; then
566    IGCM_sys_QsubPost atlas_ORCHIDEE     ;
567    IGCM_sys_QsubPost atlas_LMDZ         ;
568    IGCM_sys_QsubPost atlas_ORCA_LIM     ;
569    #
570elif [ ${config_UserChoices_TagName} = "LMDZ4OR" ]  || \
571     [ ${config_UserChoices_TagName} = "LMDZOR" ]   || \
572     [ ${config_UserChoices_TagName} = "LMDZ4OR_v2" ] ; then
573    #
574    IGCM_sys_QsubPost atlas_LMDZ         ;
575    IGCM_sys_QsubPost atlas_ORCHIDEE     ;
576    #
577elif [ ${config_UserChoices_TagName} = "LMDZ" ] ; then
578    #
579    IGCM_sys_QsubPost atlas_LMDZ         ;
580    #
581elif [ ${config_UserChoices_TagName} = "OL" ]      || \
582     [ ${config_UserChoices_TagName} = "OL2" ] ; then
583    #
584    IGCM_sys_QsubPost atlas_ORCHIDEE     ;
585    #
586elif [ ${config_UserChoices_TagName} = "ORCA2_LIM" ]       ||
587     [ ${config_UserChoices_TagName} = "ORCA2_LIM2" ]      ||
588     [ ${config_UserChoices_TagName} = "ORCA2_LIM2_PISCES" ] ; then
589    #
590    IGCM_sys_QsubPost atlas_ORCA_LIM     ;
591#    IGCM_sys_QsubPost additionnal        ;
592    #
593fi
594
595# Clean RUN_DIR_PATH (necessary for cesium)
596IGCM_sys_RmRunDir -Rf ${RUN_DIR_PATH}
Note: See TracBrowser for help on using the repository browser.