Hi John: > A simple example, first where the coordinate info is attached to a > specific data variable: > > dimensions: > lon = 6 ; > lat = 5 ; > height = 30; > > variables: > float TEMP(height, lat, lon) ; > TEMP:lon="lon_coords" ; > TEMP:lat="lat_coords" ; > float lon_coords(lat,lon) ; > float lat_coords(lat,lon) ; > > Suppose we want to plot/analyze/examine/etc. variable "TEMP". We > immediately see it is a 6x5x3 array of values. Then, we want to find > out more about the coordinates corresponding to the datapoints of > "TEMP". There are no variables "lon" and "lat", so we simply take the > coordinates to be "1,2,3,..." along each axis. > > So what else can we deduce? The rule for referential attributes is > that when there is a variable attribute by the same name as one of the > variable's dimensions, that attribute contains the name(s) of other > variables from which to get spatio-temporal coordinates for that > dimension. In this case, the longitudes can be obtained from variable > "lon_coords". When we go to look at "lon_coords", we see that it is > 2-D, so we match up which dimensions it has in common with TEMP. This > tells us that the longitudes for TEMP(*,j,i) are in lon_coords(j,i). > Likewise for latitudes. I think we all agree on the meaning of this example, and we are trying to decide on the best way to convey that meaning to an application, or a person reading our netcdf files who hasnt followed our discussion. A coordinate variable says "the variable lat is the coordinate function for the index lat", but in this example you cant say that, nor can you say "the variables lat_coords, lon_coords are the coordinate functions for the index lat". What you can say is "the variables lat_coords, lon_coords are the coordinate functions for the variable TEMP". I want to claim that (lat, lon) are nothing but indices, and could just as well be written (npoints). If theres a coordinate variable lat(lat), then we have some meaning. So the dimensions aren't fundamental to a coord system, the coord functions are. So in general, you can't define the coordinate system in reference to the dimensions (well, you can, but I claim its not the best). better is something like: float TEMP(height, lat, lon) ; TEMP:coordinates="lon_coords lat_coords" ; float lon_coords(lat,lon) ; float lat_coords(lat,lon) ; although I've come to favor: float TEMP(height,x,y) ; TEMP:coordinates="lon_coords lat_coords" ; float lon_coords(x,y) ; float lat_coords(x,y) ;