Re: sparse data variables

John Caron (caron@ucar.edu)
Thu, 17 Jul 1997 12:56:01 -0600

> > From:    Harvey DAVIES <hld@dit.csiro.au>
> > Subject: netCDF Conventions
> >
> >     dimensions:
> >       time = UNLIMITED;
> >       latitude = 56;
> >       longitude = 64;
> >       land_point = 1100; // about 30% of 56*64
> >     variables:
> >         float latitude(latitude);
> >         float longitude(longitude);
> >       short land_index(latitude, longitude);  // value of 'land_point' index
> >           land_index:valid_min = 0;
> >           land_index:missing_value = -1;      // -1 = ocean point
> >       float soil.temperature(time,land_point)

In this formulation, rather than looking up the coordinates of
soil.temperature, you start with a lat,lon grid and then you look up the
(missing or not) value of soil.temperature.

One alternate, obvious solution is:

        float soil.temperature( time, land_point);
            soil.temperature:coordinates = "lat lon";
        float lat( land_point);
        float lon( land_point);

of course then the lat, lon coord system is not connected.
so then you could try:
        
        float soil.temperature( time, land_point)
            soil.temperature:coordinates = "latidx lonidx";
        short latidx(land_point);
        short lonidx(land_point);

but theres no way (yet) to associate that to a nice connected coord
system like:
        float lat(lat);
        float lon(lon);

        but you can see that lat * latidx, lon * lonidx is a good
coordinate system for soil.temperature if "*" means functional
composition. So that suggests something like:

        float soil.temperature( time, land_point)
            soil.temperature:coordinates = "lat*latidx lon*lonidx";
        short latidx(land_point);
        short lonidx(land_point);
        float lat(lat);
        float lon(lon);