Skip to main content
ORNL DAAC HomeNASA Home

DAAC Home > Submit Data > NetCDF Data Requirements

NetCDF Data Requirements

Back to Submit Data

CF-compliant NetCDF metadata minimum requirements

Details about the CF Conventions can be found on the CF Conventions and Metadata website.

Define dimensions as needed:

  • time
  • lat
  • lon
  • nbnds

All variables should have attributes:

  • units = units compatible with the UDUNITS-2 format are recommended
  • long_name

In addition, lat/lon variables should have attributes:

  • standard_name = "latitude" or "longitude"
  • units = "degrees_north" or "degrees_east"
  • Values of longitude variable shall go from west (-180) to east (180). For global data, avoid longitude values going from 0 to 360.
  • Values of latitude variable shall go from south (-90) to north (90)

Values of latitude and longitude variables shall represent center of each grid cell.

In addition, time variables should have attributes:

  • standard_name = "time"
  • units = should follow CF conventions specifying the unit of measure and start date, such as "days since 2000-01-01 00:00:00" (see Time Coordinate). The time units should represent the middle time point of each measurement.
  • calendar (see Calendar)
  • bounds = "time_bnds". "time_bnds" is a separate 2-dimensional variable that defines the start and end time points of each measurement. Variable "time_bnds" has the same attributes "units" and "calendar" as variable "time".

It is highly recommended to use values of time variable represented in UTC.

In addition, data variables should have attributes:

  • _FillValue (denotes missing or blank data. Should be outside the valid range of the data.)

If multiple missing data values are presented, use the attribute below instead:

  • valid_range = values outside of valid range will be treated as missing values

In addition, data variables are highly recommended to include the attribute below:

  • cell_methods = Purpose of this attribute is to describe the characteristic of a field that is represented by cell values. For example, assume variable "pressure" is an hourly time series and it has attribute pressure:cell_methods = "time: point". This means the pressure values represent the pressure measured at certain time points every hour. But if it has attribute pressure:cell_methods = "time: mean", the pressure values represent the average pressure during each hour. See http://cfconventions.org/Data/cf-conventions/cf-conventions-1.7/cf-conventions.html#cell-methods for details.

Each file should also include the following global attributes:

  • institution (can be "Oak Ridge National Laboratory (ORNL) Distributed Active Archive Center (DAAC)", or the PI's institution)
  • references (any paper citation that the data is based on)
  • title (title of the data set)
  • source (some info about the source or provenance of the data set)

Any abbreviations, such as DAAC, should be spelled out in the attribute descriptions.

Example

dimensions:
     time = 506 ;
     lat = 360 ;
     lon = 720 ;
     nbnds = 2 ;

variables:
     double lon(lon=720);
       :units = "degrees_east";
       :long_name = "Longitude";
       :standard_name = "longitude";
       :_ChunkSize = 720; // int
 
     double lat(lat=360);
       :units = "degrees_north";
       :long_name = "Latitude";
       :standard_name = "latitude";
       :_ChunkSize = 360; // int
 
     float prop_secd(time=506, lat=360, lon=720);
       :_FillValue = -9999.0f; // float
       :long_name = "Proportion of landcover in secondary landcover";
       :missing_value = -9999.0f; // float
       :units = "percent";
    :cell_methods = "time:mean area:mean";
       :_ChunkSize = 1, 360, 720; // int
 
     double time(time=506);
       :long_name = "Time";
       :standard_name = "time";
       :calendar = "proleptic_gregorian";
       :units = "years since 1500-01-01 00:00:00";
    :bounds = "time_bnds";
       :_ChunkSize = 1; // int
 
     double time_bnds(time=506, nbnds=2);
    :long_name = "start and end points of each time step";
    :calendar = "proleptic_gregorian";
    :units = "years since 1500-01-01 00:00:00";

   // global attributes:
   :institution = "Oak Ridge National Laboratory (ORNL) Distributed Active Archive Center (DAAC)";
   :references = "Hurtt, G.C., L.P. Chini, S. Frolking, R. A. Betts, J. Feddema, G. Fischer, J. P. Fisk, K. Hibbard, R. A. Houghton, A. Janetos, C. D. Jones, G. Kindermann, T. Kinoshita, Kees Klein Goldewijk, K. Riahi, E. Shevliakova, S. Smith, E. Stehfest, A. Thomson, P. Thornton, D. P. van Vuuren, Y. P. Wang (2011) Harmonization of land-use scenarios for the period 1500–2100: 600 years of global gridded annual land-use transitions, wood harvest, and resulting secondary lands. Climatic change, 109:117-161. DOI 10.1007/s10584-011-0153-2";
   :title = "Land Use Harmonization version 1, including urban land (LUHa_u2.v1)";
   :source = "Version 1 of Land-Use History A product, including land-use changes and transitions from/to urban land";