source: TOOLS/AA_stomate_flux_correction @ 1313

Last change on this file since 1313 was 1310, checked in by mmaipsl, 13 years ago

Script to correct CMIP5 stomate_ipcc files build with source code older than 01/08/10.

File size: 12.8 KB
Line 
1#-Q- cesium #!/bin/ksh
2#-Q- cesium ######################
3#-Q- cesium ## CESIUM   CEA ##
4#-Q- cesium ######################
5#-Q- cesium #MSUB -r SBGcorr             # Nom du job               
6#-Q- cesium #MSUB -N 1              # Reservation du noeud
7#-Q- cesium #MSUB -n 1              # Reservation du processus
8#-Q- cesium #MSUB -T 86400          # Limite de temps elapsed du job
9#-Q- cesium #MSUB -E "-j o"
10#-Q- cesium #MSUB -E "-S /bin/ksh"
11#-Q- platine #!/usr/bin/ksh
12#-Q- platine ###################
13#-Q- platine ## PLATINE   CEA ##
14#-Q- platine ###################
15#-Q- platine #BSUB -J SBGcorr                     # Nom du job
16#-Q- platine #BSUB -N                        # message a la fin du job
17#-Q- platine #BSUB -n 1                      # reservation des processeurs pour le job
18#-Q- platine #BSUB -W 1:00                   # Limite temps
19#-Q- platine #BSUB -q post                   # Passage en queue post
20#-Q- sx8brodie #!/bin/ksh
21#-Q- sx8brodie #######################
22#-Q- sx8brodie ## SX8BRODIE   IDRIS ##
23#-Q- sx8brodie #######################
24#-Q- sx8brodie # Temps Elapsed max. d'une requete hh:mm:ss
25#-Q- sx8brodie # @ wall_clock_limit = 20:00:00
26#-Q- sx8brodie # Nom du travail LoadLeveler
27#-Q- sx8brodie # @ job_name   = SBGcorr
28#-Q- sx8brodie # Fichier de sortie standard du travail       
29#-Q- sx8brodie # @ output     = $(job_name).$(jobid)
30#-Q- sx8brodie # Fichier de sortie d'erreur du travail
31#-Q- sx8brodie # @ error      =  $(job_name).$(jobid)
32#-Q- sx8brodie # pour recevoir un mail en cas de depassement du temps Elapsed (ou autre pb.)
33#-Q- sx8brodie # @ notification = error
34#-Q- sx8brodie # @ queue
35#-Q- aix6 #!/bin/ksh
36#-Q- aix6 #######################
37#-Q- aix6 ##   VARGAS   IDRIS  ##
38#-Q- aix6 #######################
39#-Q- aix6 # Temps Elapsed max. d'une requete hh:mm:ss
40#-Q- aix6 # @ wall_clock_limit = 20:00:00
41#-Q- aix6 # Nom du travail LoadLeveler
42#-Q- aix6 # @ job_name   = SBGcorr
43#-Q- aix6 # Fichier de sortie standard du travail
44#-Q- aix6 # @ output     = $(job_name).$(jobid)
45#-Q- aix6 # Fichier de sortie d'erreur du travail
46#-Q- aix6 # @ error      =  $(job_name).$(jobid)
47#-Q- aix6 # pour recevoir un mail en cas de depassement du temps Elapsed (ou autre pb.)
48#-Q- aix6 # @ notification = error
49#-Q- aix6 # @ queue
50#-Q- ulam #!/bin/ksh
51#-Q- ulam #######################
52#-Q- ulam ##   ULAM   IDRIS  ##
53#-Q- ulam #######################
54#-Q- ulam # Temps Elapsed max. d'une requete hh:mm:ss
55#-Q- ulam # @ wall_clock_limit = 20:00:00
56#-Q- ulam # Nom du travail LoadLeveler
57#-Q- ulam # @ job_name   = SBGcorr
58#-Q- ulam # Fichier de sortie standard du travail
59#-Q- ulam # @ output     = $(job_name).$(jobid)
60#-Q- ulam # Fichier de sortie d'erreur du travail
61#-Q- ulam # @ error      =  $(job_name).$(jobid)
62#-Q- ulam # pour recevoir un mail en cas de depassement du temps Elapsed (ou autre pb.)
63#-Q- ulam # @ notification = error
64#-Q- ulam # @ queue
65#-Q- sx8mercure #!/bin/ksh
66#-Q- sx8mercure ######################
67#-Q- sx8mercure ## SX8MERCURE   CEA ##
68#-Q- sx8mercure ######################
69#-Q- sx8mercure #PBS -N SBGcorr                   # Nom du job
70#-Q- sx8mercure #PBS -j o                    # regroupement des stdout et stderr
71#-Q- sx8mercure #PBS -S /usr/bin/ksh         # shell de soumission
72#-Q- sx8mercure #PBS -l memsz_job=1gb        # Limite memoire a 1 Go
73#-Q- sx8mercure #PBS -l cputim_job=24:00:00   # Limite temps a 2 heures
74#-Q- sx8mercure #PBS -q scalaire
75#-Q- sx9mercure #!/bin/ksh
76#-Q- sx9mercure #########################
77#-Q- sx9mercure ## CESIUM FOR SX9  CEA ##
78#-Q- sx9mercure #########################
79#-Q- sx9mercure #MSUB -r SBGcorr             # Nom du job               
80#-Q- sx9mercure #MSUB -N 1              # Reservation du noeud
81#-Q- sx9mercure #MSUB -n 1              # Reservation du processus
82#-Q- sx9mercure #MSUB -T 86400          # Limite de temps elapsed du job
83#-Q- sx9mercure #MSUB -E "-j o"
84#-Q- sx9mercure #MSUB -E "-S /bin/ksh"
85#-Q- titane #!/bin/ksh
86#-Q- titane ######################
87#-Q- titane ## TITANE   CEA ##
88#-Q- titane ######################
89#-Q- titane #MSUB -r SBGcorr             # Nom du job               
90#-Q- titane #MSUB -N 1              # Reservation du noeud
91#-Q- titane #MSUB -n 1              # Reservation du processus
92#-Q- titane #MSUB -T 86400          # Limite de temps elapsed du job
93#-Q- titane #MSUB -E "-j o"
94#-Q- titane #MSUB -E "-S /bin/ksh"
95#-Q- lxiv8 ######################
96#-Q- lxiv8 ## OBELIX      LSCE ##
97#-Q- lxiv8 ######################
98#-Q- lxiv8 #PBS -N SBGcorr
99#-Q- lxiv8 #PBS -m a
100#-Q- lxiv8 #PBS -j oe
101#-Q- lxiv8 #PBS -q medium
102#-Q- lxiv8 #PBS -o SBGcorr.$$
103#-Q- lxiv8 #PBS -S /bin/ksh
104#-Q- default #!/bin/ksh
105#-Q- default ##################
106#-Q- default ## DEFAULT HOST ##
107#-Q- default ##################
108
109#**************************************************************
110# Author: Sebastien Denvil
111# Contact: Sebastien.Denvil__at__ipsl.jussieu.fr
112# $Revision:: 414                                      $ Revision of last commit
113# $Author:: sdipsl                                     $ Author of last commit
114# $Date:: 2011-01-31 10:38:05 +0100 (lun. 31 janv. 201#$ Date of last commit
115# IPSL (2006)
116#  This software is governed by the CeCILL licence see libIGCM/libIGCM_CeCILL.LIC
117#
118#**************************************************************
119
120#set -eu
121#set -vx
122
123date
124
125#-Q- sx8brodie export OMP_NUM_THREADS=1
126#-Q- aix6 export OMP_NUM_THREADS=1
127#-Q- ulam export OMP_NUM_THREADS=1
128
129########################################################################
130
131#D- Low level debug : to bypass lib test checks and stack construction
132#D- Default : value from AA_job if any
133libIGCM=${libIGCM:=::modipsl::/libIGCM}
134# WARNING for StandAlone used : To run this script on some machine,
135# you must check MirrorlibIGCM variable in sys library.
136# If this variable is true, you must use libIGCM_POST path instead
137# of your running libIGCM directory.
138
139
140#D- Flag to determine job's output directory
141#D- Default : value from libIGCM_post.ksh if any
142POST_DIR=${POST_DIR:=${PBS_O_WORKDIR:=$(pwd)}}
143
144#D- Increased verbosity (1, 2, 3)
145#D- Default : value from AA_job if any
146Verbosity=${Verbosity:=3}
147
148#D- Experience type : DEB(ug), DEV(elopment), RUN (default)
149JobType=RUN
150
151########################################################################
152
153. ${libIGCM}/libIGCM_debug/libIGCM_debug.ksh
154      ( ${DEBUG_debug} ) && IGCM_debug_Check
155. ${libIGCM}/libIGCM_card/libIGCM_card.ksh
156     ( ${DEBUG_debug} ) && IGCM_card_Check
157. ${libIGCM}/libIGCM_date/libIGCM_date.ksh
158     ( ${DEBUG_debug} ) && IGCM_date_Check
159#-------
160. ${libIGCM}/libIGCM_sys/libIGCM_sys.ksh
161
162########################################################################
163
164#set -vx
165
166IGCM_sys_MkdirWork ${RUN_DIR_PATH}
167IGCM_sys_Cd ${RUN_DIR_PATH}
168
169
170#
171# First of all
172#
173IGCM_card_DefineArrayFromSection       ${SUBMIT_DIR}/config.card UserChoices
174typeset option
175for option in ${config_UserChoices[*]} ; do
176    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card UserChoices ${option}
177done
178#
179echo
180IGCM_debug_Print 1 "DefineArrayFromOption  : config_UserChoices"
181IGCM_debug_PrintVariables 3 config_UserChoices_JobName
182IGCM_debug_PrintVariables 3 config_UserChoices_LongName
183IGCM_debug_PrintVariables 3 config_UserChoices_TagName
184IGCM_debug_PrintVariables 3 config_UserChoices_SpaceName
185IGCM_debug_PrintVariables 3 config_UserChoices_ExperimentName
186IGCM_debug_PrintVariables 3 config_UserChoices_CalendarType
187IGCM_debug_PrintVariables 3 config_UserChoices_DateBegin
188IGCM_debug_PrintVariables 3 config_UserChoices_DateEnd
189IGCM_debug_PrintVariables 3 config_UserChoices_PeriodLength
190echo
191
192#==================================
193#R_SAVE : Job output directory
194if ( [ ! X${config_UserChoices_SpaceName} = X ] && [ ! X${config_UserChoices_ExperimentName} = X ] ) ; then
195    FreeName=$( echo ${config_UserChoices_JobName} | sed 's/.*_//' )
196    R_SAVE=${R_OUT}/${config_UserChoices_TagName}/${config_UserChoices_SpaceName}/${config_UserChoices_ExperimentName}/${FreeName}
197    R_DODS=${config_UserChoices_TagName}/${config_UserChoices_SpaceName}/${config_UserChoices_ExperimentName}/${FreeName}
198else
199    R_SAVE=${R_OUT}/${config_UserChoices_TagName}/${config_UserChoices_JobName}
200    R_DODS=${config_UserChoices_TagName}/${config_UserChoices_JobName}
201fi
202
203
204########################################################################
205#
206#                          DEFINE LOOP PARAMETERS
207#
208########################################################################
209
210R_OUT_SBG=${R_SAVE}/SBG
211file_path=${R_OUT_SBG}/Output/MO
212
213set +A LISTE_FILE_SBG -- $( IGCM_sys_RshArchive "find ${file_path} -name \"*stomate_history.nc\" " )
214CountLISTE_FILE_SBG=${#LISTE_FILE_SBG[@]}
215echo "Nombre de stomate_history : " ${CountLISTE_FILE_SBG}
216
217NBRE_FILE_TOT=$(( 2 * CountLISTE_FILE_SBG ))
218echo "Nombre de fichiers à démigrer : " ${NBRE_FILE_TOT}
219
220if [ ${NBRE_FILE_TOT} -le ${UNIX_MAX_LIMIT} ] ; then
221    NBRE_TOUR=1
222    NbFilesLOOP=${CountLISTE_FILE_SBG}
223elif [ ${NBRE_FILE_TOT}%${UNIX_MAX_LIMIT} -eq 0 ] ; then
224    (( NBRE_TOUR = NBRE_FILE_TOT / UNIX_MAX_LIMIT ))
225    (( NbFilesLOOP = UNIX_MAX_LIMIT / 2 ))
226else
227    (( NBRE_TOUR = NBRE_FILE_TOT / UNIX_MAX_LIMIT + 1 ))
228    (( NbFilesLOOP = UNIX_MAX_LIMIT / 2 ))
229fi
230echo "NBRE_TOUR = ${NBRE_TOUR} "
231echo "NbFilesLOOP = ${NbFilesLOOP} "
232
233CURRENT_LOOP=1
234# THIS LOOP GIVES PARAMETERS FOR THE DATE'S LOOP ie : DATE_COURANTE, DATE_FIN.
235# WE HAVE 3 LEVELS
236#    - LEVEL 1 : JUST ONE LOOP TO COMPLETE
237#    - LEVEL 2 : WE ARE IN THE "DEEP" LOOP
238#    - LEVEL 3 : WE ARE IN THE LAST LOOP
239
240imin=0
241imax=${NbFilesLOOP}
242while [ ${CURRENT_LOOP} -le ${NBRE_TOUR} ] ; do
243   
244    unset liste_file
245    unset liste_file_local
246    unset liste_file_ipcc
247    unset liste_file_ipcc_local
248   
249    (( i = imin ))
250    while [ ${i} -lt ${imax} ] ; do
251        file=${LISTE_FILE_SBG[${i}]}
252        file_ipcc=$( echo ${file} | sed -e "s/stomate_history/stomate_ipcc_history/" )
253
254        liste_file[${#liste_file[*]}]=${file}
255        liste_file[${#liste_file[*]}]=${file_ipcc}
256        liste_file_local[${#liste_file_local[*]}]=$( basename ${file} )
257        RET=$?
258        if [ ${RET} -gt 0 ] ; then
259            echo "erreur basename"
260            echo "file = " ${file}
261            exit 1
262        fi
263        liste_file_local[${#liste_file_local[*]}]=$( basename ${file_ipcc} )
264        RET=$?
265        if [ ${RET} -gt 0 ] ; then
266            echo "erreur basename"
267            echo "file = " ${file_ipcc}
268            exit 2
269        fi
270        liste_file_ipcc[${#liste_file_ipcc[*]}]=${file_ipcc}
271        liste_file_ipcc_local[${#liste_file_ipcc_local[*]}]=$( basename ${file_ipcc} )
272        RET=$?
273        if [ ${RET} -gt 0 ] ; then
274            echo "erreur basename"
275            echo "file = " ${file_ipcc}
276            exit 3
277        fi
278
279        (( i = i + 1 ))
280    done
281    #echo ${liste_file_local[@]}
282    #echo ${liste_file[@]}
283
284    # Get selected files
285    IGCM_sys_Get /l liste_file[*] ${RUN_DIR_PATH}
286    IGCM_debug_Verif_Exit_Post
287
288    # chmod sur dépÃŽt
289    IGCM_sys_RshArchive "chmod u+w ${liste_file_ipcc[@]}"
290
291    # Faire le nco/ncap2
292    (( i = imin ))
293    while [ ${i} -lt ${imax} ] ; do
294        file=$( basename ${LISTE_FILE_SBG[${i}]} )
295        RET=$?
296        if [ ${RET} -gt 0 ] ; then
297            echo "erreur basename"
298            echo "i, imin, imax = " i imin imax
299            echo "file = " ${file}
300            exit 4
301        fi
302        file_ipcc=$( echo ${file} | sed -e "s/stomate_history/stomate_ipcc_history/" )
303        ls -la ${file_ipcc}
304
305        IGCM_sys_ncks -a -A -x -v GPP ${file} stomate.nc
306        IGCM_sys_ncks -a -A ${file_ipcc} stomate.nc
307
308        IGCM_sys_Cp ${file_ipcc} _${file_ipcc}
309        IGCM_sys_Chmod u+w _${file_ipcc}
310
311        IGCM_sys_ncap2 -s 'fLuc=float(fLuc*0.+(CONVFLUX+CFLUX_PROD10+CFLUX_PROD100)/1e3/86400*CONTFRAC)' \
312                       -s 'nbp=float(nbp*0.f+(gpp-ra-rh-fFire-fLuc-fHarvest))' -v stomate.nc stomate1.nc
313        IGCM_debug_Verif_Exit_Post
314
315        IGCM_sys_ncks -a -A stomate1.nc _${file_ipcc}
316        IGCM_sys_Mv -f _${file_ipcc} ${file_ipcc}
317        IGCM_sys_Chmod u-w ${file_ipcc}
318
319        ls -la ${file_ipcc}
320        IGCM_sys_Rm stomate.nc stomate1.nc
321        IGCM_debug_Verif_Exit_Post
322
323        # Put_Out des fichiers ipcc corrigés
324        IGCM_sys_Put_Out ${file_ipcc} ${file_path}/${file_ipcc}
325
326        (( i = i + 1 ))
327    done
328
329    # Nettoyage
330    IGCM_sys_Rm ${liste_file_local[*]}
331
332
333    # GO AHEAD IN DEEPEST LOOP
334    (( imin = imax ))
335    (( CURRENT_LOOP = CURRENT_LOOP + 1 ))
336    if [ ${CURRENT_LOOP} -lt ${NBRE_TOUR} ] ; then
337        (( imax = imax + ${NbFilesLOOP} ))
338    else
339        if [ ${NBRE_FILE_TOT}%${UNIX_MAX_LIMIT} -eq 0 ] ; then
340            (( imax = imax + ${NbFilesLOOP} ))
341        else
342            echo "Dernier tour : "
343            echo "reste = " $(( NBRE_FILE_TOT % UNIX_MAX_LIMIT ))       
344            echo "imax = " ${imax}
345            echo "reste / 2 = " $(( ( NBRE_FILE_TOT % UNIX_MAX_LIMIT / 2 ) ))
346            (( imax = imax + ( NBRE_FILE_TOT % UNIX_MAX_LIMIT / 2 ) ))
347            echo "imax NEW = " ${imax}
348            echo "Nombre de stomate_history : " ${CountLISTE_FILE_SBG}
349        fi
350    fi
351done                 # while [ ${CURRENT_LOOP} -le  ${NBRE_TOUR} ] do
352# FINISH
353
354
355#D-
356# --------------------------------------------------------------------
357#D- Test if all was right
358# --------------------------------------------------------------------
359IGCM_debug_Verif_Exit_Post
360
361# Clean RUN_DIR_PATH (necessary for cesium)
362IGCM_sys_RmRunDir -Rf ${RUN_DIR_PATH}
363
364date
Note: See TracBrowser for help on using the repository browser.