source: BOL/LMDZ_Setup_amaury/era2gcm_uv10m.sh @ 5027

Last change on this file since 5027 was 4711, checked in by asima, 14 months ago

Variables to be renamed as U10M and V10M (with ncrename) are in capital letters

File size: 7.2 KB
Line 
1#!/bin/bash
2#
3#-----------------------------------------------------------------------------
4# Requires : netcdf, ferret, nco
5#-----------------------------------------------------------------------------
6# Check&modify section "User choices", then run the script with ./era2gcm_uv10m.sh
7#-----------------------------------------------------------------------------
8# When running LMDZ with SPLA (SiMPle Aerosol model), 10m-winds on grille_T are needed to compute sea-salt emissions
9# ATTENTION : for a nudged simulation, use the same reanalysis as for nudging winds (same "rea" variable here and in era2gcm.sh)
10#-----------------------------------------------------------------------------
11# ( A VERIFIER PLUS TARD : le regrid pourrait se faire avec CDO, mais JEscribano le deconseillait; pourquoi ? resultat identique a la precision 1e-13 :
12    #Pre-requis pour ERA5, fichiers 1h au lieu de 6h:
13    #cdo selhour,0/18/6 ERAfile_1h.nc ERAfile.nc
14    # general
15    #cdo selvar,grille_s ./INIT/grilles_gcm.nc  ./INIT/grille_s.nc
16    #cdo remapbil,INIT/grille_s.nc ERAfile.nc regridded_fileNS.nc
17    ##latitudes are N->S as in ERA files, not S->N, as written by Ferret, alors on fait invertlat (ou on changera le code)
18    #cdo invertlat regridded_fileNS.nc regridded_file.nc
19#
20
21#------------------------------------------------
22# User choices
23#------------------------------------------------
24# Periode :
25mth_i=200601
26mth_f=200601
27#
28# Choix des fichiers de guidage ("rea"nalyses) : ERA5, ERAI, OPERA
29# Contact pour demander acces aux fichiers sur Jean-Zay :
30#    Sophie Bouffiès-Cloché, IPSL : Sophie.Bouffies-Cloche@ipsl.fr
31rea=ERA5
32#------------------------------------------------
33
34GRID_DIR=./INIT
35#-----------------------------------------------------------------------------
36#Utilite du block suivant a re-examiner :
37#-----------------------------------------------------------------------------
38# Rajouter "rea" aux les parametres d'entree a fournir au script ?
39# Ou comme pour era2gcm.sh, c'est plus facile d'editer&modifier le script, puis lancer avec ./era2gcm_uv10m.sh
40while (($# > 0))
41   do
42   case $1 in
43     "-h") cat <<........fin
44           ./era2gcm_uv10m.sh [-rea ERAreanalysis] [-mthini initial_month] [-mthend final_month] [-grid_dir directory_containing_grille_gcm.nc]
45........fin
46     exit ;;
47     "-grille_dir") GRID_DIR=$2 ; shift ; shift ;;
48     "-mthini") mth_i=$2 ; shift ; shift ;;
49     "-mthend") mth_f=$2 ; shift ; shift ;;
50     "-rea") rea=$2 ; shift ; shift ;;
51     *) $0 -h ; exit
52   esac
53done
54
55
56tmin=1
57resol=grilles_gcm.nc
58
59GRID_FI=${GRID_DIR}/${resol}
60if [ ! -f "$GRID_FI" ] ; then
61   echo Le fichier $GRID_DIR/$resol est necessaire
62   echo creer le fichier $GRID_FI avec grilles_gcm_netcdf.e
63   exit
64fi
65mth=$mth_i
66
67
68#####################################################################
69while (( $mth <= $mth_f )) ; do
70#####################################################################
71   echo mth $mth
72   mois=`echo $mth | cut -c 5-`
73   an=`echo $mth | cut -c -4`
74   ndays=( 31 28 31 30 31 30 31 31 30 31 30 31 )
75   months=( jan feb mar apr may jun jul aug sep oct nov dec )
76   if [ $(( $an % 4 )) = 0 ] ; then ndays[1]=29 ; fi
77   imois=$(( ${mois#0} - 1 ))
78   month=${months[$imois]}
79   nday=${ndays[$imois]}
80   tmax=$(( $nday * 4 ))
81   echo PARAMETRES CALENDAIRES $imois $month $nday $tmax
82
83
84   iip1=`ncdump -h $GRID_FI | grep lonu | head -1 | awk ' { print $3 } '`
85   jjm=`ncdump -h $GRID_FI | grep latv | head -1 | awk ' { print $3 } '`
86   (( jjp1 =  $jjm + 1 ))
87   (( iim  = $iip1 - 1 ))
88    \rm u10m.nc v10m.nc
89#####################################################################
90# Choix de la periode temporelle
91#####################################################################
92
93   t0="l=$tmin"
94   t1tn="l=${tmin}:${tmax}"
95
96#####################################################################
97# Lien avec les fichiers netcdf contenant les d0 ECMWF
98#####################################################################
99   if [ "$rea" = "ERA5" ] ; then
100      #ANA_DIR='/gpfsstore/rech/psl/rpsl376/ERA5/NETCDF/GLOBAL_025/4xdaily'
101      #suf="2e5.GLOBAL_025"
102      ANA_DIR='/gpfsstore/rech/psl/rpsl376/ERA5/NETCDF/GLOBAL_025/hourly'
103      suf="1e5.GLOBAL_025"
104      #"Neutral wind at 10 m" :
105      varu10m=u10n
106      varv10m=v10n
107      fileu1h="$ANA_DIR/AN_SF/$an/u10n.$an$mois.as$suf.nc"
108      filev1h="$ANA_DIR/AN_SF/$an/v10n.$an$mois.as$suf.nc"
109      fileu10m="$SCRATCH/u10n.$an$mois.as$suf.nc"
110      filev10m="$SCRATCH/v10n.$an$mois.as$suf.nc"
111      cdo selhour,0/18/6 $fileu1h $fileu10m
112      cdo selhour,0/18/6 $filev1h $filev10m
113   elif [ "$rea" = "ERAI" ] ; then
114      ANA_DIR='/gpfsstore/rech/psl/rpsl376/ergon/ERAI/NETCDF/GLOBAL_1125/4xdaily'
115      suf="hei.GLOBAL_1125"
116      varu10m=u10
117      varv10m=v10
118      fileu10m="$ANA_DIR/AN_SF/$an/u10.$an$mois.as$suf.nc"
119      filev10m="$ANA_DIR/AN_SF/$an/v10.$an$mois.as$suf.nc"
120   else  #opera
121      #ANA_DIR='http://prodn.idris.fr/thredds/dodsC/ipsl_private/rpsl376/OPERA/NETCDF/4xdaily'
122      ANA_DIR='/gpfsstore/rech/psl/rpsl376/ergon/OPERA/NETCDF/4xdaily'
123      suf=".GLOBAL_1125"
124      varu10m=u10
125      varv10m=v10
126      fileu10m="$ANA_DIR/AN_SF/$an/u10.$an$mois.ash$suf.nc"
127      filev10m="$ANA_DIR/AN_SF/$an/v10.$an$mois.ash$suf.nc"
128   fi
129
130ls $fileu10m
131ls $filev10m
132
133outd=${rea}_uv10m/$an/$mois
134mkdir -p $outd
135
136# effacer lien vers repertoire des vents_10m ERA interpoles (utilise dans script_SIMU) s'il existe deja
137# recreer lien vers le repertoire "rea" choisi
138rm -f ERA10m
139ln -s ${rea}_uv10m ERA10m
140
141# utile dans "save/file..." si souci de memoire (sinon, avec ou sans $iji, meme resultat)
142#ij="i=1:$iip1,j=1:$jjp1"
143
144###################################################################3
145# script ferret pour interpolation
146###################################################################3
147
148cat <<eod>| tmp10m.jnl
149set memory/size=512
150
151use "$GRID_FI"
152
153define axis/t="1-${month}-${an}:00:00":"${nday}-${month}-${an}:18:00":6/units=hours thour
154
155! On traite une variable et un pas de temps a la fois pour raison de memoire
156! NOTE : @asn est le seul possible pour regrid time, avec thour=axe commune pour les reanalyses,
157!     dont les axes de temps ont des origines differentes (1957 pour ERAI, 1800 pour ERA5)
158
159! --- u10m ---
160use "$fileu10m"
161
162! Pour ecrire en simple precision, comme la variable dans le fichier ERA :
163! utiliser directement $var, et non pas une variable u10m definie dans ferret (let u10m=$varu10m), qui serait en double precision
164! A la fin, on change le nom de variable $var* en celui attendu par le code (voir ncrename ci-dessous)
165save/clobber/file="$outd/u10m.nc" $varu10m[d=2,gxy=grille_s[d=1],$t0,gt=thour@asn]
166repeat/$t1tn save/file="$outd/u10m.nc"/append $varu10m[d=2,gxy=grille_s[d=1],gt=thour@asn]
167
168! --- v10m ---
169cancel d 2
170use "$filev10m"
171
172save/clobber/file="$outd/v10m.nc" $varv10m[d=2,gxy=grille_s[d=1],$t0,gt=thour@asn]
173repeat/$t1tn save/file="$outd/v10m.nc"/append $varv10m[d=2,gxy=grille_s[d=1],gt=thour@asn]
174eod
175
176ferret -nojnl <<eod
177go tmp10m.jnl
178quit
179eod
180
181#Ferret a ecrit $varu en majuscules, l'equivalent en bash est ${varu^^}
182#   (Note : inversement, ${varu,,} passe $varu de majuscules en minuscules)
183ncrename -v ${varu10m^^},U10M $outd/u10m.nc
184ncrename -v ${varv10m^^},V10M $outd/v10m.nc
185
186echo AN MTH $an $mois
187(( mth = $mth + 1 ))
188if [ $mois = 12 ] ; then
189   (( an = $an + 1 ))
190   mth=${an}01
191fi
192
193done
Note: See TracBrowser for help on using the repository browser.