source: BOL/LMDZ_Setup/seasonal_cycle.sh @ 5558

Last change on this file since 5558 was 5558, checked in by fhourdin, 7 hours ago

Post processing LMDZ_Setup : monthly files

File size: 8.6 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          ua)      varo[$var_]=vitu ;;
95          va)      varo[$var_]=vitv ;;
96          wap)     varo[$var_]=vitw ;;
97          hus)     varo[$var_]=ovap ;;
98          pres)    varo[$var_]=pres ;;
99          hur)     varo[$var_]=rhum ; fact[$var_]=100. ;;
100          oce)    varo[$var_]=pourc_oce ; fact[$var_]=0.01 ;;
101          ter)    varo[$var_]=pourc_ter ; fact[$var_]=0.01 ;;
102          sic)    varo[$var_]=pourc_sic ; fact[$var_]=0.01 ;;
103          lic)    varo[$var_]=pourc_lic ; fact[$var_]=0.01 ;;
104          clcalipso)    varo[$var_]=clcalipso ; fact[$var_]=100. ;;
105          cltcalipso)    varo[$var_]=cltcalipso ; fact[$var_]=100. ;;
106          clhcalipso)    varo[$var_]=clhcalipso ; fact[$var_]=100. ;;
107          clmcalipso)    varo[$var_]=clmcalipso ; fact[$var_]=100. ;;
108          cllcalipso)    varo[$var_]=cllcalipso ; fact[$var_]=100. ;;
109          cll)     varo[$var_]=cldl ; fact[$var_]=100. ;;
110          clm)     varo[$var_]=cldm ; fact[$var_]=100. ;;
111          clh)     varo[$var_]=cldh ; fact[$var_]=100. ;;
112          clt)     varo[$var_]=cldt ; fact[$var_]=100. ;;
113          *)       varo[$var_]=$var_
114       esac
115       echo APRES var ${varo[$var_]}
116       varse="$varse ${varo[$var_]}"
117    done
118}
119# -----------------------------------------------------------------------
120
121if [ $cmor = 1 ] ; then cmor_init $varcmor ; fi
122echo varse $varse
123
124
125# Liste des fichiers disponibles entre les annees yr1 et yr2
126# ----------------------------------------------------------
127echo $yr1 $yr2
128#echo $( echo $yr1 | wc -c )
129if [ $( echo $yr1 | wc -c ) -ge 6 ] ; then
130   if [ $yr2 != $yr1 ] ; then
131       echo Not possible to run with monthly files on more than one month so far ; exit 1
132   fi
133fi
134
135files=$( for yr in $( seq $yr1 $yr2 ) ; do ls $file_base.${yr}*.nc ; done )
136echo Liste des fichiers traites : $files
137
138# Construction de la liste des variables disponibles
139# --------------------------------------------------
140var_list_o=$varse
141for file_ in $files ; do
142   # Recuperation de la liste des variables dans le fichier
143       #ncdump -h $file_ | grep long_name | cut -d: -f1
144       var_list_=$( ncdump -h $file_ | grep long_name | cut -d: -f1 )
145   # Liste des variables contenues soit dans le fichier soit dans $var_list_o
146       var_list_n=$( ( for var in $var_list_o $var_list_ ; do echo $var ; done ) | sort | uniq -i -d )
147   # Liste des suprimees
148       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 )
149       var_list_o=$var_list_n
150done
151
152echo Liste des variables traitees : $var_list_o
153vars="-selvar" ; for var_ in $var_list_n ; do vars="$vars,$var_" ; done
154
155# --------------------------------------------------------------------
156# Extracting variables in the original individual files
157# --------------------------------------------------------------------
158
159for file_ in $files ; do
160    # Extraction des variables
161       tmpf=tmp.$file_
162       \rm -f $tmpf
163       cdo $vars $file_ $tmpf
164    # Correction calendrier à 360d. Corrige depuis 2017
165       cal=`ncdump -h $tmpf | grep time_counter | grep calendar | cut -d\" -f2`
166       if [ "$cal"  = "360d" ] ; then ncatted -a calendar,"time_counter",o,c,"360_day" -O $tmpf ; fi
167done
168
169
170# --------------------------------------------------------------------
171# Merging files & extracting the mean seasonal cycle of required variables
172# --------------------------------------------------------------------
173
174if [ $cmor = 1 ] ; then
175    se_d=$main_d/CMOR/${sim_}_${yr1}_${yr2}
176else
177    se_d=$main_d/SE
178fi
179mkdir -p $se_d
180file_se=$se_d/${file_base}.${yr1}-${yr2}.nc
181\rm -rf $se_d/$file_se
182cdo ymonmean -mergetime $( for f_ in $files ; do echo tmp.$f_ ; done )  $file_se
183
184# --------------------------------------------------------------------
185# From histmth to cmor
186# --------------------------------------------------------------------
187echo varcmor $varcmor
188if [ $cmor = 1 ] ; then
189    for var_ in $varcmor ; do
190          varo_=${varo[$var_]}
191          fact_=${fact[$var_]}
192          set +e
193        # Checking variable availability
194          cdo info -selvar,$varo_ $file_se > /dev/null 2>&1
195          status_=$?
196          set -e
197          if [ $status_ != 0 ] ; then
198             echo variable $varo_ non disponible dans le fichier $file_se
199          else
200             echo var_ existe $var_
201             if [ $fact_ = 1. ]; then
202                if [ $var_ == ta ] || [ $var_ == ua ] || [ $var_ == va ] || [ $var_ == wap ] || [ $var_ == hus ] || [ $var_ == hur ]; then
203                 opt="selvar,$varo_,pres"
204                else
205                 opt="selvar,$varo_"
206                fi
207             else
208                opt="mulc,$fact_ -selvar,$varo_"
209             fi
210             outfile=$se_d/$var_.nc ; \rm -f $outfile
211             cdo $opt $file_se $outfile
212             if [ $var_ != $varo_ ]; then
213               ncrename -v $varo_,$var_ ${outfile}
214             fi
215          fi
216    done
217    \rm -f $file_se
218fi
219
220
Note: See TracBrowser for help on using the repository browser.