Ncdump of CCSM data

VisIt's NETCDF reader plugin can understand some CCSM conventions and can serve up CCSM data either on a flat rectilinear grid or on a 3D unstructured grid.
CCSM2.pngCCSM.png

Structure

The critical elements that a NETCDF file must contain in order for VisIt to recognize it as CCSM are:

  1. time dimension must exist and be unlimited with size > 1
  2. lat or latitude dimension must exist
  3. lon or longitude dimension must exist
  4. time array must exist and be sized using time dimension
  5. lat or latitude array must exist and be sized using lat/latitude dimension
  6. lon or longitude array must exist and be sized using lon/longitude dimension
  7. Any data stored on the mesh must be of size (time, latitude, longitude)
  • Note that when viewing the "global" representation of the data, VisIt does not appear to currently take lat/lon arrays into account. This could present problems for data which are meant to be restricted to small regions of the Earth.

Example

Here is an example output from running ncdump on a dataset that VisIt can read successfully.

netcdf tas_mean_T63 {
dimensions:
        time = UNLIMITED ; // (1188 currently)
        bound = 2 ;
        latitude = 96 ;
        longitude = 193 ;
variables:
        double time(time) ;
                time:bounds = "time_bnds" ;
                time:units = "days since 2000-1-1" ;
                time:calendar = "360_day" ;
                time:axis = "T" ;
        double time_bnds(time, bound) ;
        double latitude(latitude) ;
                latitude:bounds = "bounds_latitude" ;
                latitude:units = "degrees_north" ;
                latitude:axis = "Y" ;
        double bounds_latitude(latitude, bound) ;
        double longitude(longitude) ;
                longitude:bounds = "bounds_longitude" ;
                longitude:axis = "X" ;
                longitude:units = "degrees_east" ;
                longitude:modulo = 360. ;
                longitude:topology = "circular" ;
        double bounds_longitude(longitude, bound) ;
        float tas(time, latitude, longitude) ;
                tas:missing_value = 1.e+20f ;
                tas:name = "variable_54" ;

// global attributes:
                :Conventions = "CF-1.0" ;
}