[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: "promotion" of global attributes during aggregation



yes, ive been thinking about it (but not implemented). i think it should be 
straightforward, ill try it when i get a chance.

Steve Hankin wrote:
Hi John,

Referring to the major email thread (one email attached) that has been going on regarding ensemble aggregations (and forecast aggregations!): The proposals have been for a new (5th) dimension in CF that would be the ensemble axis. The assumption is that the "coordinates" associated with this axis would often be an array of strings. For example, there might be a coordinate variable called "institution" that contained "UCAR", "JPL", "PMEL", ... (I am glossing over the nuisance details that netCDF3 doesn't support a true String datatype. That detail does not really effect the current discussion.)
Now, though most of the discussions on the email seem to imply that the 
ensemble is in a single "file" I doubt that in practice this would often 
be the case.  Far more manageable would be if an aggregation server such 
as TDS were capable of creating the ensemble axis from a collection of 
individual files.  This would imply presumably that global attributes of 
the individual files (say a global attribute "institution") should be 
promoted to become arrays in the aggregation.
I was wondering if you had been planning (or already have implemented) 
such a capability in TDS.  There have been many years of conversation on 
this topic in the OPeNDAP world.
    - Steve

=================================================================

-------- Original Message --------
Subject:        Re: [CF-metadata] Getting back to ensembles
Date:   Tue, 28 Nov 2006 13:59:46 +0000
From:   Francisco Doblas-Reyes <address@hidden>
Reply-To:       address@hidden
Organization:   ECMWF
To:     address@hidden
CC:     Antje Weisheimer <address@hidden>
References:     <address@hidden>



Dear all,

I have to confess that I'm slightly lost after the exchange of messages in the last few weeks (time during which I was away and unable to respond). However, I'll try to make some comments on the proposed structures and send an example of what I've understood.
Using "realization" as the dimension to include ensemble data in the 
file seems a good option to me, although I went for a dimension name 
different (see below). String variables with this dimension should be 
able to do the job to include the metadata describing the simulations.
What is not so clear to me is whether attributes such as "institution" 
or "source" or the one mentioned by Jamie "experiment_id" would be 
allowed as auxiliary variables, "realization" being for me the 
coordinate variable. Their inclusion in the list of accepted standard 
names would be the best for me, but having them as standard_metadata or 
external_vocabulary is also acceptable. However, the use of external 
dictionaries poses certain problems, as discussed. We can maintain at 
ECMWF those describing the simulations performed with all the models 
that are run and archived here (several European forecast models), but 
nothing guarantees that the format will be similar to the vocabularies 
kept at, say, NCEP. Reaching an agreement on the external dictionaries 
might take again a few months and contacting people who are not part of 
the CF list.
Below there is an example of multi-forecast system file which is close 
to what is being discussed here. It's been constructed from a set of 
multi-model seasonal forecasts for the year 2001 (started on the first 
of February, May, August and November). The variable is geopotential 
height. Each single model (there are 7) contributes with a 9-member 
6-month simulation, where each member has been produced with slightly 
different initial conditions. You'll see that "ensemble" is a dimension, 
the label/coordinate variable (dimensioned with ensemble) being 
"realization", which is not monotonic (one of the alternatives discussed 
in Jonathan's message). Realization is a number because they correspond 
to the production order in the original single-model ensemble. Please, 
note the use of "reftime" and "leadtime" and let me know if you diagree 
with something. I included values for the variables "source" and 
"institution" (this last one being the institution providing the data), 
as well as for "experiment_id". Note that "experiment_id" is necessary 
because several experiments can be carried out with the same value of 
source, realization and institution. Keeping all these variables 
separate (instead of a long character chain) makes life easier for data 
handling and plot labelling.
I could read and plot the file with ncBrowse (both as a stand-alone file 
and as a request to a Thredds server) and I'm in the process of doing 
the same with the NCO functions.
Finally, as data providers we can rewrite the files once a final 
decision has been reached. In the meantime, we can serve the data with 
metadata similar to those below, but expressing that they can be changed 
in the near future.
Best regards,
Paco


netcdf MM_129_mon_2001 {
dimensions:
        longitude = 144 ;
        latitude = 71 ;
        level = 3 ;
        time = 24 ;
        time_bnd = 2 ;
        ensemble = 63 ;
        string4 = 4 ;
        string15 = 15 ;
        string50 = 50 ;
variables:
        float longitude(longitude) ;
                longitude:data_type = "float" ;
                longitude:units = "degrees_east" ;
                longitude:axis = "X" ;
                longitude:standard_name = "longitude" ;
                longitude:topology = "circular" ;
                longitude:modulo = 360 ;
                longitude:valid_min = 0. ;
                longitude:valid_max = 359. ;
        float latitude(latitude) ;
                latitude:data_type = "float" ;
                latitude:units = "degrees_north" ;
                latitude:axis = "Y" ;
                latitude:standard_name = "latitude" ;
                latitude:valid_min = -89. ;
                latitude:valid_max = 89. ;
        float reftime(time) ;
                reftime:units = "days since 1950-01-01 00:00:00" ;
                reftime:standard_name = "forecast_reference_time" ;
                reftime:long_name = "forecast reference time" ;
        int leadtime(time) ;
                leadtime:units = "days since 1950-01-01 00:00:00" ;
                leadtime:standard_name = "forecast_period" ;
leadtime:long_name = "Time elapsed since the start of the forecast" ;
                leadtime:bounds = "time_bnd" ;
        int time_bnd(time, time_bnd) ;
                time_bnd:units = "days since 1950-01-01 00:00:00" ;
        int realization(ensemble) ;
                realization:standard_name = "realization" ;
realization:long_name = "Number of the simulation in the ensemble" ;
        char experiment_id(ensemble, string4) ;
                experiment_id:standard_name = "experiment_id" ;
                experiment_id:long_name = "Experiment identifier" ;
        char source(ensemble, string50) ;
                source:standard_name = "source" ;
                source:long_name = "Method of production of the data" ;
        char institution(ensemble, string15) ;
                institution:standard_name = "institution" ;
institution:long_name = "Institution responsible for the forecast system" ;
        float level(level) ;
                level:data_type = "float" ;
                level:units = "hPa" ;
                level:axis = "Z" ;
                level:standard_name = "air_pressure" ;
                level:positive = "up" ;
        float geopotential(ensemble, time, level, latitude, longitude) ;
                geopotential:data_type = "float" ;
                geopotential:units = "m2 s-2" ;
                geopotential:unit_long = "square_meter_per_square_second" ;
                geopotential:standard_name = "geopotential" ;
                geopotential:long_name = "geopotential" ;
geopotential:cell_methods = "leadtime: mean (interval 1 day)" ;
                geopotential:_FillValue = 1.e+12f ;

// global attributes:
                :Conventions = "CF-1.0" ;
                :Generator = "SeasPy v1.1" ;
                :Created = "Fri Nov 10 15:09:50 2006" ;
:References = "http://www.ecmwf.int/research/demeter/index.html"; ; :Comment = "Data interpolated from original model grid into a regular grid. Data restrictions: none" ;
data:

skip lat, lon and level

reftime = 18659, 18659, 18659, 18659, 18659, 18659, 18748, 18748, 18748, 18748, 18748, 18748, 18840, 18840, 18840, 18840, 18840, 18840, 18932, 18932, 18932, 18932, 18932, 18932 ;
 leadtime = 18673, 18701, 18732, 18762, 18793, 18823, 18762, 18793, 
18823, 18854, 18885, 18915, 18854, 18885, 18915, 18946, 18976, 19007, 
18946, 18976, 19007, 19038, 19066, 19097 ;
skip time_bnd

realization = 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8 ;
 experiment_id =
  "cnrm",
  "cnrm",
  "cnrm",
  "cnrm",
  "cnrm",
  "cnrm",
  "cnrm",
  "cnrm",
  "cnrm",
  "crfc",
  "crfc",
  "crfc",
  "crfc",
  "crfc",
  "crfc",
  "crfc",
  "crfc",
  "crfc",
  "lody",
  "lody",
  "lody",
  "lody",
  "lody",
  "lody",
  "lody",
  "lody",
  "lody",
  "scnr",
  "scnr",
  "scnr",
  "scnr",
  "scnr",
  "scnr",
  "scnr",
  "scnr",
  "scnr",
  "scwf",
  "scwf",
  "scwf",
  "scwf",
  "scwf",
  "scwf",
  "scwf",
  "scwf",
  "scwf",
  "smpi",
  "smpi",
  "smpi",
  "smpi",
  "smpi",
  "smpi",
  "smpi",
  "smpi",
  "smpi",
  "ukmo",
  "ukmo",
  "ukmo",
  "ukmo",
  "ukmo",
  "ukmo",
  "ukmo",
  "ukmo",
  "ukmo" ;

 source =
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, ARPEGE3/OPA8.2, System 0, Method 1       ",
  "DEMETER, IFS23R4/OPA8.2, System 0, Method 1       ",
  "DEMETER, IFS23R4/OPA8.2, System 0, Method 1       ",
  "DEMETER, IFS23R4/OPA8.2, System 0, Method 1       ",
  "DEMETER, IFS23R4/OPA8.2, System 0, Method 1       ",
  "DEMETER, IFS23R4/OPA8.2, System 0, Method 1       ",
  "DEMETER, IFS23R4/OPA8.2, System 0, Method 1       ",
  "DEMETER, IFS23R4/OPA8.2, System 0, Method 1       ",
  "DEMETER, IFS23R4/OPA8.2, System 0, Method 1       ",
  "DEMETER, IFS23R4/OPA8.2, System 0, Method 1       ",
  "DEMETER, ECHAM4/OPA8.2, System 0, Method 1        ",
  "DEMETER, ECHAM4/OPA8.2, System 0, Method 1        ",
  "DEMETER, ECHAM4/OPA8.2, System 0, Method 1        ",
  "DEMETER, ECHAM4/OPA8.2, System 0, Method 1        ",
  "DEMETER, ECHAM4/OPA8.2, System 0, Method 1        ",
  "DEMETER, ECHAM4/OPA8.2, System 0, Method 1        ",
  "DEMETER, ECHAM4/OPA8.2, System 0, Method 1        ",
  "DEMETER, ECHAM4/OPA8.2, System 0, Method 1        ",
  "DEMETER, ECHAM4/OPA8.2, System 0, Method 1        ",
  "DEMETER, IFS23R4/HOPE-E, System 0, Method 1       ",
  "DEMETER, IFS23R4/HOPE-E, System 0, Method 1       ",
  "DEMETER, IFS23R4/HOPE-E, System 0, Method 1       ",
  "DEMETER, IFS23R4/HOPE-E, System 0, Method 1       ",
  "DEMETER, IFS23R4/HOPE-E, System 0, Method 1       ",
  "DEMETER, IFS23R4/HOPE-E, System 0, Method 1       ",
  "DEMETER, IFS23R4/HOPE-E, System 0, Method 1       ",
  "DEMETER, IFS23R4/HOPE-E, System 0, Method 1       ",
  "DEMETER, IFS23R4/HOPE-E, System 0, Method 1       ",
  "DEMETER, ECHAM5/OM1, System 0, Method 1           ",
  "DEMETER, ECHAM5/OM1, System 0, Method 1           ",
  "DEMETER, ECHAM5/OM1, System 0, Method 1           ",
  "DEMETER, ECHAM5/OM1, System 0, Method 1           ",
  "DEMETER, ECHAM5/OM1, System 0, Method 1           ",
  "DEMETER, ECHAM5/OM1, System 0, Method 1           ",
  "DEMETER, ECHAM5/OM1, System 0, Method 1           ",
  "DEMETER, ECHAM5/OM1, System 0, Method 1           ",
  "DEMETER, ECHAM5/OM1, System 0, Method 1           ",
  "DEMETER, GloSea, System 0, Method 1               ",
  "DEMETER, GloSea, System 0, Method 1               ",
  "DEMETER, GloSea, System 0, Method 1               ",
  "DEMETER, GloSea, System 0, Method 1               ",
  "DEMETER, GloSea, System 0, Method 1               ",
  "DEMETER, GloSea, System 0, Method 1               ",
  "DEMETER, GloSea, System 0, Method 1               ",
  "DEMETER, GloSea, System 0, Method 1               ",
  "DEMETER, GloSea, System 0, Method 1               " ;

 institution =
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          ",
  "ECMWF          " ;

--
________________________________________

Francisco J. Doblas-Reyes
European Centre for Medium-Range
Weather Forecasting (ECMWF)
Shinfield Park, RG2 9AX
Reading, UK

Tel: +44 (0)118 9499 655
Fax: +44 (0)118 9869 450
address@hidden
_______________________________________
_______________________________________________
CF-metadata mailing list
address@hidden
http://www.cgd.ucar.edu/mailman/listinfo/cf-metadata


--
--

Steve Hankin, NOAA/PMEL -- address@hidden
7600 Sand Point Way NE, Seattle, WA 98115-0070
ph. (206) 526-6080, FAX (206) 526-6744