11 Mai 2023

extraction and pre processing cmip5 & cmip6:

Table of content

A discuter

Mask cmip5

Pas de mask pour les simus :

      if ('cmip5_MRI-ESM1' in file1) | \
         ('cmip5_MRI-CGCM3' in file1) | \
         ('cmip5_MIROC4h' in file1) | \
         ('cmip5_MIROC5' in file1) :
         var1_value[var1_value == 0]=np.nan
      # Exception : thetao in Celsius &  lands=0 °C) ... delicat si temperature à 0
      if 'cmip5_EC-EARTH' in file1 :
         var1_value[var1_value == 0]=np.nan

=> if land = 0 => land = NaN

Peut poser problème quand thetao ou uo strictement = 0.
Mais pas un problème à priori là où on regarde.
Mais risque de générer de la terre là où il n'y en a pas.
Exemple au sud Est de l'australie?

Atlas XY et lonlat pas identiques en fonction de la verticale...

Exemple cmip5ACCESS1-0historical19890101-20051231Omon1mr1i1p1thetaomean

plot lev 1... X inversé.
Mais sans doute un probleme d'affichage automatique non contraint de ferret et ne dérange pas à priori pour faire les sections et les zones

Interpolation

NEAREST ne crée pas d'info, mais NEAREST + LINEAR plus juste pour la moyenne along shore?

Avantage: interpolation avec conservation des flux par exemple

mais long si grilles différente car nécessite la construction de fichiers de poids...

CMIP : choix des scénarios, forçages, modèles...

project='CMIP6',
info     : Attribute realization ='r1i1p1f*' has multiple values : ['r1i1p1f3', 'r1i1p1f1', 'r1i1p1f2']
info     : Attribute grid ='g*' has multiple values : ['gr1', 'gn', 'gr']

Est ce parce qu'en 2019 j'allais chercher r1i1p1 et r1i1p2... ??

liste 2023: shortnames detailed

liste 2019: shortnames detailed

en plus par rapport à 2019:

cmip5_FGOALS-s2
cmip5_inmcm4
cmip5_MIROC4h
cmip5_MIROC5

en plus par rapport à 2023:

cmip5_MPI-ESM-LR
cmip5_MPI-ESM-MR
cmip5_MPI-ESM-P

data : Glorys et oisst

Pulsation

des périodes différentes:
1989-1999
1990-2009
1989-2009
... est ce un problème?

Scénarios :
trop025_nemo/
trop025_now/
trop075_nemo/
trop075_now/
trop12_nemo/

Intéressant d'ajouter les simus avec zoom sur Pérou comme
trop075_peru025_nemo ?

Documentation

"gn":"data reported on a model's native grid",
"gr":"regridded data reported on the data provider's preferred target grid",

01_extract

CMIP5 thetao

CMIP6 thetao

CMIP5 & CMIP6 thetao exceptions

dimensions:
    time = UNLIMITED ; // (1 currently)
    bnds = 2 ;
    ncells = 830305 ;
    vertices = 16 ;
    depth = 46 ;
    double rho(rho) ;
        rho:_FillValue = NaN ;
        rho:standard_name = "sea_water_potential_density" ;
        rho:long_name = "potential density referenced to 2000 dbar" ;
        rho:units = "kg m-3" ;
        rho:positive = "down" ;
    double lev(lev) ;
        lev:standard_name = "ocean_sigma_coordinate" ;
        lev:long_name = "ocean sigma coordinate" ;
--> 178          var12_A[kk,:,:]=scipy.interpolate.griddata((lon1.flatten(),lat1.flatten()),var1[kk,:,:].flatten(),(lon2,lat2),method=interp_method_A)
    179          var12_B[kk,:,:]=scipy.interpolate.griddata((lon1.flatten(),lat1.flatten()),var1[kk,:,:].flatten(),(lon2,lat2),method=interp_method_B)
    180          var12_AB[kk,:,:]=np.copy(var12_B[kk,:,:])

/net/nfs/tools/u20/Python/anaconda-2021.11/envs/meso-3.9/lib/python3.9/site-packages/scipy/interpolate/ndgriddata.py in griddata(points, values, xi, method, fill_value, rescale)
    258         return ip(xi)
    259     elif method == 'linear':
--> 260         ip = LinearNDInterpolator(points, values, fill_value=fill_value,
    261                                   rescale=rescale)
    262         return ip(xi)

interpnd.pyx in scipy.interpolate.interpnd.LinearNDInterpolator.__init__()

qhull.pyx in scipy.spatial.qhull.Delaunay.__init__()

qhull.pyx in scipy.spatial.qhull._Qhull.__init__()

QhullError: QH6154 Qhull precision error: Initial simplex is flat (facet 1 is coplanar with the interior point)

GLORYS

from bdd on spirit

cmip 5 & 6 (add with ESGF - June 2024)

Olivier Tores

02_pre-processing

#-------------------------------------------------------------------------------
#   lev cmip5
#-------------------------------------------------------------------------------

lev       : default
depth     : inmcm4  (sinon lev en sigma!)

tous les niveaux vont de la surface vers le fond
Exception  : HadGEM2-AO


#-------------------------------------------------------------------------------
#   lev cmip6
#-------------------------------------------------------------------------------

lev (m)   : default
lev (cm)  : CESM2-FV2, CESM2, CESM2-WACCM-FV2, CESM2-WACCM
deptht(m) : IPSL-CM5A2-INCA
olevel(m) : IPSL-CM6A-LR, IPSL-CM6A-LR-INCA

tous les niveaux vont de la surface vers le fond


#-------------------------------------------------------------------------------
#   longitude cmip5
#-------------------------------------------------------------------------------

lon       :default


#-------------------------------------------------------------------------------
#   longitude cmip6
#-------------------------------------------------------------------------------

longitude : default
lon       : CESM2, GFDL, GISS
nav_lon   : IPSL

03_interp_horiz

scipy.interpolate.griddata. LINEAR puis NEAREST

On interpole tous les fichiers (GLORYS, cmip & trop) de la même manière avec scipy.

Exception pour les trop dont la résolution est la même que la résolution de la grille d'interpolation:
On ne ré interpole pas puisque les grilles sont les mêmes.
En revanche on passe dans la même moulinette pour avoir exactement les mêmes infos
(notamment les longitudes qui avec l'interpolation passent les valeurs de 180 => 181 en 180 => -179)

04_interp_vert

cdo intlevel

sur les 75 niveaux des grilles pulsation

lev_grid="0.50576,1.555855,2.667682,3.85628,5.140361,6.543034,8.092519,9.82275,11.77368,13.99104,16.52532,19.4298,22.75762,26.5583,30.87456,35.7402,41.18002,47.21189,53.85064,61.11284,69.02168,77.61116,86.92943,97.04131,108.0303,120,133.0758,147.4062,163.1645,180.5499,199.79,221.1412,244.8906,271.3564,300.8875,333.8628,370.6885,411.7939,457.6256,508.6399,565.2923,628.026,697.2587,773.3683,856.679,947.4479,1045.854,1151.991,1265.861,1387.377,1516.364,1652.568,1795.671,1945.296,2101.027,2262.422,2429.025,2600.38,2776.039,2955.57,3138.565,3324.641,3513.446,3704.657,3897.982,4093.159,4289.953,4488.155,4687.581,4888.07,5089.479,5291.683,5494.575,5698.061,5902.058"

Les premiers niveaux ne sont souvent pas rempli car pas d'extrapolation.

=> On récupère le niveau 1 original pour le mettre au niveau 1 de la grille trop pour plotter la sst réelle.

05_lev1_orig

Interpolation verticale avec CDO sur les 75 niveaux de la grille trop fait que les premiers et derniers niveaux restent sans valeur.

On recopie sur le premier niveau vertical de la grille trop le premier niveau vertical de la grille native.
=> premier niveau vertical = SST réel de chaque simu CMIP.

Perspective

Tous les scripts ouverts sur les perspectives (multi zone, o2 comme hdfs...)

o2

même diags... oxycline zone upwelling = f(O2 dans EUC) ???

Autres zones d'upwelling

Va avec interup: qu'elle est la part de l'EUC dans l'alimentation de chaque zone?