// --------------------------------------------------------------------------- // 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. // // cras45ak.cdl cras45-ak Model // cdl for 216 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 cras45-ak { dimensions: record = UNLIMITED; n_valtimes = 29; data_variables = 14; // # of field variables charsPerLevel = 10; namelen = 132; x = 139; // x dimension y = 107; // y dimension // arbitrary counters for number of levels levels_1 = 1; levels_2 = 2; levels_20 = 20; levels_21 = 21; levels_23 = 23; variables: // Geopotential height float gh(record, levels_20, y, x); gh:long_name = "Geopotential height"; gh:units = "geopotential meters"; gh:valid_range = 0.f, 10000.f; gh:_FillValue = -99999.f; gh:_n3D = 19; gh:levels = "MB 1000-100 by 50"; char ghLevels(levels_20, charsPerLevel); char ghInventory(n_valtimes, levels_20); // Relative Humidity float rh(record, levels_21, y, x); rh:long_name = "Relative Humidity"; rh:units = "percent"; rh:valid_range = 0.f, 100.f; rh:_FillValue = -99999.f; rh:_n3D = 19; rh:levels = "MB 1000-100 by 50 BLD"; char rhLevels(levels_21, charsPerLevel); char rhInventory(n_valtimes, levels_21); // Dewpoint Temperature float dpt(record, levels_1, y, x); dpt:long_name = "Dewpoint Temperature"; dpt:units = "degrees K"; dpt:valid_range = 180.f, 330.f; dpt:_FillValue = -99999.f; dpt:_n3D = 1; dpt:levels = "FHAG 2"; char dptLevels(levels_1, charsPerLevel); char dptInventory(n_valtimes, levels_1); // temperature float t(record, levels_23, y, x); t:long_name = "Temperature"; t:units = "degrees K"; t:valid_range = 0.f, 400.f; t:_FillValue = -99999.f; t:_n3D = 19; t:levels = "MB 1000-100 by 50 FHAG 2 SFC CTL"; char tLevels(levels_23, charsPerLevel); char tInventory(n_valtimes, levels_23); // u wind component float uw(record, levels_21, y, x); uw:long_name = "u wind component"; uw:units = "meters/second"; uw:valid_range = -300.f, 300.f; uw:_FillValue = -99999.f; uw:_n3D = 19; uw:levels = "MB 1000-100 by 50 FHAG 10"; char uwLevels(levels_21, charsPerLevel); char uwInventory(n_valtimes, levels_21); // v wind component float vw(record, levels_21, y, x); vw:long_name = "v wind component"; vw:units = "meters/second"; vw:valid_range = -300.f, 300.f; vw:_FillValue = -99999.f; vw:_n3D = 19; vw:levels = "MB 1000-100 by 50 FHAG 10"; char vwLevels(levels_21, charsPerLevel); char vwInventory(n_valtimes, levels_21); // Mean Sea Level Pressure float pmsl(record, levels_1, y, x); pmsl:long_name = "pressure at mean sea level"; pmsl:units = "Pascals"; pmsl:valid_range = 80000.f, 110000.f; pmsl:_FillValue = -99999.f; pmsl:_n3D = 0; pmsl:levels = "MSL"; char pmslLevels(levels_1, charsPerLevel); char pmslInventory(n_valtimes, levels_1); // atmospheric pressure float p(record, levels_2, y, x); p:long_name = "pressure"; p:units = "pascals"; p:valid_range = 0.f, 150000.f; p:_FillValue = -99999.f; p:_n3D = 0; p:levels = "SFC CTL"; char pLevels(levels_2, charsPerLevel); char pInventory(n_valtimes, levels_2); // precipitable water float pw(record, levels_1, 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 = "EA"; char pwLevels(levels_1, charsPerLevel); char pwInventory(n_valtimes, levels_1); // pressure vertical velocity float pvv(record, levels_20, y, x); pvv:long_name = "Pressure vertical velocity"; pvv:units = "Pa/s"; pvv:valid_range = -2.5f, 2.5f; pvv:_FillValue = -99999.f; pvv:_n3D = 19; pvv:levels = "MB 1000-100 by 50"; char pvvLevels(levels_20, charsPerLevel); char pvvInventory(n_valtimes, levels_20); // Brightness Temperature float brtmp(record, levels_2, y, x); brtmp:long_name = "Brightness Temperature"; brtmp:units = "K"; brtmp:valid_range = -255.f, 255.f; brtmp:_FillValue = -99999.f; brtmp:_n3D = 2; brtmp:levels = "EA CTL"; char brtmpLevels(levels_2, charsPerLevel); char brtmpInventory(n_valtimes, levels_2); // precipitation rate float pr(record, levels_1, y, x); pr:long_name = "precipitation rate"; pr:units = "mm/s"; pr:valid_range = 0.f, 0.1f; pr:_FillValue = -99999.f; pr:_n3D = 0; pr:levels = "SFC"; char prLevels(levels_1, charsPerLevel); char prInventory(n_valtimes, levels_1); // Total Precipitation float tp(record, levels_1, y, x); tp:long_name = "total precipitation"; tp:units = "mm"; tp:valid_range = 0.f, 1000.f; tp:_FillValue = -99999.f; tp:_n3D = 0; tp:levels = "SFC"; char tpLevels(levels_1, charsPerLevel); char tpInventory(n_valtimes, levels_1); // Total Cloud Cover float tcc(record, levels_1, y, x); tcc:long_name = "Total Cloud Cover"; tcc:units = "%"; tcc:valid_range = 0.f, 100.f; tcc:_FillValue = -99999.f; tcc:_n3D = 0; tcc:levels = "EA"; char tccLevels(levels_1, charsPerLevel); char tccInventory(n_valtimes, levels_1); // 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 = "20100701"; :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 = "cras45-AK"; // Forecast times(hrs) are: 0(Analysis),3,6,9,12,15,18,21,24,27,30,33,36, // 39,42,45,48,51,54,57,60,63,66,69,72,78,81,84; valtimeMINUSreftime = 0, 10800, 21600, 32400, 43200, 54000, 64800, 75600, 86400, 97200, 108000, 118800, 129600, 140400, 151200, 162000, 172800, 183600, 194400, 205200, 216000, 226800, 237600, 248400, 259200, 270000, 280800, 291600, 302400; // level meta data ghLevels = "MB 1000 ", "MB 950 ", "MB 925 ", "MB 900 ", "MB 850 ", "MB 800 ", "MB 750 ", "MB 700 ", "MB 650 ", "MB 600 ", "MB 550 ", "MB 500 ", "MB 450 ", "MB 400 ", "MB 350 ", "MB 300 ", "MB 250 ", "MB 200 ", "MB 150 ", "MB 100 "; rhLevels = "MB 1000 ", "MB 950 ", "MB 925 ", "MB 900 ", "MB 850 ", "MB 800 ", "MB 750 ", "MB 700 ", "MB 650 ", "MB 600 ", "MB 550 ", "MB 500 ", "MB 450 ", "MB 400 ", "MB 350 ", "MB 300 ", "MB 250 ", "MB 200 ", "MB 150 ", "MB 100 ", "BLD "; dptLevels = "FHAG 2 "; tLevels = "MB 1000 ", "MB 950 ", "MB 925 ", "MB 900 ", "MB 850 ", "MB 800 ", "MB 750 ", "MB 700 ", "MB 650 ", "MB 600 ", "MB 550 ", "MB 500 ", "MB 450 ", "MB 400 ", "MB 350 ", "MB 300 ", "MB 250 ", "MB 200 ", "MB 150 ", "MB 100 ", "FHAG 2 ", "SFC ", "CTL "; uwLevels = "MB 1000 ", "MB 950 ", "MB 925 ", "MB 900 ", "MB 850 ", "MB 800 ", "MB 750 ", "MB 700 ", "MB 650 ", "MB 600 ", "MB 550 ", "MB 500 ", "MB 450 ", "MB 400 ", "MB 350 ", "MB 300 ", "MB 250 ", "MB 200 ", "MB 150 ", "MB 100 ", "FHAG 10 "; vwLevels = "MB 1000 ", "MB 950 ", "MB 925 ", "MB 900 ", "MB 850 ", "MB 800 ", "MB 750 ", "MB 700 ", "MB 650 ", "MB 600 ", "MB 550 ", "MB 500 ", "MB 450 ", "MB 400 ", "MB 350 ", "MB 300 ", "MB 250 ", "MB 200 ", "MB 150 ", "MB 100 ", "FHAG 10 "; pmslLevels = "MSL "; pLevels = "SFC ", "CTL "; pwLevels = "EA "; pvvLevels = "MB 1000 ", "MB 950 ", "MB 925 ", "MB 900 ", "MB 850 ", "MB 800 ", "MB 750 ", "MB 700 ", "MB 650 ", "MB 600 ", "MB 550 ", "MB 500 ", "MB 450 ", "MB 400 ", "MB 350 ", "MB 300 ", "MB 250 ", "MB 200 ", "MB 150 ", "MB 100 "; brtmpLevels = "EA ", "CTL "; prLevels = "SFC "; tpLevels = "SFC "; tccLevels = "EA "; }