// --------------------------------------------------------------------------- // 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. // // convect.cdl convect Model // cdl for NDFD/A197 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 conwest { dimensions: record = UNLIMITED; // n_valtimes = 121; n_valtimes = 36; data_variables = 3; // # of field variables charsPerLevel = 11; namelen = 132; x = 1073; // x dimension y = 689; // y dimension // arbitrary counters for number of levels levels_2 = 2; levels_3 = 3; levels_4 = 4; variables: // temperature anomaly float ta(record, levels_4, y, x); ta:long_name = "temperature anomaly"; ta:units = "K"; ta:valid_range = -100.f, 100.f; ta:_FillValue = -99999.f; ta:_n3D = 0; ta:levels = "CCTL, DCCTL, EA, TROP"; char taLevels(levels_4, charsPerLevel); char taInventory(n_valtimes, levels_4); // thunderstorm coverage float tsc(record, levels_2, y, x); tsc:long_name = "thunderstorm coverage"; tsc:units = "non-dim reserved"; tsc:valid_range = 0.f, 1.f; tsc:_FillValue = -99999.f; tsc:_n3D = 0; tsc:levels = "EA, TROP"; char tscLevels(levels_2, charsPerLevel); char tscInventory(n_valtimes, levels_2); // convective cloud efficiency float cuefi(record, levels_2, y, x); cuefi:long_name = "convective cloud efficiency"; cuefi:units = "non-dim"; cuefi:valid_range = 0.f, 4.f; cuefi:_FillValue = -99999.f; cuefi:_n3D = 0; cuefi:levels = "DCCTL, EA"; char cuefiLevels(levels_2, charsPerLevel); char cuefiInventory(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 = "20100420"; :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 = "convect"; // Forecast times are every minute from zero to two hours: // valtimeMINUSreftime = 0,60,120,180,240,300,360,420,480,540,600,660,720, // 780,840,900,960,1020,1080,1140,1200,1260,1320,1380,1440,1500,1560,1620, // 1680,1740,1800,1860,1920,1980,2040,2100,2160,2220,2280,2340,2400,2460, // 2520,2580,2640,2700,2760,2820,2880,2940,3000,3060,3120,3180,3240,3300, // 3360,3420,3480,3540,3600,3660,3720,3780,3840,3900,3960,4020,4080,4140, // 4200,4260,4320,4380,4440,4500,4560,4620,4680,4740,4800,4860,4920,4980, // 5040,5100,5160,5220,5280,5340,5400,5460,5520,5580,5640,5700,5760,5820, // 5880,5940,6000,6060,6120,6180,6240,6300,6360,6420,6480,6540,6600,6660, // 6720,6780,6840,6900,6960,7020,7080,7140,7200; // Forecast times are based on the schedule of the GOES WEST Imager: // Decreasing the valtimeMINUSreftime values keeps the netCDF small. valtimeMINUSreftime = 0,600,660,900,960,1080,1260,1320,1380,1800,2400, 2460,2700,2760,2880,3060,3120,3180,3600,4200,4260,4500,4560,4680,4860, 4920,4980,5400,6000,6060,6300,6360,6480,6660,6720,6780; // level meta data taLevels = "CCTL ", "DCCTL ", "EA ", "TROP "; tscLevels = "EA ", "TROP "; cuefiLevels = "DCCTL ", "EA "; }