source: BOL/LMDZ_Setup/seasonal_cycle.sh @ 5552

Last change on this file since 5552 was 5552, checked in by fhourdin, 3 days ago

New post processing and some fix on environment

File size: 8.4 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# ----------------------------------------------------------
127files=$( for yr in $( seq $yr1 $yr2 ) ; do ls $file_base.${yr}*.nc ; done )
128echo Liste des fichiers traites : $files
129
130# Construction de la liste des variables disponibles
131# --------------------------------------------------
132var_list_o=$varse
133for file_ in $files ; do
134   # Recuperation de la liste des variables dans le fichier
135       #ncdump -h $file_ | grep long_name | cut -d: -f1
136       var_list_=$( ncdump -h $file_ | grep long_name | cut -d: -f1 )
137   # Liste des variables contenues soit dans le fichier soit dans $var_list_o
138       var_list_n=$( ( for var in $var_list_o $var_list_ ; do echo $var ; done ) | sort | uniq -i -d )
139   # Liste des suprimees
140       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 )
141       var_list_o=$var_list_n
142done
143
144echo Liste des variables traitees : $var_list_o
145vars="-selvar" ; for var_ in $var_list_n ; do vars="$vars,$var_" ; done
146
147# --------------------------------------------------------------------
148# Extracting variables in the original individual files
149# --------------------------------------------------------------------
150
151for file_ in $files ; do
152    # Extraction des variables
153       tmpf=tmp.$file_
154       \rm -f $tmpf
155       cdo $vars $file_ $tmpf
156    # Correction calendrier à 360d. Corrige depuis 2017
157       cal=`ncdump -h $tmpf | grep time_counter | grep calendar | cut -d\" -f2`
158       if [ "$cal"  = "360d" ] ; then ncatted -a calendar,"time_counter",o,c,"360_day" -O $tmpf ; fi
159done
160
161
162# --------------------------------------------------------------------
163# Merging files & extracting the mean seasonal cycle of required variables
164# --------------------------------------------------------------------
165
166if [ $cmor = 1 ] ; then
167    se_d=$main_d/CMOR/${sim_}_${yr1}_${yr2}
168else
169    se_d=$main_d/SE
170fi
171mkdir -p $se_d
172file_se=$se_d/${file_base}.${yr1}-${yr2}.nc
173\rm -rf $se_d/$file_se
174cdo ymonmean -mergetime $( for f_ in $files ; do echo tmp.$f_ ; done )  $file_se
175
176# --------------------------------------------------------------------
177# From histmth to cmor
178# --------------------------------------------------------------------
179echo varcmor $varcmor
180if [ $cmor = 1 ] ; then
181    for var_ in $varcmor ; do
182          varo_=${varo[$var_]}
183          fact_=${fact[$var_]}
184          set +e
185        # Checking variable availability
186          cdo info -selvar,$varo_ $file_se > /dev/null 2>&1
187          status_=$?
188          set -e
189          if [ $status_ != 0 ] ; then
190             echo variable $varo_ non disponible dans le fichier $file_se
191          else
192             echo var_ existe $var_
193             if [ $fact_ = 1. ]; then
194                if [ $var_ == ta ] || [ $var_ == ua ] || [ $var_ == va ] || [ $var_ == wap ] || [ $var_ == hus ] || [ $var_ == hur ]; then
195                 opt="selvar,$varo_,pres"
196                else
197                 opt="selvar,$varo_"
198                fi
199             else
200                opt="mulc,$fact_ -selvar,$varo_"
201             fi
202             outfile=$se_d/$var_.nc ; \rm -f $outfile
203             cdo $opt $file_se $outfile
204             if [ $var_ != $varo_ ]; then
205               ncrename -v $varo_,$var_ ${outfile}
206             fi
207          fi
208    done
209    \rm -f $file_se
210fi
211
212
Note: See TracBrowser for help on using the repository browser.