Aller au contenu. | Aller à la navigation

Outils personnels
Se connecter
Sections
Vous êtes ici : Accueil Développeurs Groupes de travail Diagnostics NclWork

NclWork

Les modifications à apporter aux scripts NCL pour les faire tourner avec nos données

NCL


 

Les scripts MJO:

Les scripts de diagnostiques de la MJO sont disponibles ici

 

Mise en forme des données:

Les scripts utilisent les variables

  • precip
  • topl
  • u850
  • v850
  • u200
  • v200

 

Deux façons de récupérer les données:

  1. On récupère des fichiers histday.nc puis on en extrait une série temporelle d'une variable et on renomme la dimension et la variable temps avec les outils nco, ici pour la variable u850 pour une série allant du 01/01/1870 au 12/30/1874:
ncrcat -v u850,t_inst_00086400 LS01_187[01234]*_1D_histday.nc LS01_u850_DA_1870-1874.nc

ncrename -d time_counter,time -v t_inst_00086400,time LS01_u850_DA_1870-1874.nc LS01_u850_DA_1870-1874.nc

ncatted -a calendar,time,o,c,360_day LS01_u850_DA_1870-1874.nc LS01_u850_DA_1870-1874.nc
  1. On utilise les "séries temporelles" créées par la procédure POST de libIGCM. Les fichiers sont rangés dans ATM/Analyse/TS_DA. On peut utiliser la boucle suivante pour mettre en forme les données:
for var in precip topl u850 v850 u200 v200
do
ncrename -d time_counter,time -v time_counter,time MH07_18600101_18811230_1D_${var}.nc $workdir/MJO/MH07/MH07_${var}_DA_1860-1881.nc
ncatted -a calendar,time,o,c,360_day $workdir/MJO/MH07/MH07_${var}_DA_1860-1881.nc $workdir/MJO/MH07/MH07_${var}_DA_1860-1881.nc
done

Problèmes rencontrés:

  • l'attribut _Fillvalue des fichiers histoire IOIPSL, non reconnu par ncl. La norme NetCDF recommande en fait l'attribut _FillValue, on le rajoute avec la commande:
ncatted -a _FillValue,u850,a,f,1e+20 LS01_u850_DA_1870-1874.nc LS01_u850_DA_1870-1874.nc
  • certaines fonctions de ncl n'apprécie pas beaucoup les valeurs manquantes: il existe une fonction ncl poisson_grid_fill qui remplit les valeurs manquantes d'une variable par résolution de l'équation de Poisson.

 

Modifications des bibliothèques Ncl:

 

De façon générale, il faut modifier les bibliothèques et les scripts pour que le calendrier à 360 jours soit pris en compte. Ci-dessous les différences entre les versions originale et modifiée de la bibliothèque contributed.ncl:

3500c3500,3503
< ndys = 366 ; allow for leap year
---
> ; ndys = 366 ; allow for leap year
>
> ndys = 360
> ; allow for LMD 360day calendar

 

mjoclivar_2.ncl:

Modifications pour la nomenclature des fichiers (à généraliser), la prise en compte du calendrier à 360 jours, des coordonnées pour les tracés. Ci-dessous les différences entre les scripts original et modifié:

3c3
< load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
---
> load "/u/fairhead/Ncl/contributed.ncl"
12,13c12,13
<    ymdStrt = 19940101                         ; start yyyymmdd
<    ymdLast = 19981231                         ; last 
---
>    ymdStrt = 18700102                         ; start yyyymmdd
>    ymdLast = 18741230                         ; last 
19,20c19,20
<    var     = "olr"                            ; name of file                  
<    vName   = "OLR"                            ; name for plots
---
>    var     = "u200"                            ; name of file                  
>    vName   = "U200"                            ; name for plots
23,24c23,24
<    diri    = "/Users/shea/Data/AMWG/"         ; input directory  
<    fili    = var+".day.mean.nc"               ; input file      
---
>    diri    = "/tmpdir/fairhead/NCL/LS01/"         ; input directory  
>    fili    = "LS01_"+var+"_DA_1870-1874.nc"              ; input file      
27c27
<        diro= "/project/cas/shea/CDC/"         ; output dir
---
>        diro= "/tmpdir/fairhead/NCL/LS01/"         ; output dir
57c57,58
<    ddd     = day_of_year(year, month, day)
---
> ;   ddd     = day_of_year(year, month, day)
>    ddd = ((month-1)*30 + day)
63c64,65
<    x       =  short2flt( f->$var$(iStrt:iLast,:,:) )    ; convert to float
---
> ;   x       =  short2flt( f->$var$(iStrt:iLast,:,:) )    ; convert to float
>    x       =  f->$var$(iStrt:iLast,:,:)    ; convert to float
149,150c151,152
<         LAT   = (/ 60, 45,  5,  -5, -45, 60 /)
<         LON   = (/270, 30, 90,  90, 180,  0 /)
---
>         LAT   = (/ 59.68421, 44.52632, 4.736842,  -4.736842, -44.52632, -59.68421/)
>         LON   = (/-90, 30, 90,  90, -180,  0 /)
154c156
<         data  = new ( (/2,366/), typeof(xClmDay), getFillValue(xClmDay))
---
>         data  = new ( (/2,360/), typeof(xClmDay), getFillValue(xClmDay))
162c164,165
<         res@trXMaxF           = 366
---
> ;        res@trXMaxF           = 366
>         res@trXMaxF           = 360
196,197c199,200
<         ntBegin   = ind(yyyymmdd.eq.19961001)
<         ntEnd     = ind(yyyymmdd.eq.19970401)
---
>         ntBegin   = ind(yyyymmdd.eq.18721001)
>         ntEnd     = ind(yyyymmdd.eq.18730430)

 

mjoclivar_3.ncl:

Ajouter un commentaire

You can add a comment by filling out the form below. Plain text formatting. Comments are moderated.

Enter the word