Hi Tim,
Other than the axis attribute for time, I didn't see any issues. You
might run the CF compliance checker on the file
(
http://cf-pcmdi.llnl.gov/conformance), but it might not run if the
other utilities stumbled. Maybe someone else has some ideas.
cheers,
Karl
Timothy Hume wrote:
> Hi,
>
> I am writing NetCDF files which hold surface fields (2m temperature etc) from multiple NWP model runs (all the runs from the same model for the last month or so). The files are for operational use, so I want them to strictly follow the CF conventions. I am running into a couple of problems, where the conventions don't seem to be ideally suited for storing more than a single model run.
>
> Here is what I do:
>
> I have four dimensions and associated coordinate variables:
>
> basetime: The base time for the model run (units: seconds since 1970-01-01 00:00:00.0 +0:00)
> forecast: The forecast lead time, relative to the basetime (units: hours)
> latitude
> longitude
>
> There is no need for a vertical dimension, because I am using surface fields. Never-the-less I make use of a scalar vertical coordinate variable as described in Section 5.7 of the CF-1.3 metadata conventions document.
>
> The use of two dimensions to store the time information (basetime and forecast) seems to be a natural way to store multiple NWP model runs, and is the standard way used in the very old NUWG conventions. As far as I can tell, what I am doing is supported by the CF conventions, provided the time axis is taken to be the basetime dimension. This is because Section 4.4 of the conventions specifies the units of the time coordinate must include a reference time. Obviously the units of the forecast coordinate cannot include a reference time, because the reference time varies, and is determined by the value of the basetime coordinate.
>
> The difficulty I am encountering is that some applications which read NetCDF/CF files (such as the Unidata IDV and Joe Sirott's very nice web based NetCDF data viewer) seem to choke on my data. I suspect (but am not 100% certain in the case of the IDV) that the reason is because of the way I handle the time information in my files.
>
> To illustrate in more detail what my files look like, I am attaching the CDL from an example file. The CDL is non-CF compliant, because I have specified the "T" axis (via the axis variable attribute) to be the forecast coordinate, and the forecast coordinate has invalid units (no reference time). I am planning on switching the "T" axis to the base time coordinate, which as far as I can determine should make the file CF compliant.
>
> My question is: is there a better (or more standard) way of storing multiple NWP model runs in a single file than what I am doing?
>
> Cheers,
>
> Tim Hume
> Centre for Australian Weather and Climate Research
> Australian Bureau of Meteorology
> Melbourne
> Australia
>
> --- Example CDL follows ---
>
> netcdf gasp_1p0deg_ocf_t2m_rtdb_opn {
> dimensions:
> forecast = 69 ;
> basetime = UNLIMITED ; // (100 currently)
> latitude = 96 ;
> longitude = 121 ;
> bounds = 2 ;
> variables:
> double forecast(forecast) ;
> forecast:long_name = "Time of model forecast, relative to the basetime" ;
> forecast:units = "hours" ;
> forecast:standard_name = "forecast_period" ;
> forecast:axis = "T" ;
> forecast:bounds = "forecast_bounds" ;
> double forecast_bounds(forecast, bounds) ;
> forecast_bounds:long_name = "forecast interval" ;
> forecast_bounds:units = "hours" ;
> int basetime(basetime) ;
> basetime:long_name = "Model basetime" ;
> basetime:units = "seconds since 1970-01-01 00:00:00.0 +0:00" ;
> basetime:calendar = "gregorian" ;
> basetime:standard_name = "forecast_reference_time" ;
> double latitude(latitude) ;
> latitude:long_name = "latitude" ;
> latitude:units = "degrees_north" ;
> latitude:bounds = "latitude_bounds" ;
> latitude:valid_min = -90. ;
> latitude:valid_max = 90. ;
> latitude:standard_name = "latitude" ;
> latitude:axis = "Y" ;
> double latitude_bounds(latitude, bounds) ;
> latitude_bounds:long_name = "grid cell latitude boundaries" ;
> latitude_bounds:units = "degrees_north" ;
> latitude_bounds:valid_min = -90. ;
> latitude_bounds:valid_max = 90. ;
> double longitude(longitude) ;
> longitude:long_name = "longitude" ;
> longitude:units = "degrees_east" ;
> longitude:bounds = "longitude_bounds" ;
> longitude:valid_min = -360. ;
> longitude:valid_max = 360. ;
> longitude:standard_name = "longitude" ;
> longitude:axis = "X" ;
> double longitude_bounds(longitude, bounds) ;
> longitude_bounds:long_name = "grid cell longitude boundaries" ;
> longitude_bounds:units = "degrees_east" ;
> longitude_bounds:valid_min = -360. ;
> longitude_bounds:valid_max = 360. ;
> float temperature_2m(basetime, forecast, latitude, longitude) ;
> temperature_2m:long_name = "Air temperature 2m above the surface" ;
> temperature_2m:units = "K" ;
> temperature_2m:_FillValue = 9.96921e+36f ;
> temperature_2m:missing_value = 9.96921e+36f ;
> temperature_2m:valid_min = 180.f ;
> temperature_2m:valid_max = 330.f ;
> temperature_2m:standard_name = "air_temperature" ;
> temperature_2m:cell_methods = "lat: lon: mean (area weighted)" ;
> temperature_2m:coordinates = "level" ;
> double level ;
> level:long_name = "Height above the surface" ;
> level:units = "m" ;
> level:positive = "up" ;
> level:standard_name = "height" ;
> level:axis = "Z" ;
>
> // global attributes:
> :Conventions = "CF-1.3" ;
> :history = "File created by the Gridded OCF data ingest system" ;
> :institution = "Australian Bureau of Meteorology" ;
> :source = "model" ;
> :title = "GASP forecasts of temperature_2m; resolution: 1.0 degree; source: rtdb" ;
> :topography = "MSAS" ;
> }
> _______________________________________________
> CF-metadata mailing list
> CF-metadata at cgd.ucar.edu
> http:// mailman.cgd.ucar.edu/mailman/listinfo/cf-metadata
>
>
Received on Wed Jan 07 2009 - 17:03:07 GMT