source: BOL/LMDZ_Setup/era2gcm.sh @ 5848

Last change on this file since 5848 was 5848, checked in by fhourdin, 7 weeks ago

era2gcm.sh + cdo jean-zay

  • Property svn:executable set to *
File size: 9.4 KB
Line 
1#!/bin/bash
2
3#---------------------------------------------------------------------------
4#  Getting and interpolating reanalaysis on the LMDZ grid for nudging
5#---------------------------------------------------------------------------
6#
7#  Developed by LMDZ team :
8#    F. Hourdin, A. Sima et al.
9#
10#  2025/10/03 : factorizing the code. era2gcm_tuto.sh should be obsolete.
11#               u10m and v10m to be added optionnally to make
12#               era2gcm_uv10m.sh obsolete too
13#               Automatic access to reanalysis on lmdz.lmd.jussieu.fr
14#
15#
16#  NB: for "cleanest" guiding, the 1st step of the next month should be
17#     added at the end of each month.
18#     wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE
19#      documented on LMDZpedia (search for "Guidage" )
20#
21#---------------------------------------------------------------------------
22# Requires : netcdf, ferret, nco, cdo
23#---------------------------------------------------------------------------
24. lmdz_env.sh
25set -eu
26
27#---------------------------------------------------------------------------
28# User choices
29#---------------------------------------------------------------------------
30# Periode :
31mth_i=200001
32mth_f=202012
33#
34vars="u v ta q"
35vars="u v"
36#
37# Choix des fichiers de guidage ("rea"nalyses) : ERA5, ERAI, OPERA
38rea="ERAI"
39resol_rea=075
40
41#---------------------------------------------------------------------------
42# Paths
43#---------------------------------------------------------------------------
44ERA5_PATH="/gpfsstore/rech/psl/rpsl376/ergon/ERA5/"
45ERAI_PATH="/gpfsstore/rech/psl/rpsl376/ergon/ERAI/"
46ERAI_PATH="/lustre/fswork/projects/rech/wfe/rgzi027/LMDZ/pub/3DInputData/ReAnalyses/ERAI"
47#/lustre/fswork/projects/rech/wfe/rgzi027/LMDZ/pub/3DInputData/ReAnalyses/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_PL/2014/
48
49#@ADS ERA5_PATH="/lus/work/CT1/cad15221/abarral/ERA_TMP/"  # /!\ temp for test only !
50#@ADS ERAI_PATH=""  # /!\ temp for tests only!
51#@ADS echo "/!\ Nudging files are not available on Adastra for now !"; exit 1  # comment this line for tests
52#@ADS SCRATCH=$SCRATCHDIR
53
54GRID_DIR=./INIT
55
56#---------------------------------------------------------------------------
57#Utilite du block suivant a re-examiner :
58#---------------------------------------------------------------------------
59#L'utilisateur a maintenant des choix a faire en plus de mth* : type de guidage, et "rea"
60# Alors c'est plus facile d'editer&modifier le script, puis lancer avec ./era2gcm.sh, que de donner tous les params
61# TODO check w/ Adriana if we can remove those and put them as inline args (above)
62while (($# > 0))
63   do
64   case $1 in
65     "-h") cat <<........fin
66           ./era2gcm.sh [-mthini initial_month] [-mthend final_month] [-grid_dir directory_containing_grille_gcm.nc]
67........fin
68     exit ;;
69     "-grid_dir") GRID_DIR=$2 ; shift ; shift ;;
70     "-mthini") mth_i=$2 ; shift ; shift ;;
71     "-mthend") mth_f=$2 ; shift ; shift ;;
72     *) $0 -h ; exit 1
73   esac
74done
75#--Fin du bloc a examiner --------------------------------------------
76
77tmin=1
78resol=grilles_gcm.nc
79
80GRID_FI=${GRID_DIR}/${resol}
81if [ ! -f "$GRID_FI" ] ; then
82   echo "Le fichier $GRID_DIR/$resol est nécessaire; créer le fichier $GRID_FI avec grilles_gcm_netcdf.e"
83   exit 1
84fi
85mth=$mth_i
86
87
88#####################################################################
89#  LOOP ON MONTHS
90#####################################################################
91while (( mth <= mth_f )) ; do
92
93   echo "mth $mth"
94   mois=$(echo "$mth" | cut -c 5-)
95   an=$(echo "$mth" | cut -c -4)
96   ndays=( 31 28 31 30 31 30 31 31 30 31 30 31 )
97   months=( jan feb mar apr may jun jul aug sep oct nov dec )
98   if [ $(( an % 4 )) = 0 ] ; then ndays[1]=29 ; fi
99   imois=$(( ${mois#0} - 1 ))
100   month=${months[$imois]}
101   nday=${ndays[$imois]}
102   tmax=$(( nday * 4 ))
103   echo "PARAMETRES CALENDAIRES $imois $month $nday $tmax"
104
105
106   iip1=$(ncdump -h "$GRID_FI" | grep lonu | head -1 | awk ' { print $3 } ')
107   jjm=$(ncdump -h "$GRID_FI" | grep latv | head -1 | awk ' { print $3 } ')
108   (( jjp1 = jjm + 1 ))
109#   \rm t2.nc ua.nc va.nc sst.nc u.nc v.nc T.nc ts.nc
110
111#####################################################################
112# Choix de la periode temporelle
113#####################################################################
114
115   t0="l=$tmin"
116   t1tn="l=${tmin}:${tmax}"
117
118#####################################################################
119# Lien avec les fichiers netcdf contenant les d0 ECMWF
120#####################################################################
121   echo "-------- liens de telechargement a actualiser ----"
122   if [ "$rea" = "ERA5" ] ; then
123     if [[ $an -ge 2022 ]] ; then
124      ANA_DIR="$ERA5_PATH/NETCDF/GLOBAL_025/hourly"
125      suf="ap1e5.GLOBAL_025"
126     else
127      ANA_DIR="$ERA5_PATH/NETCDF/GLOBAL_025/4xdaily"
128      suf="aphe5.GLOBAL_025"
129     fi
130   elif [ "$rea" = "ERAI" ] ; then
131      ANA_DIR="$ERAI_PATH/NETCDF/GLOBAL_$resol_rea/4xdaily"
132      suf="aphei.GLOBAL_$resol_rea"
133   fi
134
135   if [ ! -d $ANA_DIR ] ; then echo Directory $ANA_DIR does not exist ; exit 1 ; fi
136
137   ########################################################################
138   # Loop on variables among u, v, ta, q
139   ########################################################################
140
141   for var in $vars ; do
142
143     case $var in
144         ta) filename=T.nc ;;
145         q) filename=hur.nc ;;
146         *) filename=$var.nc
147     esac
148     outd=GUIDE_${rea}/$an/$mois
149     out_file=$outd/$filename
150
151     if [ ! -f $out_file ] ; then
152        mkdir -p $outd
153        file_rea="$ANA_DIR/AN_PL/$an/$var.$an$mois.$suf.nc"
154
155        ###################################################################
156        # Automatically downloading reanalysis if needed
157        ###################################################################
158        if [ "$( echo $ERAI_PATH | grep 3DInputData )" != "" ] ; then
159             if [ ! -f $file_rea ] ; then
160                mkdir -p $( dirname $file_rea )
161                cd $( dirname $file_rea )
162                wget http://lmdz.lmd.jussieu.fr/pub/3DInputData/$( echo $file_rea | sed -e 's/^.*3DInputData//' )
163                cd -
164             fi
165         fi
166         ###################################################################
167         # Checking the avaibility of reanalysis native file
168         ###################################################################
169         if [ ! -f $file_rea ] ; then echo Reanalysis file $file_rea missing ; exit 1 ; fi
170
171         ###################################################################
172         # Special treatments
173         ###################################################################
174         if [ "$rea" = "ERAI" ] ; then
175             # original data in "short" should be changed to "float" for ferret
176             ncap2 -s $var'=float('$var')' $file_rea -O tmp.nc
177         elif [ "$rea" = "ERA5" -a $an -ge 2022 ] ; then
178             # Recent analysis available on a daily basis
179             cdo selhour,0,6,12,18 $file_rea -O tmp.nc
180         else
181             ln -sf $file_rea tmp.nc
182         fi
183
184         ###################################################################
185         # Dimensions of horizontal grid
186         ###################################################################
187         case $var in
188            v) imjm="i=1:$iip1,j=1:$jjm" ;;
189            *) imjm="i=1:$iip1,j=1:$jjp1"
190         esac
191
192         ###################################################################
193         # Grid to be used from grilles_gcm.nc
194         ###################################################################
195         case $var in
196            u|v) grid=grille_$var ;;
197            *) grid=grille_s
198         esac
199
200         ###################################################################
201         # Interpolating with ferret
202         ###################################################################
203         cat <<.........eod......... >| tmp.jnl
204         ! NB : Augmenter la memoire (plus de 512) peut faire planter
205         set memory/size=512
206         use "$GRID_FI"
207         use tmp.nc
208         define axis/t="1-${month}-${an}:00:00":"${nday}-${month}-${an}:18:00":6/units=hours thour
209         ! Pour regrid horizontal on utilise la variable grille_s(lonv,latu) du fichier grilles_gcm.nc
210         !! Alors il faut renommer la variable à la fin (ncrename), car le code cherche "UWND", "VWND".
211         save/clobber/file="$out_file" $var[d=2,gxy=${grid}[d=1],$imjm,$t0,gt=thour@asn]
212         repeat/$t1tn save/file="$out_file"/append $var[d=2,gxy=${grid}[d=1],$imjm,gt=thour@asn]
213.........eod.........
214
215         ferret -nojnl <<.........eod.........
216         go tmp.jnl
217         quit
218.........eod.........
219
220        ###################################################################
221        # Changing variable names
222        ###################################################################
223         case $var in
224            u) out_var=UWND ;;
225            v) out_var=VWND ;;
226            r) out_var=RH ;;
227            ta) out_var=AIR
228         esac
229         # ferret a ecrit $varu en majuscules,
230         # l'equivalent en bash est ${varu^^}
231         # (Note : inversement, ${varu,,} passe $varu de majuscules
232         # en minuscules)
233         ncrename -v ${var^^},$out_var $out_file
234     fi
235   done
236
237
238   #########################################################################
239   # Updating month counter
240   #########################################################################
241   echo AN MTH $an $mois
242   (( mth = $mth + 1 ))
243   if [ $mois = 12 ] ; then
244      (( an = $an + 1 ))
245      mth=${an}01
246   fi
247
248done
249ln -sf GUIDE_$rea GUIDE
Note: See TracBrowser for help on using the repository browser.