Unidata - To provide the data services, tools, and cyberinfrastructure leadership that advance Earth system science, enhance educational opportunities, and broaden participation. Unidata
         
  advanced  
 

GDV Conventions for Gridded Data in NetCDF

John Caron  caron@ucar.edu
Last changed: 10/11/2001


GDV Conventions are a superset of  COARDS Conventions, so that a  COARDS-compliant dataset is also a GDV dataset. Because GDV allows dimensions to be in any order, a GDV dataset is not necessaily a COARDS dataset.  Additional features are added while trying to retain the original simplicity and clarity of COARDS. In general, the goal is to provide a minimal set of conventions that will allow maximum data use by software programs. 

This document reflects the state of implementation by the Integrated Data Viewer.  These conventions are recommended to data providers who are writing new gridded datasets in netCDF.  If your gridded dataset cannot be specified by these conventions, please let me know.

Convention Specification

   Required:
       :Conventions = "GDV";
  or, if the file satisfies both COARDS and GDV conventions:
       :Conventions = "COARDS, GDV";
   Recommended:
       :ConventionsURL = "http://www.unidata.ucar.edu/staff/caron/GDV/Conventions.html";

GeoGrids

A GeoGrid is a special type of NetCDF variable that follows the rules listed next. The IDV is specialized to display GeoGrids, and so only displays those netCDF variables that are GeoGrids.

   Required:

Recommended:
       float geogrid(t,z,y,x);
         geogrid:long_name = “descriptive name”;
         geogrid:units = “unit string parsable by ucar.units”;

Coordinate Axes

Coordinate axes are a generalization of netCDF coordinate variables. When we look at a variable, we see a list of dimensions. We need to associate with each dimension a set of coordinates, which we call a coordinate axis. Normally this is specified by a netCDF variable with some special restrictions.
        float lat(lat);
        float myLat( lat);
          myLat:coord_axis = "lat";
which says that lat_edge is a coordinate axis for dimension lat. Variables that use the "lat" dimension will be properly georeferenced. The dimension lat_edge must be exactly one greater than the dimension lat. You can have both a regular coordinate axis and an "edge" coordinate axis, and GDV will tell which is which by the cardinality. In no other case can you have more than one coordinate axis for a dimension.

A coordinate axis must obey the following restrictions:

GeoReferencing Coordinate Axes

These are coordinate axes that describe the spatial and time coordinates of the data. There are three kinds: time, vertical, and horizontal.

Time Coordinate Axis

  1. The time coordinate axis must have a udunits time unit, eg "secs since 1970-01-01 00:00:00" or  "days since 0000-01-01".
  2. It is identified by one of these methods (preferred ones first).
    1. the Variable name is time
    2. it has an attribute: coord_alias = "time";
    3. the units are in udunits of time.


    Note that if you have other variables that have units of time, it would be smart not to rely on method 3 to identify the time coordinates axes.

Vertical Coordinate Axis

  • The vertical coordinate axis must have a unit attribute
  • It is identified by one of these methods:
    1. the Variable name is z, level or lev.
    2. the value of the Variable's attribute coord_alias is z, level or lev.
    3. the Variable units are hybrid_sigma_pressure or sigma_level.
    4. the presence of a Variable attribute positive, whose value is up or down.
    5. the units are in pressure (udunits convertible to millibar)
    Note that if you have other variables that have units of pressure, it would be smart not to rely on method 5 to identify the vertical coordinates axes.

    Horizontal Coordinate Axes

    The horizontal coordinate axis must specify lat/lon or projection coordinates:

    Lat/Lon Horizontal Coordinate Axes

    Projection Horizontal Coordinate Axes

    Many gridded models are generated on a projection coordinate system. To map these to the earth's surface, we use a projection function, which is an invertible mapping from lat/lon to a cartesian (x,y) plane.  The grid coordinates can then be represented simply by two orthogonal coordinates axes, x and y, and the projection function is used to map them to lat/lon. The (x,y) coordinates are typically in units of "km on the projection plane". The projection function itself is specified by global attributes:
        :projection = "<projection name>";
        :projection_params = "<projection parameters>";
    The currently implemented projections and their parameters are: The projection parameters are space or comma delimited.  Reference: John Snyder, Map Projections used by the USGS, Bulletin 1532, 2nd edition (1983). Note that we havent yet dealt with projections that dont map to the earth's surface (like some satellite projections).
     

    Comparision to other netCDF conventions:

    COARDS

    CSM (version 1)

    CSM (version 1) are also a superset of COARDS, and GDV has included some of their extensions. Ultimately it could be a superset of CSM1 also.  Not done yet is: If you are interested in having GDV read a CSM dataset that depends on one of these features, please send me a sample dataset.
     

    VMD

    This is an older set of conventions developed in conjunction with the VMD program, an earlier version of GDV written in C.

    The coordinate axes can be identified by global attributes, eg:

        :x = "Regular: npts 62 start_edge -7533.0 size 243 km";
        :y = "Regular: npts 62 start_edge -7533.0 size 243 km";
        :lev = "lev";
        :time = "time";


    The projection information is specified by:

        :projection = "Oblique_Stereographic";
        :proj_params = "lat0 90 lon0 -105 latt 90 lont -105 scale .93301270189";


    It follows the CSM conventions for sigma coordinates:

         float lev(lev);
            :units = "hybrid";
            :long_name = "hybrid coord midpoints";
            :positive = "down";
            :edge = "lev_edge";
         float lev_edge(lev_edge);
            :units = "hybrid";
            :long_name = "hybrid coord edges";
            :positive = "down";
         float hybmida(lev);
         float hybmidb(lev);
         float hybinta(lev_edge);
         float hybintb(lev_edge);
        :pref = 100000.0;        // global
        :ps0 = 100000.0;


    Notes on parsing NUWG Conventions


     
     
     
     
     
      Contact Us     Site Map     Search     Terms and Conditions     Privacy Policy     Participation Policy
     
    National Science Foundation (NSF) UCAR Community Programs   Unidata is a member of the UCAR Community Programs, is managed by the University Corporation for Atmospheric Research, and is sponsored by the National Science Foundation.
    P.O. Box 3000     Boulder, CO 80307-3000 USA     Tel: 303-497-8643     Fax: 303-497-8690