Opened 14 years ago

Closed 8 years ago

Last modified 4 years ago

#23 closed defect (fixed)

Sortie de la coordonnée verticale hybride

Reported by: Laurent Fairhead Owned by: Laurent Fairhead
Priority: major Milestone:
Component: I/O Keywords:
Cc:

Description (last modified by lguez)

De Pascale:

Je n'ai pas tout suivi mais au fait, avez vous corrigé les niveaux indiqués dans les fichiers histmth. Si ma memoire est bonne l'axe indique des coordonnées pression alors qu'en fait ce sont des niveaux sigma et du coup tout le monde se plante. Les etudiants ne font pas attention et produisent de jolis graphes faux. En praticulier, Charline a du refaire enormement de choses pour sa thèse lorsque j'ai fini par m'en rendre compte. Pas tres agreable à la fin de thèse...

De Frédéric:

On a discuté plusieurs fois de sortir proprement la coordonnées verticale hybride. Mais je ne me souviens plus pourquoi ce n'est pas fait. Il faut en tous cas garder une pseudo-coordonnée pour sortir les choses simplement en mod interactif. Mais il faudrait indiquer que l'axe est en pseudo-pression par exemple

De Lionel : Je crois aussi que les méta-données actuelles ne sont pas bonnes. Premièrement, une convention de base des fichiers NetCDF est que les variables coordonnées, c'est-à-dire les variables dont le nom est identique au nom de leur unique dimension, sont strictement monotones. Ce qui n'est le cas ni avec "Ahyb" ni avec "Bhyb" ("Bhyb" constant nul aux plus hauts niveaux). On se le fait tout de suite signaler par Ferret quand on ouvre un fichier "hist" actuel. Deuxièmement, on est toujours loin de la convention CF, selon laquelle l'en-tête devrait être de ce type :

netcdf histday {
dimensions:
        time = UNLIMITED ; // (30 currently)
        s = 50 ;
        latitude = 73 ;
        longitude = 96 ;
variables:
        float time(time) ;
                time:units = "days since 1980-01-01" ;
                time:calendar = "360d" ;
                time:long_name = "time" ;
        float s(s) ;
                s:positive = "down" ;
                s:standard_name = "atmosphere_hybrid_sigma_pressure_coordinate" ;
                s:long_name = "hybrid sigma-pressure coordinate" ;
                s:formula_terms = "ap: ap b: bp ps: psol p0: p0" ;
        float latitude(latitude) ;
                latitude:units = "degrees_north" ;
                latitude:standard_name = "latitude" ;
        float longitude(longitude) ;
                longitude:units = "degrees_east" ;
                longitude:standard_name = "longitude" ;
        float temp(time, s, latitude, longitude) ;
                temp:units = "K" ;
                temp:standard_name = "air_temperature" ;
                temp:long_name = "air temperature" ;
        float ap(s) ;
                ap:title = "Coefficient A pour hybride" ;
                ap:units = "hPa" ;
        float bp(s) ;
                bp:title = "Coefficient B pour hybride" ;
        float psol(time, latitude, longitude) ;
                psol:units = "hPa" ;
                psol:standard_name = "surface_air_pressure" ;
                psol:long_name = "surface pressure" ;
        float p0 ;
                p0:units = "hPa" ;
                p0:long_name = "reference pressure for hybrid coordinate" ;

// global attributes:
                :Conventions = "CF-1.4" ;
                :institution = "IPSL" ;
data:

 time = 360.5, 361.5, ..., 389.5 ;

 s = 0.994072, ..., 0.0001417363 ;

 latitude = 90, 87.5, ..., -90 ;

 longitude = -180, -176.25, ..., 176.25 ;

 p0 = 500 ;

...
}

Une possibilité qui aurait le mérite d'être propre serait de partir d'une définition du fichier conforme à la convention CF comme ci-dessus et d'ajouter pour le confort des variables "alt" et "presnivs" qui dépendent de la coordonnée hybride "s". Dans Ferret par exemple, on pourrait taper :

shade temp[x=@ave, l=1], y[g=temp], alt

pour voir la température en fonction de la pseudo-altitude.

Change History (4)

comment:1 in reply to:  description ; Changed 14 years ago by lguez

Replying to fairhead:

De Pascale:

Je n'ai pas tout suivi mais au fait, avez vous corrigé les niveaux indiqués dans les fichiers histmth. Si ma memoire est bonne l'axe indique des coordonnées pression alors qu'en fait ce sont des niveaux sigma et du coup tout le monde se plante. Les etudiants ne font pas attention et produisent de jolis graphes faux. En praticulier, Charline a du refaire enormement de choses pour sa thèse lorsque j'ai fini par m'en rendre compte. Pas tres agreable à la fin de thèse...

De Frédéric:

On a discuté plusieurs fois de sortir proprement la coordonnées verticale hybride. Mais je ne me souviens plus pourquoi ce n'est pas fait. Il faut en tous cas garder une pseudo-coordonnée pour sortir les choses simplement en mod interactif. Mais il faudrait indiquer que l'axe est en pseudo-pression par exemple

De Lionel : Je crois aussi que les méta-données actuelles ne sont pas bonnes. Premièrement, une convention de base des fichiers NetCDF est que les variables coordonnées, c'est-à-dire les variables dont le nom est identique au nom de leur unique dimension, sont strictement monotones. Ce qui n'est le cas ni avec "Ahyb" ni avec "Bhyb" ("Bhyb" constant nul aux plus hauts niveaux). On se le fait tout de suite signaler par Ferret quand on ouvre un fichier "hist" actuel. Deuxièmement, on est toujours loin de la convention CF, selon laquelle l'en-tête devrait être de ce type :

netcdf histday {
dimensions:
        time = UNLIMITED ; // (30 currently)
        s = 50 ;
        latitude = 73 ;
        longitude = 96 ;
variables:
        float time(time) ;
                time:units = "days since 1980-01-01" ;
                time:calendar = "360d" ;
                time:long_name = "time" ;
        float s(s) ;
                s:positive = "down" ;
                s:standard_name = "atmosphere_hybrid_sigma_pressure_coordinate" ;
                s:long_name = "hybrid sigma-pressure coordinate" ;
                s:formula_terms = "ap: ap b: bp ps: psol p0: p0" ;
        float latitude(latitude) ;
                latitude:units = "degrees_north" ;
                latitude:standard_name = "latitude" ;
        float longitude(longitude) ;
                longitude:units = "degrees_east" ;
                longitude:standard_name = "longitude" ;
        float temp(time, s, latitude, longitude) ;
                temp:units = "K" ;
                temp:standard_name = "air_temperature" ;
                temp:long_name = "air temperature" ;
        float ap(s) ;
                ap:title = "Coefficient A pour hybride" ;
                ap:units = "hPa" ;
        float bp(s) ;
                bp:title = "Coefficient B pour hybride" ;
        float psol(time, latitude, longitude) ;
                psol:units = "hPa" ;
                psol:standard_name = "surface_air_pressure" ;
                psol:long_name = "surface pressure" ;
        float p0 ;
                p0:units = "hPa" ;
                p0:long_name = "reference pressure for hybrid coordinate" ;

// global attributes:
                :Conventions = "CF-1.4" ;
                :institution = "IPSL" ;
data:

 time = 360.5, 361.5, ..., 389.5 ;

 s = 0.994072, ..., 0.0001417363 ;

 latitude = 90, 87.5, ..., -90 ;

 longitude = -180, -176.25, ..., 176.25 ;

 p0 = 500 ;

...
}

Une possibilité qui aurait le mérite d'être propre serait de partir d'une définition du fichier conforme à la convention CF comme ci-dessus et d'ajouter pour le confort des variables "alt" et "presnivs" qui dépendent de la coordonnée hybride "s". Dans Ferret par exemple, on pourrait taper :

shade temp[x=@ave, l=1], y[g=temp], alt

pour voir la température en fonction de la pseudo-altitude.

comment:2 in reply to:  1 Changed 14 years ago by lguez

Description: modified (diff)

comment:3 Changed 8 years ago by Laurent Fairhead

Resolution: fixed
Status: newclosed

Attention depuis qu'on utilise XIOS, on ne sort plus que presnivs dans les fichiers histoire (pour une incompatibilité de XIOS 1.0)

comment:4 Changed 4 years ago by Laurent Fairhead

Milestone: LMDZ_AR5

Ticket retargeted after milestone deleted

Note: See TracTickets for help on using tickets.