source: BOL/LMDZ_Setup/seasonal_cycle.sh @ 5848

Last change on this file since 5848 was 5586, checked in by fhourdin, 8 months ago

Post traitement LMDZ_Setup

File size: 8.7 KB
Line 
1#!/bin/bash
2
3set -eu
4#set -vx
5
6. lmdz_env.sh
7yr1=2001
8yr2=2001
9file_base=histmth
10sim_d=$PWD
11sim_=$( basename $sim_d )
12echo $sim_ $sim_d
13
14
15
16varse="aaa pourc_ter pourc_oce pourc_lic pourc_sic bils cldt flat LWdnSFC LWdnSFCclr LWupSFC ovap precip q2m rh2m rhum sens slp SWdnSFC SWdnSFCclr SWdnTOA SWupSFC SWupSFCclr SWupTOA SWupTOAclr t2m temp topl topl0 tsol vitu vitv vitw wind10m snow pr_lsc_i pr_lsc_l geop phis prw cldl cldm cldh cldt tops tops0 sols sols0 soll soll0"
17
18varcmor="hfls hfss pr sfcWind rldscs rlds rlus rsdscs rsds rsuscs rsus rsutcs rsut rsdt rlut rlutcs sfcWind tas uas vas tasmax tasmin ts sst huss hurs tauu tauv psl zg500 hfns prw ta ua va wap hus pres hur oce ter sic lic clcalipso cltcalipso clhcalipso clmcalipso cllcalipso cll clm clh clt"
19varcmor="hfls hfss pr sfcWind rldscs rlds rlus rsdscs rsds rsuscs rsus rsutcs rsut rsdt rlut rlutcs sfcWind tas huss hurs"
20
21cmor=1
22main_d=$root_dir
23# ---------------------------------------------------------------------------------------------
24# getting arguments
25# ---------------------------------------------------------------------------------------------
26
27while (($# > 0)); do
28    case $1 in
29       -h|--help) echo Use 1 : $0 [-cmor "var1 var2"] [-years YEAR1:YEAR2] 
30                  echo Use 2 : $0 [-se "var1 var2"]  [-years YEAR1:YEAR2]
31                  echo -root_dir : directory containing simulations
32                  echo -years : either 2000 or 2000:2003
33                  echo -sim : simulation directory ;;
34       -cmor) cmor=1 ; varcmor="$2" ; shift 2  ;;
35       -root_dir) main_d=$2 ; shift 2  ;;
36       -years) yr1=$( echo $2 | cut -d: -f1 )
37               yr2=$( echo $2 | cut -d: -f2 ) ; shift 2 ;;
38       -se) cmor=0 ; varse="$2" ; shift 2 ;;
39       -sim) sim_=$2 ; sim_d=$PWD/$sim_ ; shift 2 ;;
40       *) bash seasonal_cycle.sh -h ; exit
41    esac
42done
43echo $varcmor
44echo yr1 $yr1
45echo yr2 $yr2
46if [ ! -d $main_d ] ; then echo Directory $main_d does not exist ; exit 1 ; fi
47
48cd $sim_d
49declare -A varo
50declare -A fact
51
52# ---------------------------------------------------------------------------------------------
53function cmor_init { # cmor dictionary
54# ---------------------------------------------------------------------------------------------
55    echo varcmor $*
56    varse=""
57    for var_ in $* ; do
58       echo var_ $var_
59       fact[$var_]=1.
60       case $var_ in
61          hfls)    varo[$var_]=flat ; fact[$var_]=-1. ;;
62          hfss)    varo[$var_]=sens ; fact[$var_]=-1. ;;
63          pr)      varo[$var_]=precip ; echo MEME SI MACRON ;; 
64          sfcWind) varo[$var_]=wind10m ;;
65          rldscs)  varo[$var_]=LWdnSFCclr ;;
66          rlds)    varo[$var_]=LWdnSFC ;;
67          rlus)    varo[$var_]=LWupSFC ;;
68          rsdscs)  varo[$var_]=SWdnSFCclr ;;
69          rsds)    varo[$var_]=SWdnSFC ;;
70          rsuscs)  varo[$var_]=SWupSFCclr ;;
71          rsus)    varo[$var_]=SWupSFC ;;
72          rsutcs)  varo[$var_]=SWupTOAclr ;;
73          rsut)    varo[$var_]=SWupTOA ;;
74          rsdt)    varo[$var_]=SWdnTOA ;;
75          rlut)    varo[$var_]=topl ;;
76          rlutcs)  varo[$var_]=topl0 ;;
77          sfcWind) varo[$var_]=wind10m ;;
78          tas)     varo[$var_]=t2m ;;
79          uas)     varo[$var_]=u10m ;;
80          vas)     varo[$var_]=v10m ;;
81          tasmax)     varo[$var_]=ave_t2m_daily_max ;;
82          tasmin)     varo[$var_]=ave_t2m_daily_min ;;
83          ts)      varo[$var_]=tsol ;;
84          sst)     varo[$var_]=tsol_oce ;;
85          huss)    varo[$var_]=q2m ;;
86          hurs)    varo[$var_]=rh2m ;;
87          tauu)    varo[$var_]=taux_oce ;;
88          tauv)    varo[$var_]=tauy_oce ;;
89          psl)     varo[$var_]=slp ; fact[$var_]=0.01 ;;
90          zg500)   varo[$var_]=z500 ;;
91          hfns)    varo[$var_]=bils ;;
92          prw)     varo[$var_]=prw ;;
93          ta)      varo[$var_]=temp ;;
94          ta200)   varo[$var_]=t200 ;;
95          ta500)   varo[$var_]=t500 ;;
96          ta850)   varo[$var_]=t850 ;;
97          ua)      varo[$var_]=vitu ;;
98          va)      varo[$var_]=vitv ;;
99          wap)     varo[$var_]=vitw ;;
100          hus)     varo[$var_]=ovap ;;
101          pres)    varo[$var_]=pres ;;
102          hur)     varo[$var_]=rhum ; fact[$var_]=100. ;;
103          oce)    varo[$var_]=pourc_oce ; fact[$var_]=0.01 ;;
104          ter)    varo[$var_]=pourc_ter ; fact[$var_]=0.01 ;;
105          sic)    varo[$var_]=pourc_sic ; fact[$var_]=0.01 ;;
106          lic)    varo[$var_]=pourc_lic ; fact[$var_]=0.01 ;;
107          clcalipso)    varo[$var_]=clcalipso ; fact[$var_]=100. ;;
108          cltcalipso)    varo[$var_]=cltcalipso ; fact[$var_]=100. ;;
109          clhcalipso)    varo[$var_]=clhcalipso ; fact[$var_]=100. ;;
110          clmcalipso)    varo[$var_]=clmcalipso ; fact[$var_]=100. ;;
111          cllcalipso)    varo[$var_]=cllcalipso ; fact[$var_]=100. ;;
112          cll)     varo[$var_]=cldl ; fact[$var_]=100. ;;
113          clm)     varo[$var_]=cldm ; fact[$var_]=100. ;;
114          clh)     varo[$var_]=cldh ; fact[$var_]=100. ;;
115          clt)     varo[$var_]=cldt ; fact[$var_]=100. ;;
116          *)       varo[$var_]=$var_
117       esac
118       echo APRES var ${varo[$var_]}
119       varse="$varse ${varo[$var_]}"
120    done
121}
122# -----------------------------------------------------------------------
123
124if [ $cmor = 1 ] ; then cmor_init $varcmor ; fi
125echo varse $varse
126
127
128# Liste des fichiers disponibles entre les annees yr1 et yr2
129# ----------------------------------------------------------
130echo $yr1 $yr2
131#echo $( echo $yr1 | wc -c )
132if [ $( echo $yr1 | wc -c ) -ge 6 ] ; then
133   if [ $yr2 != $yr1 ] ; then
134       echo Not possible to run with monthly files on more than one month so far ; exit 1
135   fi
136fi
137
138files=$( for yr in $( seq $yr1 $yr2 ) ; do ls $file_base.${yr}*.nc ; done )
139echo Liste des fichiers traites : $files
140
141# Construction de la liste des variables disponibles
142# --------------------------------------------------
143var_list_o=$varse
144for file_ in $files ; do
145   # Recuperation de la liste des variables dans le fichier
146       #ncdump -h $file_ | grep long_name | cut -d: -f1
147       var_list_=$( ncdump -h $file_ | grep long_name | cut -d: -f1 )
148   # Liste des variables contenues soit dans le fichier soit dans $var_list_o
149       var_list_n=$( ( for var in $var_list_o $var_list_ ; do echo $var ; done ) | sort | uniq -i -d )
150   # Liste des suprimees
151       echo Liste des variables non disponibles dans $file_ : $( ( for var in $var_list_o $var_list_n ; do echo $var ; done ) | sort | uniq -i -u )
152       var_list_o=$var_list_n
153done
154
155echo Liste des variables traitees : $var_list_o
156vars="-selvar" ; for var_ in $var_list_n ; do vars="$vars,$var_" ; done
157
158# --------------------------------------------------------------------
159# Extracting variables in the original individual files
160# --------------------------------------------------------------------
161
162for file_ in $files ; do
163    # Extraction des variables
164       tmpf=tmp.$file_
165       \rm -f $tmpf
166       cdo $vars $file_ $tmpf
167    # Correction calendrier à 360d. Corrige depuis 2017
168       cal=`ncdump -h $tmpf | grep time_counter | grep calendar | cut -d\" -f2`
169       if [ "$cal"  = "360d" ] ; then ncatted -a calendar,"time_counter",o,c,"360_day" -O $tmpf ; fi
170done
171
172
173# --------------------------------------------------------------------
174# Merging files & extracting the mean seasonal cycle of required variables
175# --------------------------------------------------------------------
176
177if [ $cmor = 1 ] ; then
178    se_d=$main_d/CMOR/${sim_}_${yr1}_${yr2}
179else
180    se_d=$main_d/SE
181fi
182mkdir -p $se_d
183file_se=$se_d/${file_base}.${yr1}-${yr2}.nc
184\rm -rf $se_d/$file_se
185cdo ymonmean -mergetime $( for f_ in $files ; do echo tmp.$f_ ; done )  $file_se
186
187# --------------------------------------------------------------------
188# From histmth to cmor
189# --------------------------------------------------------------------
190echo varcmor $varcmor
191if [ $cmor = 1 ] ; then
192    for var_ in $varcmor ; do
193          varo_=${varo[$var_]}
194          fact_=${fact[$var_]}
195          set +e
196        # Checking variable availability
197          cdo info -selvar,$varo_ $file_se > /dev/null 2>&1
198          status_=$?
199          set -e
200          if [ $status_ != 0 ] ; then
201             echo variable $varo_ non disponible dans le fichier $file_se
202          else
203             echo var_ existe $var_
204             if [ $fact_ = 1. ]; then
205                if [ $var_ == ta ] || [ $var_ == ua ] || [ $var_ == va ] || [ $var_ == wap ] || [ $var_ == hus ] || [ $var_ == hur ]; then
206                 opt="selvar,$varo_,pres"
207                else
208                 opt="selvar,$varo_"
209                fi
210             else
211                opt="mulc,$fact_ -selvar,$varo_"
212             fi
213             outfile=$se_d/$var_.nc ; \rm -f $outfile
214             cdo $opt $file_se $outfile
215             if [ $var_ != $varo_ ]; then
216               ncrename -v $varo_,$var_ ${outfile}
217             fi
218          fi
219    done
220    \rm -f $file_se
221fi
222
223
Note: See TracBrowser for help on using the repository browser.