Maarten,

This is life with CF. Just to be sure I understand the details of the problem, the vertical set of pressure values at one lat and lon is different from the vertical set at a different lat and lon, correct? Is there no metric (as in, not just an index) vertical coordinate that you can construct that doesn't vary across the lat/lon grid?

As far as the pressure bounds being a variable no user will ever need, I've got to differ with you. Having an unambiguous, consistent, and automation-friendly mechanism for declaring bounds is quite useful. It removes uncertainty and avoids the problems that can develop when a product is developed by one community of people who say, for example, "Everyone knows that the grid boundaries are halfway between the grid points" and then gets used by a community of people who say, "Everyone knows that the grid boundaries are at the grid points." (I've dealt with this sort of problem more than once in my career!) If CF had a standard that stated that an extra element at the end of a dimension was understood to be an upper bound, then your original proposal would be fine. Without a standard, your original proposal is non-standard (by definition), and thus open to conflicting interpretations.

I've felt the same frustration about the inefficiencies of coordinate grids, but until we define a standard for a more compact representation, it's what we've got.

Grace and peace,

Jim

On 2/20/15 6:05 AM, Maarten Sneep wrote:
On 19-02-15 18:56, Jim Biard wrote:
Maarten,

It would, instead be something like this:

dimensions:
   lon = 360;
   lat = 180;
   layer = 18;
   vertices = 2;

variables:
    float lat(lat);
     lat:long_name = "latitude";
     lat:units = "degrees_north";
     lat:bounds = "lat_bnds";
   float lon(lon);
     lon:long_name = "longitude";
     lon:units = "degrees_east";
     lon:bounds = "lon_bnds";
   float pressure(layer, lon, lat);
     pressure:long_name = "pressure grid";
     pressure:units = "hPa";
     pressure:bounds = "pressure_bnds";
   float lat_bnds(lon,vertices);
   float lon_bnds(lat,vertices);
   float pressure_bnds(layer,lon,lat,vertices);
   float O3(layer, lon, lat);
     O3:units = "1e-9";
     O3:coordinates = "pressure";

You can have a layer index coordinate variable if you require/desire
one, but it isn't necessary. The bounds attribute is applied to the
pressure variable, and a coordinates attribute is applied to the O3
variable naming the pressure variable. The pressure variable is an
"auxiliary coordinate", and must be explicitly associated with the O3
variable in this way.

Thanks, but my colleague has a remark: "this is very inefficient" (although it is CF compliant).

Only the pressure boundaries are of interest, the pressures themselves are pretty much a dummy variable, although a pretty large dummy variable: 18*360*180 elements. Then the interfaces: 18*360*180*2. so instead of storing (18+1)*360*180, the storage requirement jumps to 3*18*360*180, or 2.84 times as much. Not a fantastic score. Especially for vertical coordinates this is a common situation

For regular coordinates the overhead is there, but at least it is a lot smaller. For irregular grids, this overhead is large, and adds variables no user will ever need. I'll think if I can think of a neat solution that can be used in CF2.

Best,

Maarten Sneep

--
CICS-NC <http://www.cicsnc.org/> Visit us on
Facebook <http://www.facebook.com/cicsnc>         *Jim Biard*
*Research Scholar*
Cooperative Institute for Climate and Satellites NC <http://cicsnc.org/>
North Carolina State University <http://ncsu.edu/>
NOAA's National Climatic Data Center <http://ncdc.noaa.gov/>
151 Patton Ave, Asheville, NC 28801
e: [email protected]
o: +1 828 271 4900




_______________________________________________
CF-metadata mailing list
[email protected]
http://mailman.cgd.ucar.edu/mailman/listinfo/cf-metadata

Reply via email to