netCDF Utilities

My previous posing asked:

>Are there any utilities available besides ncgen & ncdump?

Steve Emmerson <steve@xxxxxxxxxxxxxxxx> replied as follows:

>The Unidata Program Center is implementing a suite of netCDF programs.
>A draft functional and syntactical specification is available via
>anonymous FTP:

>        host:   unidata.ucar.edu [128.117.140.3]
>        files:  pub/sdm/ncprogs.ps
>                pub/sdm/ncprogs.txt

>The first file contains a PostScript document; the second contains an
>ASCII equivalent.

>Comments are welcome and should be sent to me <steve@xxxxxxxxxxxxxxxx>
>-- unless, of course, you feel that the topic has sufficient general
>appeal to warrant being posted to the mailing-list (to which I also
>subscribe).

I was very interested in this draft document & would like to start some
discussion within netcdfgroup by sharing my comments.

My first reaction is that the proposals seem to assume a quite different
way of using netcdf from that I have adopted so far in my rather limited
experience. I use ncgen to create files with everything except the main
data arrays. Then I use my program nc_put_var to put the data into the file.
It would greatly simplify the design of utilties if they did not have to
create new variables & their related attributes & coordinates.
I assume that the structure of a file does not change, only its data. I would
also assume that one would process only one variable at a time. I would hope
that all utilities would:
- do unit conversion using units attribute values of input & output files
- do type conversion, allowing different types in input & output files
- utilize add_offset & scale_factor when reading & writing

So far nc_put_var is the only utility I have developed. It reads data from
standard input & puts it into an existing variable in a netCDF file. Usage:
Usage:
  nc_put_var [-hps] [-i INDEX] [-m MISVAL] [-u UNIT] [-v VAR] FILE
    -h: Do not write more history
    -p: Persevere after errors
    -s: Silent mode: Suppress warning messages
    INDEX: index vector of 1st data value (default: 0,0,...)
    MISVAL: input missing value
    UNIT: input unit (default: unit in file)
    VAR: name of variable (default: final variable)
    FILE: name of netCDF file to be updated

I am not happy with the facility for specifying arrays in either the current
version of nc_put_var or the NCAR plans.  Examples where something more
powerful that the hyperslab is needed are:
- month=12,1,2 (summer for us down under, winter for the rest of you!)
- the ability to select any longitude interval & duplicate one or more 
  longitudes at the ends

I propose a more sophisticated array syntax based partly on APL notation.

An 'array' is specified by:
- netCDf filename
- variable name
- a list of vector subscripts specifying what rows, columns, etc. are included

The suggested syntax is:
filename;varname[list]
filename;varname (for whole array)

list has the form:
cv=vector;cv=vector;cv=vector;...
where cv is name of coordinate variable

vector is a list of triplets separated by commas

triplet can be any of:
- subscript
- :
- subscript:
- :subscript
- subscript:subscript
- :subscript:stride
- subscript::stride
- subscript:subscript:stride
- *
Note that a triplet defines an arithmetic progression as in F90
* means append along unlimited dimension i.e. effectively n+1,n+2,...,infinity
where n is current size of unlimited dimension (* can only be used for output)

subscript can be any of:
- integer
- ~number
- <number
- >number
- ~number unit
- <number unit
- >number unit
The 1st form directly specifies a dimension index 1,2,3,... (or maybe 0,1,2,...)
The prefix ~ < or > means that the index is found via the coordinate variable
> means least greater than or equal to
< means greatest less than or equal to

Examples:
Assume file 'abc.cdf' has a variable 'rain' with dimensions lat, long, month &
year.

abc.cdf;rain
- whole variable

abc.cdf;rain[lat=:8;long=~-180:>-90 degrees_east:2;month=12,1:2]
first eight latitudes (indices 1 to 8)
every 2nd longitude from closest to -180 degrees to first >= -90 degrees
months 12 1 & 2
all years

I hope these ideas are of interest & not too 'way out'.

Harvey Davies                   CSIRO Division of Atmospheric Research,
Email: hld@xxxxxxxxxxxx         Private Bag No. 1, Mordialloc,
Phone: (03)5867574              Victoria 3195,  Australia





  • 1992 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: