IPCC Model Output Requirements

Requirements for

IPCC Standard Output Contributed to the PCMDI Archive

15 September 2005

(Send questions/comments/suggestions to taylor13@llnl.gov)

Click here to obtain a pdf version of this document.

Recent changes to this document are summarized in the last section below.

Overview

Much of the output from coupled ocean-atmosphere GCM simulations performed as part of the IPCC process will be archived at PCMDI and then distributed for analysis to IPCC WG1 under policies developed by IPCC and the WGCM. The user community will expect to be able to extract the data both efficiently and in a uniform way across all models. This imposes rather restrictive constraints on how the data should be organized. With currently available resources, the effort to write the data in a uniform structure and format falls on the modeling centers contributing the data. In this document we provide the specifications for writing this model output. There is considerable community support for imposing these same requirements on output contributed as part of various model intercomparison projects (e.g., CMIP, AMIP, CFMIP, APE, PMIP, etc.), so the effort required to prepare data for IPCC will likely have longer term payoffs as model output is prepared for these other projects.

A FORTRAN 90 code, CMOR[1] (pronounced "see more") has been written to output data that conforms to these requirements. Documentation[2] for this code explains how it can substantially reduce the burden placed on the modeling centers preparing IPCC model output. For those groups choosing not to use this output code, the following requirements should be strictly adhered to.

The data archived at PCMDI will be made available to the community via the ESG [3](Earth System Grid), which will include a variety of methods for accessing the data (e.g., GridFTP). Password protection will be used to limit access to those granted permission according to IPCC and WGCM policies.

The requirements for data contributed to the archive are listed in four sections below, the first specifying the general structure and format of the data, the second the constraints imposed on the variables, the third the metadata required for describing the coordinates, and the last setting down the required and recommended "global attributes".

Data format, data structure, and file composition requirements:

▪ Data must be written through the netCDF[4] API (application program interface) and conform to the CF metadata standards[5].

▪ Each file must contain only a single output field from a single simulation (i.e., a single run). Each file will also include coordinate variables, attributes and other metadata as specified below. If the field is a function of time, more than one time sample (but not necessarily all time samples) may be included in a single file. File size should never exceed 2 gigabytes; we recommend that for long time-series typical of many coupled model simulations, the data should not be parsed to finely: a few large files is preferred to many small files (within the 2 gigabyte limit). (Monthly data, for example, might be divided into multi-decade chunks.)

▪ For data that are a function of longitude and latitude, only grids representable as a Cartesian product of longitude and latitude axes are allowed. Model output on other grids, such as "thin" grids, grids with rotated poles, and irregular grids, must be mapped to a longitude-latitude Cartesian grid before being stored.

▪ Most atmospheric fields that are functions of the vertical coordinate must be interpolated to standard pressure levels (as specified in the IPCC Standard Output[6] list of variables), but one field (the 3-d cloud fraction) will reside on the original model levels. There are different metadata and attribute requirements specified below for these two types of "3-d" fields.

▪ Oceanic fields that are a function of the vertical coordinate must be reported on depth levels and it is recommended, but not required, that they be interpolated to standard depth levels (as specified in the IPCC Standard Output[7]).

▪ The IPCC database will comprise output from many different models, at least 11 experiments, perhaps several ensemble members, which have been sampled (or averaged) at 5 different frequencies (time-independent, annually, monthly, daily, and 3-hourly). A separate directory should be created containing all the variables in each model/experiment/standard_output_table/ensemble_member category (e.g., CSIRO/20C3M/A1/run1). This will ensure that filenames (discussed next) within each directory are unique. For uniformity, it is suggested that the trailing lower case letter on tables should be dropped (e.g., 'A1', not A1a) and it is suggested that the experiments be abbreviated as follows:

→ PIcntrl (i.e., the pre-industrial control experiment)

→ PDcntrl (i.e., the present-day control experiment)

→ 20C3M (i.e., the climate of the 20th Century experiment (20C3M))

→ Commit (i.e., the committed climate change experiment)

→ SRESA2 (i.e., the SRES A2 experiment)

→ SRESA1B (i.e., the 720 ppm stabilization experiment (SRES A1B))

→ SRESB1 (i.e., the 550 ppm stabilization experiment (SRES B1))

→ 1%_to2x (i.e., the 1%/year CO2 increase experiment (to doubling))

→ 1%_to4x (i.e., the 1%/year CO2 increase experiment (to quadrupling))

→ Slabcntl (i.e., the slab ocean control experiment)

→ 2xCO2 (i.e., the 2xCO2 equilibrium experiment)

→ AMIP (i.e., the AMIP experiment)

▪ The names of output netCDF files must begin with the 'output variable name' listed in the IPCC Standard Output[8] list of variables, followed by an underscore and then the table number (e.g., tas_O1, psl_A1, tas_A4, etc.; note that the lower case letter suffix on the tables may be omitted: psl_A1a may be written psl_A1). Following this prefix, the user is free to complete the name in any reasonable way. Recall that the time samples from a single variable may be separated into contiguous groups and stored in separate files. The user must make sure that the names of the series of files are unique. If, for example, each file contains 50 years of data, the user might simply label the files by 50-year chunks (e.g., tas_O1_1.nc, tas_O1_2.nc, tas_O1_3.nc, etc.), but more explicit information could also be included in the file names (e.g., tas_O1_1900-1949.nc, tas_O1950-1999.nc, tas_O1_2000-2049.nc, etc.)

Requirements for output variables:

▪ All output fields must be written as single precision floating point numbers (netCDF type "float").

▪ The variable names (in the netCDF file) must be the names ("output variable names") specified in the IPCC Standard Output[9] table (e.g., surface air temperature data will be stored in a variable named "tas").

▪ The units required for the output fields are given in the IPCC Standard Output[10] tables.

▪ The positive direction of vertical fluxes must be consistent with that specified in the IPCC Standard Output[11] table "CF standard name". For example, the positive direction for vertical heat fluxes (e.g., "surface_upward_latent_heat_flux") and momentum fluxes (e.g., "surface_downward_eastward_stress") are implied by the standard name.

▪ The order of array dimensions must be: time, level, latitude, longitude. For fields of lesser rank, one or more coordinate will be omitted, but the ordering must be preserved. The above order assumes the C language convention (opposite the FORTRAN convention) in which the last coordinate varies most rapidly. In the few cases where an additional dimension is required (e.g., the "region" dimension used to distinguish different ocean basins), that dimension should appear just after the "time" dimension.

▪ If longitude is a coordinate, data must be stored west to east (in degrees), starting with the first grid point greater than or equal to 0 degrees east. All coordinate locations must be unique (e.g., don't include both 0 and 360 degrees east).

▪ If latitude is a coordinate, data must be stored south to north (in degrees).

▪ If there is a vertical coordinate, data must be stored starting with the grid point nearest the surface.

▪ If there is a time dimension, data must be stored with time increasing.

▪ If there is a "region" coordinate, used to distinguish ocean basins, the data should be stored in the order: Atlantic, Indian, Pacific, global.

▪ All "missing data"[12] must be assigned the single precision floating point value of 1.e20

▪ For ocean heat flux and stream function data, an extra dimension must be included to identify the basin – Atlantic, Indian, Pacific, or global oceans. (See example 4 below.)

▪ Required attributes:

→ standard_name = a character string containing a CF standard name that can be found in the IPCC Standard Output[13] tables. Although usually required, for a few fields the standard_name is omitted from the table, and for these variables the standard_name should be omitted as an attribute.

→ units = a character string containing the units given in the IPCC Standard Output[14] tables, which must be in a form recognizable by UNIDATA's Udunits package[15] (e.g., "W m-2".)

→ If the variable has any "missing values", then define _FillValue = 1.e20, and assign that value to data that are "missing".

→ When an output field has a coordinate that is single-valued (e.g., surface wind may have a vertical coordinate value of 10 meters), a "coordinates" attribute must be defined and the scalar value must be stored in the file. The following variables require singleton dimension information: tas, tasmin, tasmax, mrsos, mrros, uas, vas, and huss. For each of these variables, an IPCC Standard Output[16] table indicates what the value of the singleton dimension should be. As illustrated by example 3 below, the "bounds" attribute is required on the singleton dimension associated with mrsos and mrros. See section 5.7 of the CF-conventions[17] for more information.

→ If the variable contains a time-mean, then the “cell_methods” attribute must be defined with the value “time: mean” or if you want to indicate that the interval between samples contributing to the mean is 3 hours, then cell_methods='time: mean (interval: 3 hours)'. If the variable is accumulated across an ocean basin then the cell_methods attribute must include the string “longitude: sum”. If the variable is both a time-mean and zonally accumulated, then cell_methods = 'time: mean longitude: sum').

→ When a field is stored by ocean basin (e.g., northward ocean heat transport in the Atlantic, Indian, and Pacific basins, as well as the global transport), a "coordinates" attribute must be defined with the value "geo_region". See example 4 below and section 6.1.1 of the CF-conventions[18] for more information.

▪ Recommended attributes:

→ If the variable has any "missing values", then define missing_value = 1.e20 Note that although this attribute seems to be redundant with _FillValue, some software that reads netCDF files expects the missing_value attribute, while other software expects the _FillValue attribute, so including both is recommended.

→ original_name = the name of the variable as it is commonly known at the user's modeling institute. If the variable being written was computed in some simple way from two or more original fields (e.g., subtracting the upwelling and downwelling fluxes to get a net flux, or multiplying by a scalar or changing the sign), then it is recommended that this be indicated in the "original_name" (e.g., "irup – irdown", where "irup" and "irdown" are the names of the original fields that were subtracted). If more complicated processing is required, attribute would likely be omitted and the information would more naturally be included in a "history" attribute for this variable, described next.

→ history = how the variable was processed before outputting (e.g., give name(s) of the file(s) from which the data were read and indicate what calculations were performed, such as interpolating to standard pressure levels or changing the unit). This information should allow someone at the user's institute to reproduce the procedure that created the output. Note that this history attribute is variable-specific, whereas the global history attribute defined below (see "Recommended attributes" under "Requirements for global attributes") provides information concerning the model simulation itself or refers to processing procedures common to all variables.

→ original_units = a character string indicating the original units of the data before it has been processed to be consistent with the units appearing in the IPCC Standard Output[19] tables.

→ long_name = a character string that might serve as a title for the variable on plots (e.g., "Surface Air Temperature").

→ comment = a character string providing further information concerning the variable (e.g., if the variable is mrso – soil_moisture_content –, the comment might read "includes subsurface frozen water but not surface snow and ice").

Requirements for coordinate variables:

▪ All coordinate variables must be written as double precision floating point numbers (netCDF type "double").

▪ A longitude coordinate must be named either "longitude" or, preferably, "lon", its CF standard name is "longitude", and its units must be "degrees_east". The values should be store west to east starting with the first longitude greater than or equal to 0 degrees.

▪ A latitude coordinate must be named either "latitude" or, preferably, "lat", its CF standard name is "latitude", and its units must be "degrees_north". The values should be stored south to north.

▪ A time coordinate must be named "time", its CF standard name is "time", and its units must be "days since [basetime]", where [basetime] can be specified by the user, typically in the form year-month-day (e.g., "days since 1800-1-1"). The same 'base time' should apply to all time samples in a single simulation (i.e., when creating a series of files containing model output for a single run, don't change the units or basetime from one file to the next; in the above example 1800-1-1 is the 'base time'). For time-mean data, it is recommended that the coordinate value be defined as the mid-point of the interval over which the average is computed. (More generally, this same recommendation applies whenever time-bounds are included: the time coordinate value should be the mean of the two time bounds.)

▪ An atmospheric pressure coordinate must be named "plev", its CF standard name is "air_pressure" and its units must be "Pa" (Pascal). The values should be stored in order of decreasing pressure.

▪ An atmospheric height coordinate must be named "height", its CF standard name is "height" and its units must be "m" (meters). The values should be stored in order of increasing height.

▪ An atmospheric or ocean dimensionless vertical coordinate (indicating model level) must be named "lev" and its CF standard name can be found in Appendix D[20] of the CF-conventions. The values should be stored starting with the coordinate nearest the earth's surface.

▪ An ocean depth coordinate must be named "depth", its CF standard name is "depth", its units must be "m" (meters), and it must increase with increasing depth (i.e., positive-down). The values should be stored in order of increasing depth (surface down).

▪ With some exceptions (indicated immediately below), the bounds on coordinate variables must be included in the file. For longitude and latitude, the bounds must always be included. For time, the bounds must be included if the data represent a time-mean (e.g., monthly mean). For model-level data, the cell bounds should be included, indicating the interfaces between model levels (see example 5 below). For data that has been interpolated to pressure surfaces, there should be no “bounds” attribute attached to the pressure coordinate (see example 2 below). The same is true for ocean depth coordinate data that has been interpolated from model levels. For data that represent a “snap-shot” in time (e.g., the values at a single model time-step), the time coordinate should have no “bounds” attribute. A "region" dimension will not require bounds (see example 5 below). Note that CF requires cell bounds for 1-dimensional coordinates be stored in 2-dimensional arrays as described in section 7.1 of the CF-conventions[21] and as shown in the examples below.

▪ For dimensionless vertical coordinates, the user must include in the file all the information needed to positively and uniquely indicate the location of the data. In this case the "formula_terms" attribute must be defined and additional variables or parameters will need to be stored in the file (e.g., surface pressure and pressure at the top of the model for an atmospheric-sigma coordinate system). See example 5 below, and section 4.3.2 of the CF-conventions[22] and Appendix D[23] of the CF-conventions.

▪ Variables that are stored by basin must include a dimension corresponding with the geographic region. The "region" dimension is a simple index (no coordinate values) with the name "region". A character variable (netCDF type "char") by the name of "geo_region" must also be defined with dimensions (region, strlen), where region is again the simple index and strlen is the maximum string length. A "standard_name" attribute with the value "region" must be attached to "geo_region". The values of the labels stored in geo_region which identify the basins, are taken from the list of valid region names[24] (e.g., "atlantic_ocean", "indian_ocean", "pacific_ocean", and "global_ocean"). See example 4 below and section 6.1.1 of the CF-conventions[25] for more information.

▪ Required attributes:

→ standard_name = a character string containing the standard name (see coordinate standard names given above).

→ units = a character string containing the units (see allowable coordinate units given above). Note that in the case of a dimensionless vertical coordinate, this attribute may be omitted.

→ axis = "X", "Y", "Z", or "T" as appropriate (see section 4 of the CF-conventions[26]). In the few cases where an additional dimension is required (e.g., the "region" dimension used to distinguish different ocean basins), this attribute should be omitted (for this additional dimension).

→ bounds = a character string containing the name of the variable where the cell bounds are stored.

→ For time coordinates, the “calendar” attribute must be included as described in section 4.4.1 of the CF-conventions[27]. Note that if a model has a gregorian calendar and the base time is defined to be prior to 1582, then the user should specify 'proleptic_gregorian', rather than 'gregorian' for the calendar attribute.

→ For dimensionless vertical coordinates the “positive” attribute must be included and should be set to either “down” or “up”, as appropriate.

→ For dimensionless vertical coordinates, the “formula_terms” attribute must be defined as described in section 4.3.2 of the CF-conventions[28] and as illustrated in example 5 below. Further information can be found in Appendix D[29] of the CF-conventions.

▪ Recommended attributes:

→ For dimensionless vertical coordinates the “positive” attribute is required, and for all other vertical coordinates it is recommended that it be defined.

Requirements for global attributes:

▪ Required attributes:

→ institution = a character string containing an abbreviated name or acronym of the institution that performed the model simulation, followed in parentheses by the fully spelled-out name and location (e.g., 'GFDL (Geophysical Fluid Dynamics Laboratory, Princeton, NJ, USA)')

→ source = a character string identifying the model version as it should be identified by the IPCC (although the IPCC may in many cases choose to identify models only by the institution's acronym). Additionally, this attribute must include the year (i.e., model vintage) when this model version was first used in a scientific application. Finally it should include information concerning the component models. The following template should be used in constructing this string: '[coupled_model_name] ([year]): atmosphere: [model_name] ([technical_name], [resolution_and_levels]); ocean: [model_name] ([technical_name], [resolution_and_levels]); sea ice: [model_name] ([technical_name]); land: [model_name] ([technical_name])'' As an example, "source" might contain the string: 'CCSM2 (2002): atmosphere: CAM2 (cam2_0_brnchT_itea_2, T42L26); ocean: POP (pop2_0_ver_1.4.3, 2x3L15); sea ice: CSIM4; land: CLM2.0'. Additional explanatory information may follow the required information.

→ project_id = "IPCC Fourth Assessment"

→ table_id = should be assigned a character string identifying the IPCC Standard Output[30] table where this variable appears (e.g., Table A1). The trailing lower case letter may be omitted (e.g., 'Table A1a' may be written 'Table A1').

→ realization = an integer identifying the ensemble member from which the data were obtained (e.g., 1, 2, 3, etc.; this attribute should be set to 1 if only a single simulation was performed).

→ experiment_id = the appropriate character string, identifying the experiment, taken from the following list:

'pre-industrial control experiment'

'present-day control experiment'

'climate of the 20th Century experiment (20C3M)'

'committed climate change experiment'

'SRES A2 experiment'

'720 ppm stabilization experiment (SRES A1B)'

'550 ppm stabilization experiment (SRES B1)'

'1%/year CO2 increase experiment (to doubling)'

'1%/year CO2 increase experiment (to quadrupling)'

'slab ocean control experiment'

'2xCO2 equilibrium experiment'

'AMIP experiment'

▪ Recommended attributes:

→ Conventions = 'CF-1.0'

→ contact = name and contact information (e.g., email, address, phone number) of person who should be contacted for more information about the data.

→ history = A character string containing an audit trail for modifications to the original data. Each modification is typically preceded by a "timestamp". The "history" attribute provided here will be a global one that should not depend on which variable is contained in the file. A variable-specific "history" can also be included as an attribute attached to the output variable.

→ comment = A character string containing additional information about the data or methods used to produce it. The user may include, for example, a description of how the initial conditions for a simulation were specified and how the model was spun-up (including the length of the spin-up period). If the run was initiated from a "control" run, it would be appropriate to indicate which control run was used and what time in that run provided the initial conditions (e.g. "This simulation was initiated from the end of control run eulT42cntrl"). Also please specify which forcing agents are included in the historical runs (e.g., greenhouse gases, sulfate aerosol direct effects, volcanoes, solar forcing, etc.)

→ references = A character string containing a list of published or web-based references that describe the data or the methods used to produce it. Typically, the user should provide references describing the model formulation here.

→ title = "[institute_name] model output prepared for IPCC Fourth Assessment Report [experiment_id]" where [institute_name] should be replaced by the contributing institution's acronym or name (e.g., "GFDL", "CCCma", "Hadley Centre", etc.) and [experiment_id] should be replaced by one of the following strings:

'pre-industrial control experiment'

'present-day control experiment'

'climate of the 20th Century experiment (20C3M)'

'committed climate change experiment'

'SRES A2 experiment'

'720 ppm stabilization experiment (SRES A1B)'

'550 ppm stabilization experiment (SRES B1)'

'1%/year CO2 increase experiment (to doubling)'

'1%/year CO2 increase experiment (to quadrupling)'

'slab ocean control experiment'

'2xCO2 equilibrium experiment'

'AMIP experiment'

A sample title is: 'GFDL model output prepared for IPCC Fourth Assessment 1%/year CO2 increase experiment'

Recent Changes to this Document:

15 September 2005:

▪ Edited in minor ways for increased clarity.

25 January 2005:

▪ Corrected specified order of "region" coordinate to be: Atlantic, Indian, Pacific, global (was Atlantic, Pacific, Indian, global).

17 November 2004:

▪ Recommended that long time-series not be subdivided into too many files; within the 2 gigabyte limit, store relatively few large files.

15 September 2004:

▪ Noted that ocean data data may be reported on depth levels that are not standard.

▪ The recommended directory structure for storing output fields was altered.

▪ Noted that unique longitudes should be stored (i.e., don't duplicate, for example, a grid cell located at 0 degree with one stored at 360 degree longitude).

▪ Noted that the 'base time' in the time units attribute should be the same for all files for a single model run.

▪ Noted that when a model uses a gregorian calendar and the "base time" preceeds year1582, then 'proleptic_gregorian', rather than 'gregorian' should be specified as the calendar attribute.

▪ Provided further explanation of the table_id global attribute.

▪ Removed option of not specifying the "realization" global attribute. (It should be set to the integer 1, if only a single realization was performed).

▪ Noted that cell_bounds attribute should be omitted if ocean data has been interpolated to standard depth levels.

▪ Several web page links were corrected.

4 September 2004: Web addresses changed to be consistent with the new PCMDI web site.

29 July 2004: A recommendation was added to specify in the global "comment" attribute which forcing agents are included in the 20C3M simulations.

20 July 2004: A recommendation was added that when time-bounds are included in the file, the time-coordinate values should always be the mean of the two associated time-bounds. For example, it is recommended that the time coordinate value of a time-mean should be defined as the mid-point of the averaging interval.

19 July 2004: One more official experiment name was changed to be more consistent with the others: 'climate of the 20th Century experiment (20C3M)' was previously referred to as 'climate of the 20th Century (20C3M)'

15 July 2004: Three of the official experiment names were changed; these were the names of the control experiments, which now read: 1) 'pre-industrial control experiment', 'present-day control experiment', and 'slab ocean control experiment'. Also, 'AMIP experiment' was added as an official IPCC experiment.

6 June 2004: Initial document version released.

Example 1: Surface latent heat flux

(a function of longitude, latitude, month)

netcdf hfls_A1 {

dimensions:

lon = 4 ;

lat = 3 ;

time = UNLIMITED ; // (2 currently)

bnds = 2 ;

variables:

double lon(lon) ;

lon:standard_name = "longitude" ;

lon:long_name = "longitude" ;

lon:units = "degrees_east" ;

lon:axis = "X" ;

lon:bounds = "lon_bnds" ;

double lon_bnds(lon, bnds) ;

double lat(lat) ;

lat:standard_name = "latitude" ;

lat:long_name = "latitude" ;

lat:units = "degrees_north" ;

lat:axis = "Y" ;

lat:bounds = "lat_bnds" ;

double lat_bnds(lat, bnds) ;

double time(time) ;

time:standard_name = "time" ;

time:long_name = "time" ;

time:units = "days since 2030-1-1" ;

time:axis = "T" ;

time:calendar = "360_day" ;

time:bounds = "time_bnds" ;

double time_bnds(time, bnds) ;

float hfls(time, lat, lon) ;

hfls:standard_name = "surface_upward_latent_heat_flux" ;

hfls:long_name = "Surface Latent Heat Flux" ;

hfls:units = "W m-2" ;

hfls:cell_methods = "time: mean (interval: 20 minutes)" ;

hfls:_FillValue = 1.e+20f ;

hfls:missing_value = 1.e+20f ;

hfls:original_name = "LATENT" ;

hfls:history = " At 17:54:19 on 06/07/2004: CMOR altered the data in the following ways: replaced missing value flag (1.00000E+28) with standard missing value (1.00000E+20); multiplied by -1.00000E+00 to yield output units;" ;

// global attributes:

:title = "GICC model output prepared for IPCC Fourth Assessment 2xCO2 equilibrium experiment" ;

:institution = "GICC (Generic International Climate Center, Geneva, Switzerland)" ;

:source = "GICCM1 (2002): atmosphere: GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5" ;

:contact = "Rusty Koder (koder@middle_earth.net)" ;

:project_id = "IPCC Fourth Assessment" ;

:table_id = "Table A1 (7 April 2004)" ;

:experiment_id = "2xCO2 equilibrium experiment" ;

:realization = 1 ;

:Conventions = "CF-1.0" ;

:history = "Output from archive/giccm_03_std_2xCO2_2256. At 17:54:19 on 06/07/2004, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements" ;

:references = "Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591). Also see http://www.GICC.su/giccm/doc/index.html 2XCO2 simulation described in Dorkey et al. (Clim. Dyn., 2003, 323-357.)" ;

:comment = "Equilibrium reached after 30-year spin-up after which data were output starting with nominal date of January 2030" ;

data:

lon = 0, 90, 180, 270 ;

lon_bnds =

-45, 45,

45, 135,

135, 225,

225, 315 ;

lat = 10, 20, 30 ;

lat_bnds =

5, 15,

15, 25,

25, 35 ;

time = 15, 45 ;

time_bnds =

0, 30,

30, 60 ;

hfls =

19, 15, 11, 7,

3, -1, -5, -9,

-13, -17, -21, -25,

18, 14, 10, 6,

2, -2, -6, -10,

-14, -18, -22, -26 ;

}

Example 2: Air temperature

(a function of longitude, latitude, pressure, month)

netcdf ta_A1 {

dimensions:

lon = 4 ;

lat = 3 ;

plev = 5 ;

time = UNLIMITED ; // (2 currently)

bnds = 2 ;

variables:

double lon(lon) ;

lon:standard_name = "longitude" ;

lon:long_name = "longitude" ;

lon:units = "degrees_east" ;

lon:axis = "X" ;

lon:bounds = "lon_bnds" ;

double lon_bnds(lon, bnds) ;

double lat(lat) ;

lat:standard_name = "latitude" ;

lat:long_name = "latitude" ;

lat:units = "degrees_north" ;

lat:axis = "Y" ;

lat:bounds = "lat_bnds" ;

double lat_bnds(lat, bnds) ;

double plev(plev) ;

plev:standard_name = "air_pressure" ;

plev:long_name = "pressure" ;

plev:units = "Pa" ;

plev:axis = "Z" ;

plev:positive = "down" ;

double time(time) ;

time:standard_name = "time" ;

time:long_name = "time" ;

time:units = "days since 2030-1-1" ;

time:axis = "T" ;

time:calendar = "360_day" ;

time:bounds = "time_bnds" ;

double time_bnds(time, bnds) ;

float ta(time, plev, lat, lon) ;

ta:standard_name = "air_temperature" ;

ta:long_name = "Temperature" ;

ta:units = "K" ;

ta:cell_methods = "time: mean (interval: 20 minutes)" ;

ta:_FillValue = 1.e+20f ;

ta:missing_value = 1.e+20f ;

ta:original_name = "T" ;

ta:history = " At 17:54:19 on 06/07/2004: CMOR altered the data in the following ways: replaced missing value flag (1.00000E+28) with standard missing value (1.00000E+20);" ;

// global attributes:

:title = "GICC model output prepared for IPCC Fourth Assessment 2xCO2 equilibrium experiment" ;

:institution = "GICC (Generic International Climate Center, Geneva, Switzerland)" ;

:source = "GICCM1 (2002): atmosphere: GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5" ;

:contact = "Rusty Koder (koder@middle_earth.net)" ;

:project_id = "IPCC Fourth Assessment" ;

:table_id = "Table A1 (7 April 2004)" ;

:experiment_id = "2xCO2 equilibrium experiment" ;

:realization = 1 ;

:Conventions = "CF-1.0" ;

:history = "Output from archive/giccm_03_std_2xCO2_2256. At 17:54:19 on 06/07/2004, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements" ;

:references = "Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591). Also see http://www.GICC.su/giccm/doc/index.html 2XCO2 simulation described in Dorkey et al. (Clim. Dyn., 2003, 323-357.)" ;

:comment = "Equilibrium reached after 30-year spin-up after which data were output starting with nominal date of January 2030" ;

data:

lon = 0, 90, 180, 270 ;

lon_bnds =

-45, 45,

45, 135,

135, 225,

225, 315 ;

lat = 10, 20, 30 ;

lat_bnds =

5, 15,

15, 25,

25, 35 ;

plev = 10000, 20000, 30000, 40000, 50000 ;

time = 15, 45 ;

time_bnds =

0, 30,

30, 60 ;

ta =

150.5, 152.5, 154.5, 156.5,

158.5, 160.5, 162.5, 164.5,

166.5, 168.5, 170.5, 172.5,

182.5, 184.5, 186.5, 188.5,

190.5, 192.5, 194.5, 196.5,

198.5, 200.5, 202.5, 204.5,

214.5, 216.5, 218.5, 220.5,

222.5, 224.5, 226.5, 228.5,

230.5, 232.5, 234.5, 236.5,

246.5, 248.5, 250.5, 252.5,

254.5, 256.5, 258.5, 260.5,

262.5, 264.5, 266.5, 268.5,

278.5, 280.5, 282.5, 284.5,

286.5, 288.5, 290.5, 292.5,

294.5, 296.5, 298.5, 300.5,

151, 153, 155, 157,

159, 161, 163, 165,

167, 169, 171, 173,

183, 185, 187, 189,

191, 193, 195, 197,

199, 201, 203, 205,

215, 217, 219, 221,

223, 225, 227, 229,

231, 233, 235, 237,

247, 249, 251, 253,

255, 257, 259, 261,

263, 265, 267, 269,

279, 281, 283, 285,

287, 289, 291, 293,

295, 297, 299, 301 ;

}

Example 3: Treatment of a scalar (i.e., singleton) dimension

Moisture in upper 0.1 m of soil column

(a function of longitude, latitude, month)

netcdf mrsos_A1 {

dimensions:

lon = 4 ;

lat = 3 ;

time = UNLIMITED ; // (2 currently)

bnds = 2 ;

variables:

double lon(lon) ;

lon:standard_name = "longitude" ;

lon:long_name = "longitude" ;

lon:units = "degrees_east" ;

lon:axis = "X" ;

lon:bounds = "lon_bnds" ;

double lon_bnds(lon, bnds) ;

double lat(lat) ;

lat:standard_name = "latitude" ;

lat:long_name = "latitude" ;

lat:units = "degrees_north" ;

lat:axis = "Y" ;

lat:bounds = "lat_bnds" ;

double lat_bnds(lat, bnds) ;

double time(time) ;

time:standard_name = "time" ;

time:long_name = "time" ;

time:units = "days since 2030-1-1" ;

time:axis = "T" ;

time:calendar = "360_day" ;

time:bounds = "time_bnds" ;

double time_bnds(time, bnds) ;

double depth ;

depth:standard_name = "depth" ;

depth:long_name = "depth" ;

depth:units = "m" ;

depth:axis = "Z" ;

depth:positive = "down" ;

depth:bounds = "depth_bnds" ;

double depth_bnds(bnds) ;

float mrsos(time, lat, lon) ;

mrsos:standard_name = "moisture_content_of_soil_layer" ;

mrsos:long_name = "Moisture in Upper 0.1 m of Soil Column" ;

mrsos:units = "kg m-2" ;

mrsos:cell_methods = "time: mean (interval: 20 minutes)" ;

mrsos:coordinates = "depth" ;

mrsos:_FillValue = 1.e+20f ;

mrsos:missing_value = 1.e+20f ;

mrsos:original_name = "SOIL_WET" ;

mrsos:comment = "includes subsurface frozen water but not surface snow and ice" ;

mrsos:history = " At 17:54:19 on 06/07/2004: CMOR altered the data in the following ways: replaced missing value flag (1.00000E+28) with standard missing value (1.00000E+20);" ;

// global attributes:

:title = "GICC model output prepared for IPCC Fourth Assessment 2xCO2 equilibrium experiment" ;

:institution = "GICC (Generic International Climate Center, Geneva, Switzerland)" ;

:source = "GICCM1 (2002): atmosphere: GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5" ;

:contact = "Rusty Koder (koder@middle_earth.net)" ;

:project_id = "IPCC Fourth Assessment" ;

:table_id = "Table A1 (7 April 2004)" ;

:experiment_id = "2xCO2 equilibrium experiment" ;

:realization = 1 ;

:Conventions = "CF-1.0" ;

:history = "Output from archive/giccm_03_std_2xCO2_2256. At 17:54:19 on 06/07/2004, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements" ;

:references = "Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591). Also see http://www.GICC.su/giccm/doc/index.html 2XCO2 simulation described in Dorkey et al. (Clim. Dyn., 2003, 323-357.)" ;

:comment = "Equilibrium reached after 30-year spin-up after which data were output starting with nominal date of January 2030" ;

data:

lon = 0, 90, 180, 270 ;

lon_bnds =

-45, 45,

45, 135,

135, 225,

225, 315 ;

lat = 10, 20, 30 ;

lat_bnds =

5, 15,

15, 25,

25, 35 ;

time = 15, 45 ;

time_bnds =

0, 30,

30, 60 ;

depth = 0.05 ;

depth_bnds = 0, 0.1 ;

mrsos =

10, 50, 90, 130,

170, 210, 250, 290,

330, 370, 410, 450,

20, 60, 100, 140,

180, 220, 260, 300,

340, 380, 420, 460 ;

}

Example 4: Treatment of a ocean basin labels

Northward ocean heat transport

(a function of latitude, ocean basin, month)

netcdf hfogo_O1 {

dimensions:

lat = 3 ;

region = 4 ;

time = UNLIMITED ; // (2 currently)

bnds = 2 ;

strlen = 14 ;

variables:

double lat(lat) ;

lat:standard_name = "latitude" ;

lat:long_name = "latitude" ;

lat:units = "degrees_north" ;

lat:axis = "Y" ;

lat:bounds = "lat_bnds" ;

double lat_bnds(lat, bnds) ;

char geo_region(region, strlen) ;

geo_region:standard_name = "region" ;

geo_region:long_name = "Ocean Basin" ;

double time(time) ;

time:standard_name = "time" ;

time:long_name = "time" ;

time:units = "days since 2030-1-1" ;

time:axis = "T" ;

time:calendar = "360_day" ;

time:bounds = "time_bnds" ;

double time_bnds(time, bnds) ;

float hfogo(time, region, lat) ;

hfogo:standard_name = "northward_ocean_heat_transport" ;

hfogo:long_name = "Northward Ocean Heat Transport" ;

hfogo:units = "W" ;

hfogo:cell_methods = "time: mean (interval: 20 minutes) longitude: sum" ;

hfogo:coordinates = "geo_region" ;

hfogo:_FillValue = 1.e+20f ;

hfogo:missing_value = 1.e+20f ;

hfogo:original_name = "OFLUX" ;

hfogo:history = " At 18:06:56 on 06/07/2004: CMOR altered the data in the following ways: replaced missing value flag (1.00000E+28) with standard missing value (1.00000E+20);" ;

// global attributes:

:title = "GICC model output prepared for IPCC Fourth Assessment 2xCO2 equilibrium experiment" ;

:institution = "GICC (Generic International Climate Center, Geneva, Switzerland)" ;

:source = "GICCM1 (2002): atmosphere: GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5" ;

:contact = "Rusty Koder (koder@middle_earth.net)" ;

:project_id = "IPCC Fourth Assessment" ;

:table_id = "Table O1 (4 June 2004)" ;

:experiment_id = "2xCO2 equilibrium experiment" ;

:realization = 1 ;

:Conventions = "CF-1.0" ;

:history = "Output from archive/giccm_03_std_2xCO2_2256. At 18:06:56 on 06/07/2004, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements" ;

:references = "Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591). Also see http://www.GICC.su/giccm/doc/index.html 2XCO2 simulation described in Dorkey et al. (Clim. Dyn., 2003, 323-357.)" ;

:comment = "Equilibrium reached after 30-year spin-up after which data were output starting with nominal date of January 2030" ;

data:

lat = 10, 20, 30 ;

lat_bnds =

5, 15,

15, 25,

25, 35 ;

geo_region =

"atlantic_ocean",

"indian_ocean ",

"pacific_ocean ",

"global_ocean " ;

time = 15, 45 ;

time_bnds =

0, 30,

30, 60 ;

hfogo =

-1.9e+15, -1.5e+15, -1.1e+15,

-3e+14, 1e+14, 5e+14,

1.3e+15, 1.7e+15, 2.1e+15,

2.9e+15, 3.3e+15, 3.7e+15,

-1.8e+15, -1.4e+15, -1e+15,

-2e+14, 2e+14, 6e+14,

1.4e+15, 1.8e+15, 2.2e+15,

3e+15, 3.4e+15, 3.8e+15 ;

}

Example 5: Treatment of model level data

Cloud fraction

(a function of longitude, latitude, model level, month)

netcdf cl_A1 {

dimensions:

lon = 4 ;

lat = 3 ;

lev = 5 ;

time = UNLIMITED ; // (2 currently)

bnds = 2 ;

variables:

double lon(lon) ;

lon:standard_name = "longitude" ;

lon:long_name = "longitude" ;

lon:units = "degrees_east" ;

lon:axis = "X" ;

lon:bounds = "lon_bnds" ;

double lon_bnds(lon, bnds) ;

double lat(lat) ;

lat:standard_name = "latitude" ;

lat:long_name = "latitude" ;

lat:units = "degrees_north" ;

lat:axis = "Y" ;

lat:bounds = "lat_bnds" ;

double lat_bnds(lat, bnds) ;

double lev(lev) ;

lev:standard_name = "atmosphere_hybrid_sigma_pressure_coordinate" ;

lev:long_name = "hybrid sigma pressure coordinate" ;

lev:units = "1" ;

lev:axis = "Z" ;

lev:positive = "down" ;

lev:bounds = "lev_bnds" ;

lev:formula = "p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)" ;

lev:formula_terms = "p0: p0 a: a b: b ps: ps" ;

double lev_bnds(lev, bnds) ;

lev_bnds:standard_name = "atmosphere_hybrid_sigma_pressure_coordinate" ;

lev_bnds:formula = "p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)" ;

lev_bnds:formula_terms = "p0: p0 a: a_bnds b: b_bnds ps: ps" ;

double time(time) ;

time:standard_name = "time" ;

time:long_name = "time" ;

time:units = "days since 2030-1-1" ;

time:axis = "T" ;

time:calendar = "360_day" ;

time:bounds = "time_bnds" ;

double time_bnds(time, bnds) ;

double a_bnds(lev, bnds) ;

a_bnds:long_name = "hybrid sigma coordinate A coefficient for layer bounds" ;

double b_bnds(lev, bnds) ;

b_bnds:long_name = "hybrid sigma coordinate B coefficient for layer bounds" ;

float p0 ;

p0:long_name = "reference pressure for hybrid sigma coordinate" ;

p0:units = "Pa" ;

double a(lev) ;

a:long_name = "hybrid sigma coordinate A coefficient for layer" ;

double b(lev) ;

b:long_name = "hybrid sigma coordinate B coefficient for layer" ;

float ps(time, lat, lon) ;

ps:long_name = "Surface Pressure" ;

ps:units = "Pa" ;

float cl(time, lev, lat, lon) ;

cl:standard_name = "cloud_area_fraction" ;

cl:long_name = "Total Cloud Fraction" ;

cl:units = "%" ;

cl:cell_methods = "time: mean (interval: 20 minutes)" ;

cl:_FillValue = 1.e+20f ;

cl:missing_value = 1.e+20f ;

cl:original_name = "CLOUD" ;

cl:history = " At 17:54:19 on 06/07/2004: CMOR altered the data in the following ways: replaced missing value flag (1.00000E+28) with standard missing value (1.00000E+20);" ;

// global attributes:

:title = "GICC model output prepared for IPCC Fourth Assessment 2xCO2 equilibrium experiment" ;

:institution = "GICC (Generic International Climate Center, Geneva, Switzerland)" ;

:source = "GICCM1 (2002): atmosphere: GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5" ;

:contact = "Rusty Koder (koder@middle_earth.net)" ;

:project_id = "IPCC Fourth Assessment" ;

:table_id = "Table A1 (7 April 2004)" ;

:experiment_id = "2xCO2 equilibrium experiment" ;

:realization = 1 ;

:Conventions = "CF-1.0" ;

:history = "Output from archive/giccm_03_std_2xCO2_2256. At 17:54:19 on 06/07/2004, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements" ;

:references = "Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591). Also see http://www.GICC.su/giccm/doc/index.html 2XCO2 simulation described in Dorkey et al. (Clim. Dyn., 2003, 323-357.)" ;

:comment = "Equilibrium reached after 30-year spin-up after which data were output starting with nominal date of January 2030" ;

data:

lon = 0, 90, 180, 270 ;

lon_bnds =

-45, 45,

45, 135,

135, 225,

225, 315 ;

lat = 10, 20, 30 ;

lat_bnds =

5, 15,

15, 25,

25, 35 ;

lev = 0.100000001490116, 0.300000004470348, 0.500000014901161,

0.700000002980232, 0.900000013411045 ;

lev_bnds =

0, 0.200000006705523,

0.200000006705523, 0.400000005960464,

0.400000005960464, 0.599999994039536,

0.599999994039536, 0.799999982118607,

0.799999982118607, 1 ;

time = 15, 45 ;

time_bnds =

0, 30,

30, 60 ;

a_bnds =

0, 0.150000005960464,

0.150000005960464, 0.25,

0.25, 0.25,

0.25, 0.150000005960464,

0.150000005960464, 0 ;

b_bnds =

0, 0.0500000007450581,

0.0500000007450581, 0.150000005960464,

0.150000005960464, 0.349999994039536,

0.349999994039536, 0.649999976158142,

0.649999976158142, 1 ;

p0 = 100000 ;

a = 0.100000001490116, 0.200000002980232, 0.300000011920929,

0.200000002980232, 0.100000001490116 ;

b = 0, 0.100000001490116, 0.200000002980232, 0.5, 0.800000011920929 ;

ps =

97100, 97500, 97900, 98300,

98700, 99100, 99500, 99900,

100300, 100700, 101100, 101500,

97200, 97600, 98000, 98400,

98800, 99200, 99600, 100000,

100400, 100800, 101200, 101600 ;

cl =

50.1, 50.5, 50.9, 51.3,

51.7, 52.1, 52.5, 52.9,

53.3, 53.7, 54.1, 54.5,

56.5, 56.9, 57.3, 57.7,

58.1, 58.5, 58.9, 59.3,

59.7, 60.1, 60.5, 60.9,

62.9, 63.3, 63.7, 64.1,

64.5, 64.9, 65.3, 65.7,

66.1, 66.5, 66.9, 67.3,

69.3, 69.7, 70.1, 70.5,

70.9, 71.3, 71.7, 72.1,

72.5, 72.9, 73.3, 73.7,

75.7, 76.1, 76.5, 76.9,

77.3, 77.7, 78.1, 78.5,

78.9, 79.3, 79.7, 80.1,

50.2, 50.6, 51, 51.4,

51.8, 52.2, 52.6, 53,

53.4, 53.8, 54.2, 54.6,

56.6, 57, 57.4, 57.8,

58.2, 58.6, 59, 59.4,

59.8, 60.2, 60.6, 61,

63, 63.4, 63.8, 64.2,

64.6, 65, 65.4, 65.8,

66.2, 66.6, 67, 67.4,

69.4, 69.8, 70.2, 70.6,

71, 71.4, 71.8, 72.2,

72.6, 73, 73.4, 73.8,

75.8, 76.2, 76.6, 77,

77.4, 77.8, 78.2, 78.6,

79, 79.4, 79.8, 80.2 ;

}

[1] See http://www-pcmdi.llnl.gov/software-portal/cmor

[2] See http://www-pcmdi.llnl.gov/software/cmor/cmor_users_guide.pdf

[3] See http://esg.llnl.gov/portal

[4] Seehttp://my.unidata.ucar.edu/content/software/netcdf

[5] See http://www.cgd.ucar.edu/cms/eaton/cf-metadata

[6] See http://www-pcmdi.llnl.gov/ipcc/standard_output.html

[7] See http://www-pcmdi.llnl.gov/ipcc/standard_output.html

[8] See http://www-pcmdi.llnl.gov/ipcc/standard_output.html

[9] See http://www-pcmdi.llnl.gov/ipcc/standard_output.html

[10] See http://www-pcmdi.llnl.gov/ipcc/standard_output.html

[11] See http://www-pcmdi.llnl.gov/ipcc/standard_output.html

[12] As an example of "missing data", consider a globally gridded dataset of ocean surface salinity. The data representing land points on this data set would be missing. Likewise, atmospheric data on portions of pressure surfaces that are underground are usually considered missing.

[13] See http://www-pcmdi.llnl.gov/ipcc/standard_output.html

[14] See http://www-pcmdi.llnl.gov/ipcc/standard_output.html

[15] See http://my.unidata.ucar.edu/content/software/udunits/

[16] See http://www-pcmdi.llnl.gov/ipcc/standard_output.html

[17] http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#scalar_coords

[18] http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#region

[19] See http://www-pcmdi.llnl.gov/ipcc/standard_output.html

[20] http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vrt_app

[21] http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#bnds

[22] http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vdim

[23] http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vrt_app

[24] http://www.cgd.ucar.edu/cms/eaton/cf-metadata/region.html

[25] http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#region

[26] http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#ctype

[27] http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#cal

[28] http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vnum

[29] http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vrt_app

[30] See http://www-pcmdi.llnl.gov/ipcc/standard_output.html