// --------------------------------------------------------------------------- // This software is in the public domain, furnished "as is", without technical // support, and with no warranty, express or implied, as to its usefulness for // any purpose. // // nrcast.cdl nrcast Model // cdl for user-defined grid // // Author: Jordan Gerth (CIMSS/SSEC) // --------------------------------------------------------------------------- // // A few notes about this cdl file: // // - For each physical parameter represented here, there is two pieces of // metadata meant to describe which levels it is available on. The // attribute `levels' is meant to be a human readable format that someone // doing a ncdump can see. The variable `xxxLevels' is the data that // is parsed by the accessor to determine which 2d slab corresponds to // which level. // // - The _n3D attribute is how many 2d slabs should be read in to get a // three-dimensional description of this variable. This will be used // later to optimize access for cross sections and soundings. // // - The inventory variable is 2d based on record (valid time) and // level. There is a separate inventory variable for each // meteorological variable. // // - The forecast times are stored in the variable valtimeMINUSreftime, // which is dimensioned n_valtimes in size. n_valtimes should // correspond to the number of records in a completely full file. // netcdf nrcast { dimensions: record = UNLIMITED; n_valtimes = 19; data_variables = 2; // # of field variables charsPerLevel = 11; namelen = 132; x = 361; // x dimension y = 361; // y dimension // arbitrary counters for number of levels levels_2 = 2; variables: // precipitable water float pw(record, levels_2, y, x); pw:long_name = "precipitable water"; pw:units = "kg/m**2"; pw:valid_range = -300.f, 300.f; pw:_FillValue = -99999.f; pw:_n3D = 0; pw:levels = "SIG 90 70, 70 30"; char pwLevels(levels_2, charsPerLevel); char pwInventory(n_valtimes, levels_2); // equivalent potential temperature float epot(record, levels_2, y, x); epot:long_name = "equivalent potential temperature"; epot:units = "K"; epot:valid_range = 100.f, 400.f; epot:_FillValue = -99999.f; epot:_n3D = 0; epot:levels = "MB 780, 500"; char epotLevels(levels_2, charsPerLevel); char epotInventory(n_valtimes, levels_2); // forecast times int valtimeMINUSreftime(n_valtimes); valtimeMINUSreftime:units = "seconds"; // time the data is valid at double valtime(record); valtime:long_name = "valid time"; valtime:units = "seconds since (1970-1-1 00:00:00.0)"; // reference time of the model double reftime(record); reftime:long_name = "reference time"; reftime:units = "seconds since (1970-1-1 00:00:00.0)"; // nice name for originating center char origin(namelen); // nice name for model char model(namelen); //---------------------------------------------------------------------- // navigation information //---------------------------------------------------------------------- float staticTopo(y, x) ; staticTopo:units = "meters"; staticTopo:long_name = "Topography"; staticTopo:_FillValue = -99999.f; float staticCoriolis(y, x) ; staticCoriolis:units = "/second"; staticCoriolis:long_name = "Coriolis parameter"; staticCoriolis:_FillValue = -99999.f; float staticSpacing(y, x) ; staticSpacing:units = "meters"; staticSpacing:long_name = "Grid spacing"; staticSpacing:_FillValue = -99999.f; // global attributes: :cdlDate = "20090408"; :depictorName = "---------------------------------------------------------------------------"; :projIndex = 0 ; :projName = "------------------------------------------"; :centralLat = 0.f ; :centralLon = 0.f ; :rotation = 0.f ; :xMin = 0.f ; :xMax = 0.f ; :yMax = 0.f ; :yMin = 0.f ; :lat00 = 0.f ; :lon00 = 0.f ; :latNxNy = 0.f ; :lonNxNy = 0.f ; :dxKm = 0.f ; :dyKm = 0.f ; :latDxDy = 0.f ; :lonDxDy = 0.f ; data: origin = "NCEP"; model = "nrcast"; // Forecast times are every half hour out to 9 hours valtimeMINUSreftime = 0, 1800, 3600, 5400, 7200, 9000, 10800, 12600, 14400, 16200, 18000, 19800, 21600, 23400, 25200, 27000, 28800, 30600, 32400; // level meta data pwLevels = "SIG 90 70 ", "SIG 70 30 "; epotLevels = "MB 780 ", "MB 500 "; }