diff --git a/tigge/tigge_check.c b/tigge/tigge_check.c index 1a1e7afca..e847fad37 100755 --- a/tigge/tigge_check.c +++ b/tigge/tigge_check.c @@ -50,7 +50,7 @@ struct parameter { double max1; double max2; pair pairs[15]; - check_proc checks[4]; + check_proc checks[5]; }; static void point_in_time(grib_handle*,const parameter*,double,double); @@ -65,6 +65,8 @@ static void predefined_level(grib_handle*,const parameter*,double,double); static void predefined_thickness(grib_handle*,const parameter*,double,double); static void given_thickness(grib_handle*,const parameter*,double,double); static void has_bitmap(grib_handle*,const parameter*,double,double); +static void has_soil_level(grib_handle*,const parameter*,double,double); +static void has_soil_layer(grib_handle*,const parameter*,double,double); static void height_level(grib_handle*,const parameter*,double,double); static void pressure_level(grib_handle*,const parameter*,double,double); @@ -465,14 +467,7 @@ static void point_in_time(grib_handle* h,const parameter* p,double min,double ma break; } - if (is_uerra) - { - if(get(h,"indicatorOfUnitOfTimeRange") == 1) /* hourly */ - { - CHECK((eq(h,"forecastTime",1)||eq(h,"forecastTime",2)||eq(h,"forecastTime",4)||eq(h,"forecastTime",5))||(get(h,"forecastTime") % 3) == 0); - } - } - else if (is_lam) { + if (is_lam) { if(get(h,"indicatorOfUnitOfTimeRange") == 10 ) /* three hours */ { /* Three hourly is OK */ @@ -483,7 +478,14 @@ static void point_in_time(grib_handle* h,const parameter* p,double min,double ma CHECK(eq(h,"indicatorOfUnitOfTimeRange",1));/* Hours */ CHECK((get(h,"forecastTime") % 3) == 0); /* Every three hours */ } - } else { + } + else if (is_uerra) { + if(get(h,"indicatorOfUnitOfTimeRange") == 1) /* hourly */ + { + CHECK((eq(h,"forecastTime",1)||eq(h,"forecastTime",2)||eq(h,"forecastTime",4)||eq(h,"forecastTime",5))||(get(h,"forecastTime") % 3) == 0); + } + } + else { if(get(h,"indicatorOfUnitOfTimeRange") == 11) /* six hours */ { /* Six hourly is OK */ @@ -673,14 +675,7 @@ static void statistical_process(grib_handle* h,const parameter* p,double min,dou break; } - if (is_uerra) - { - if(get(h,"indicatorOfUnitOfTimeRange") == 1) /* hourly */ - { - CHECK((eq(h,"forecastTime",1)||eq(h,"forecastTime",2)||eq(h,"forecastTime",4)||eq(h,"forecastTime",5))||(get(h,"forecastTime") % 3) == 0); - } - } - else if (is_lam) { + if (is_lam) { if(get(h,"indicatorOfUnitOfTimeRange") == 10 ) /* three hours */ { /* Three hourly is OK */ @@ -691,7 +686,17 @@ static void statistical_process(grib_handle* h,const parameter* p,double min,dou CHECK(eq(h,"indicatorOfUnitOfTimeRange",1));/* Hours */ CHECK((get(h,"forecastTime") % 3) == 0); /* Every three hours */ } - } else { + } + else if (is_uerra) + { +/* forecastTime for uerra might be all steps decreased by 1 i.e 0,1,2,3,4,5,8,11...29 too many... */ + if(get(h,"indicatorOfUnitOfTimeRange") == 1) + { + CHECK(le(h,"forecastTime",30)); + } + } + else + { if(get(h,"indicatorOfUnitOfTimeRange") == 11) /* six hours */ { /* Six hourly is OK */ @@ -733,6 +738,7 @@ static void statistical_process(grib_handle* h,const parameter* p,double min,dou { CHECK((get(h,"endStep") % 6) == 0); /* Every six hours */ } + if(get(h,"indicatorOfUnitForTimeRange") == 11) { @@ -757,6 +763,16 @@ static void has_bitmap(grib_handle* h,const parameter* p,double min,double max) CHECK(eq(h,"bitMapIndicator",0)); } +static void has_soil_level(grib_handle* h,const parameter* p,double min,double max) +{ + CHECK(get(h,"topLevel") == get(h,"bottomLevel")); +} + +static void has_soil_layer(grib_handle* h,const parameter* p,double min,double max) +{ + CHECK(get(h,"topLevel") == get(h,"bottomLevel") - 1); +} + static void six_hourly(grib_handle* h,const parameter* p,double min,double max) { statistical_process(h,p,min,max); diff --git a/tigge/tigge_check.h b/tigge/tigge_check.h index 70629ee79..be8b0e44f 100644 --- a/tigge/tigge_check.h +++ b/tigge/tigge_check.h @@ -428,34 +428,18 @@ parameter parameters[] = { {&point_in_time, &given_level, &potential_temperature_level}, }, - { - "skin_temperature_sfc", - 180, - 230, - 310, - 355, - { - {"model", GRIB_TYPE_STRING, 0, "glob"}, - {"discipline", GRIB_TYPE_LONG, 0}, - {"parameterCategory", GRIB_TYPE_LONG, 0}, - {"parameterNumber", GRIB_TYPE_LONG, 17}, - {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, - {NULL, }, - }, - {&point_in_time, &predefined_level}, - }, - { "snow_depth_water_equivalent_sfc", - -4e-19, 0, - 10000, + 0, + 100, 15000, { - {"model", GRIB_TYPE_STRING, 0, "glob"}, + {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 1}, {"parameterNumber", GRIB_TYPE_LONG, 60}, + {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, {NULL, }, }, @@ -806,13 +790,12 @@ s2s/ammc: warning: s2s.mx2t6_20151224_26.grib2, field 47 [surface_air_maximum_te */ { "time_integrated_surface_net_solar_radiation_sfc", - -0.1, + -10, 1e+05, 1e+05, 1e+07, { {"model", GRIB_TYPE_STRING, 0, "glob"}, - {"paramId", GRIB_TYPE_LONG, 176}, {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 4}, {"parameterNumber", GRIB_TYPE_LONG, 9}, @@ -825,13 +808,12 @@ s2s/ammc: warning: s2s.mx2t6_20151224_26.grib2, field 47 [surface_air_maximum_te { "time_integrated_surface_net_solar_radiation_downwards_sfc", - -0.1, - 200000, + -10, + 1e+07, 1e+05, 1e+09, { {"model", GRIB_TYPE_STRING, 0, "glob"}, - {"paramId", GRIB_TYPE_LONG, 169}, {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 4}, {"parameterNumber", GRIB_TYPE_LONG, 7}, @@ -917,24 +899,6 @@ s2s/ammc: warning: s2s.mx2t6_20151224_26.grib2, field 47 [surface_air_maximum_te {&point_in_time, &predefined_thickness}, }, - { - "total_column_water_sfc", - 0.01, - 0.3, - 50, - 150, - { - {"model", GRIB_TYPE_STRING, 0, "glob"}, - {"discipline", GRIB_TYPE_LONG, 0}, - {"parameterCategory", GRIB_TYPE_LONG, 1}, - {"parameterNumber", GRIB_TYPE_LONG, 51}, - {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, - {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8}, - {NULL, }, - }, - {&point_in_time, &predefined_thickness}, - }, - /* hourly extreems for cumulated parameters! @@ -1296,12 +1260,13 @@ s2s/egrr-enfo warning: s2s.z_s2s_c_ukmo_20160520000000_glob_prod_pf_1440_003.rt. warning: s2s.z_tigge_c_kwbc_20020817000000_ncep_prod_pf_pl_0000_003_0010_u.grib2, field 3 [u_velocity_pl]: u_velocity_pl maximum value 170.9 is not in [10,170] s2s/ammc: warning: s2s.u_20150913_31.grib2, field 550 [u_velocity_pl]: u_velocity_pl minimum value 0.352796 is not in [-150,-0.001] s2s/ammc: warning: s2s.u_20151101_13.grib2, field 401 [u_velocity_pl]: u_velocity_pl minimum value -195.645 is not in [-180,1] + uerra/edzw-an: warning: /tmp/marm/uerra/cosmo/sample2/grib2/an.200812020800.u.pl.grib2, field 1 [u_velocity_pl]: u_velocity_pl minimum value 1.41138 is not in [-200,1] */ { "u_velocity_pl", -200, + -1, 1, - 10, 200, { {"model", GRIB_TYPE_STRING, 0, "glob"}, @@ -1330,7 +1295,7 @@ warning: s2s.z_tigge_c_kwbc_20020817000000_ncep_prod_pf_pl_0000_003_0010_u.grib2 -200, -2, 2, - 190, + 200, { {"model", GRIB_TYPE_STRING, 0, "glob"}, @@ -1430,13 +1395,14 @@ warning: s2s.z_tigge_c_kwbc_20150817000000_ncep_prod_pf_pl_0000_015_0500_w.grib2 }, /* s2s_devel, ecmf, 20141229, 00UTC, test, enfh, real: s2s.2014122900.test.768.10.pf.19941229.sl.168.grib2, field 21 [surface_pressure_sfc]: surface_pressure_sfc maximum value 102851 is not in [102900,110000] +uerra, eswi-an: an.sp.sfc.grib2, field 1 [surface_pressure_sfc]: surface_pressure_sfc minimum value 66482.1 is not in [48000,55000] */ { "surface_pressure_sfc", 48000, - 55000, - 102500, - 110000, + 80000, + 101500, + 115000, { {"model", GRIB_TYPE_STRING, 0, "glob"}, @@ -1500,37 +1466,13 @@ s2s_devel, ecmf, 20141229, 00UTC, test, enfh, real: s2s.2014122900.test.768.10. {&from_start, &predefined_level}, }, -/*todo limits*/ - { - "surface_runoff_sfc", - -1.5e+6, - 1.5e+6, - -1.5e+6, - 1.5e+6, - { - {"model", GRIB_TYPE_STRING, 0, "glob"}, - {"paramId", GRIB_TYPE_LONG, 174008}, - - {"discipline", GRIB_TYPE_LONG,2}, - {"parameterCategory", GRIB_TYPE_LONG,0}, - {"parameterNumber", GRIB_TYPE_LONG,34}, - - {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1}, - - {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, - {NULL, }, - }, - {&from_start, &predefined_level}, - }, - -/*todo limits*/ { "water_runoff_sfc", - -1.5e+6, - 1.5e+6, - -1.5e+6, - 1.5e+6, + -0.001, + 5, + 0.5, + 15, { {"model", GRIB_TYPE_STRING, 0, "glob"}, @@ -1639,27 +1581,22 @@ s2s_devel, ecmf, 20141229, 00UTC, test, enfh, real: s2s.2014122900.test.768.10. S2S/CAWCR: total_column_water_sfc.glob minimum value 0.00832421 is not in [0.01,1] warning: s2s.z_tigge_c_kwbc_19990817000000_ncep_prod_cf_sl_0024_000_0000_tcw.grib2, field 33 [total_column_water_sfc.glob]: total_column_water_sfc.glob minimum value -0.168614 is not in [0.001,1] warning: s2s.z_tigge_c_kwbc_20090829000000_ncep_prod_pf_sl_0024_003_0000_tcw.grib2, field 11 [total_column_water_sfc.glob]: total_column_water_sfc.glob minimum value -2.00987 is not in [-2,1] - => [-2.00987,1] lfpw/enfo: warning: s2s.lfpw_tcw_0.grib2, field 10 [total_column_water_sfc.glob.s2]: total_column_water_sfc.glob.s2 minimum value 1.01153 is not in [-3,1] + uerra, eswi-an: an.tcw.sfc.grib2, field 1 [total_column_water_sfc]: total_column_water_sfc maximum value 37.9248 is not in [50,150] */ { - "total_column_water_sfc.glob.s2", + "total_column_water_sfc.s2", -3.0, 2, - 50, + 30, 150, { {"model", GRIB_TYPE_STRING, 0, "glob"}, {"class", GRIB_TYPE_STRING, 0, "s2"}, - {"paramId", GRIB_TYPE_LONG, 136}, - {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 1}, {"parameterNumber", GRIB_TYPE_LONG, 51}, - - {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 0}, - {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8}, {NULL, }, @@ -1667,6 +1604,23 @@ warning: s2s.z_tigge_c_kwbc_20090829000000_ncep_prod_pf_sl_0024_003_0000_tcw.gri {&daily_average, &predefined_thickness}, }, + { + "total_column_water_sfc", + -3.0, + 2, + 30, + 150, + { + {"discipline", GRIB_TYPE_LONG, 0}, + {"parameterCategory", GRIB_TYPE_LONG, 1}, + {"parameterNumber", GRIB_TYPE_LONG, 51}, + {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, + {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8}, + {NULL, }, + }, + {&point_in_time, &predefined_thickness}, + }, + /* s2s/rums warning: s2s.z_s2s_c_rhmc_20150819000000_glob_prod_0336_017.sl.grib2, field 4 [surface_air_temperature_sfc.glob]: surface_air_temperature_sfc.glob minimum value 177.17 is not in [180,290] s2s/ammc: warning: s2s.2t_20151224_26.grib2, field 12 [surface_air_temperature_sfc.glob.s2]: surface_air_temperature_sfc.glob.s2 maximum value 353.017 is not in [270,350] @@ -1721,13 +1675,12 @@ s2s/ammc: warning: s2s.2t_20151224_26.grib2, field 12 [surface_air_temperature_s S2S/CAWCR: surface_air_dew_point_temperature_sfc.glob minimum value 32.4337 is not in [175,290] */ { - "surface_air_dew_point_temperature_sfc.glob.s2", + "surface_air_dew_point_temperature_sfc.s2", 30, 290, 270, 350, { - {"model", GRIB_TYPE_STRING, 0, "glob"}, {"class", GRIB_TYPE_STRING, 0, "s2"}, {"paramId", GRIB_TYPE_LONG, 168}, @@ -1749,25 +1702,20 @@ s2s/kwbc/enfh: warning: s2s.z_s2s_c_rhmc_20150819000000_glob_prod_1464_000.sl.gr s2s/rums/enfo warning: s2s.z_s2s_c_rhmc_20150826000000_glob_prod_1392_003.sl.grib2, field 15 [skin_temperature_sfc.glob]: skin_temperature_sfc.glob minimum value 240.467 is not in [180,240] s2s/ammc/enfo warning: warning: s2s.skt_20150920_4.grib2, field 12 [skin_temperature_sfc.glob]: skin_temperature_sfc.glob minimum value 179.087 is not in [180,245] s2s/ammc/enfo warning: warning: s2s.skt_20160410_21.grib2, field 57 [skin_temperature_sfc.glob.s2]: skin_temperature_sfc.glob.s2 minimum value 164.277 is not in [175,245] +uerra/egrr/det/an: skin_temperature_sfc minimum value 266.875 is not in [160,250] */ { - "skin_temperature_sfc.glob.s2", + "skin_temperature_sfc.s2", 160, - 245, + 300, 300, 355, { - {"model", GRIB_TYPE_STRING, 0, "glob"}, {"class", GRIB_TYPE_STRING, 0, "s2"}, - {"paramId", GRIB_TYPE_LONG, 235}, - {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 0}, {"parameterNumber", GRIB_TYPE_LONG, 17}, - - {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 0}, - {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, {NULL, }, }, @@ -1985,7 +1933,7 @@ warning: s2s.z_tigge_c_kwbc_19990817000000_ncep_prod_cf_sl_0024_000_0000_sd.grib */ { "snow_depth_water_equivalent_sfc.glob.s2", - -4e-19, + 0, 0, 100, 15000, @@ -1993,10 +1941,6 @@ warning: s2s.z_tigge_c_kwbc_19990817000000_ncep_prod_cf_sl_0024_000_0000_sd.grib {"model", GRIB_TYPE_STRING, 0, "glob"}, {"class", GRIB_TYPE_STRING, 0, "s2"}, - {"paramId", GRIB_TYPE_LONG, 228141}, - - {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 0}, - {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 1}, {"parameterNumber", GRIB_TYPE_LONG, 60}, @@ -2328,10 +2272,10 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "specific_humidity_ml", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + -0.1, + 0.01, + 0, + 0.1, { {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 1}, @@ -2345,7 +2289,7 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t { "temperature_ml", 150, - 270, + 300, 200, 330, { @@ -2359,12 +2303,17 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, {&point_in_time, &given_level}, /* check model levels?? */ }, + +/* + uerra, eswi-an: an.200812020000+0.ml.grib2, field 3 [u_velocity_ml]: u_velocity_ml minimum value 1.55574 is not in [-200,1] + uerra, egrr-det-fc: u_velocity_ml maximum value 0.625 is not in [1,200] +*/ { "u_velocity_ml", -200, - 1, - 10, - 200, + 5, + 0.1, + 200, { {"paramId", GRIB_TYPE_LONG, 131}, {"discipline", GRIB_TYPE_LONG, 0}, @@ -2378,10 +2327,10 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "v_velocity_ml", - -190, - -4, - 4, - 190, + -200, + -1, + 1, + 200, { {"paramId", GRIB_TYPE_LONG, 132}, {"discipline", GRIB_TYPE_LONG, 0}, @@ -2397,7 +2346,7 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t "cloud_cover_ml", 0, 1e-10, - 100, + 0, 100.00001, { {"discipline", GRIB_TYPE_LONG, 0}, @@ -2412,9 +2361,13 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t /* pressure level */ +/* +uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl.grib2, field 76 [geopotential_height_pl.ur]: geopotential_height_pl.ur minimum value -2938.29 is not in [-1300,300000] +*/ + { "geopotential_height_pl.ur", - -1300, + -5000, 300000, 2000, 350000, @@ -2433,11 +2386,12 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t { "specific_cloud_ice_water_content_pl", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + 0, + 0.001, + 0, + 0.01, { + {"paramId", GRIB_TYPE_LONG, 247}, {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 1}, {"parameterNumber", GRIB_TYPE_LONG, 84}, @@ -2466,10 +2420,10 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "specific_cloud_liquid_water_content_pl", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + 0, + 1e+5, + 0, + 1e+6, { {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 1}, @@ -2482,10 +2436,10 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "specific_cloud_ice_water_content_ml", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + 0, + 0.001, + 0, + 0.01, { {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 1}, @@ -2498,10 +2452,10 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "specific_cloud_liquid_water_content_ml", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + 0, + 1e+5, + 0, + 1e+6, { {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 1}, @@ -2514,10 +2468,10 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "relative_humidity_pl", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + 0, + 20, + 0, + 100.01, { {"paramId", GRIB_TYPE_LONG, 157}, {"discipline", GRIB_TYPE_LONG, 0}, @@ -2566,10 +2520,10 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "specific_cloud_liquid_water_content_hl", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + 0, + 1e+5, + 0, + 1e+6, { {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 1}, @@ -2582,10 +2536,10 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "specific_cloud_ice_water_content_hl", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + 0, + 0.001, + 0, + 0.01, { {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 1}, @@ -2599,9 +2553,9 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t { "relative_humidity_hl", 0, - 10, - 90, - 100.1, + 20, + 1, + 100.01, { {"paramId", GRIB_TYPE_LONG, 157}, {"discipline", GRIB_TYPE_LONG, 0}, @@ -2616,7 +2570,7 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t { "temperature_hl", 150, - 270, + 300, 200, 330, { @@ -2632,7 +2586,7 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "wind_speed_hl", - 0.001, + 0, 10, 10, 150, @@ -2650,9 +2604,9 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t { "wind_direction_hl", 0, - 0.01, + 1, 359, - 360, + 360.1, { {"paramId", GRIB_TYPE_LONG, 3031}, {"discipline", GRIB_TYPE_LONG, 0}, @@ -2667,12 +2621,15 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t /* uerra single level (surface) */ +/* + uerra, eswi-fc: percolation_sfc maximum value 0.971001 is not in [1,30] +*/ { "percolation_sfc", - -1e+10, /* TBD xxx */ - 1e+10, - -1e+10, - 1e+10, + 0, + 1, + 0.8, + 30, { {"paramId", GRIB_TYPE_LONG, 260430}, {"discipline", GRIB_TYPE_LONG, 1}, @@ -2687,7 +2644,7 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t { "2_metre_relative_humidity", 0, - 10, + 20, 90, 100.1, { @@ -2700,12 +2657,16 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, {&point_in_time, &given_level}, }, + +/* + s2s, babj-enfo: surface_runoff maximum value 0.479167 is not in [1,100] +*/ { "surface_runoff", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + -0.001, + 1, + 0.1, + 100, { {"paramId", GRIB_TYPE_LONG, 174008}, {"discipline", GRIB_TYPE_LONG, 2}, @@ -2717,11 +2678,15 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, {&from_start, &predefined_level}, }, + +/* + uerra, cosmo-fc:albedo_sfc maximum value 70 is not in [80,100] +*/ { "albedo_sfc", 0, - 5, - 90, + 20, + 60, 100, { {"paramId", GRIB_TYPE_LONG, 260509}, @@ -2736,8 +2701,8 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t { "time_integrated_surface_clear-sky_solar_radiation_downwards", -0.1, - 200000, - 1e+05, + 1e+08, + 0, 1e+09, { {"paramId", GRIB_TYPE_LONG, 260423}, @@ -2753,8 +2718,8 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t { "time_integrated_surface_clear-sky_solar_radiation_upwards", -0.1, - 200000, - 1e+05, + 1e+08, + 0, 1e+09, { {"paramId", GRIB_TYPE_LONG, 260427}, @@ -2769,10 +2734,10 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "time_integrated_surface_clear-sky_thermal_radiation_downwards", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + -0.1, + 1e+08, + 0, + 1e+09, { {"paramId", GRIB_TYPE_LONG, 260428}, {"discipline", GRIB_TYPE_LONG, 0}, @@ -2784,13 +2749,18 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, {&from_start, &predefined_level}, }, + +/* + uerra, eswi-fc: fc.tidirswrf.sfc.grib2, field 6 [time_integrated_surface_direct_solar_radiation]: time_integrated_surface_direct_solar_radiation minimum value 58442 is not in [-0.1,20000] +*/ { - "time_integrated_surface_direct_solar_radiation", - -0.1, - 20000, - 1e+05, + "time_integrated_surface_direct_solar_radiation.ur", + -10, + 1e+08, + 0, 1e+09, { + {"class", GRIB_TYPE_STRING, 0, "ur"}, {"paramId", GRIB_TYPE_LONG, 260264}, {"discipline", GRIB_TYPE_LONG, 0}, {"parameterCategory", GRIB_TYPE_LONG, 4}, @@ -2801,12 +2771,54 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, {&from_start, &predefined_level}, }, + +/* + s2s, lfpw-enfo: time_integrated_surface_net_solar_radiation_downwards_sfc minimum value -1.02308 is not in [-1,1e+07] +*/ + + { + "time_integrated_surface_net_solar_radiation_downwards_sfc.ur", + -10, + 1e+08, + 0, + 1e+09, + { + {"class", GRIB_TYPE_STRING, 0, "ur"}, + {"paramId", GRIB_TYPE_LONG, 169}, + {"discipline", GRIB_TYPE_LONG, 0}, + {"parameterCategory", GRIB_TYPE_LONG, 4}, + {"parameterNumber", GRIB_TYPE_LONG, 7}, + {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, + {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1}, + {NULL, }, + }, + {&from_start, &predefined_level}, + }, + { + "time_integrated_surface_net_solar_radiation_sfc.ur", + -0.1, + 1e+08, + 0, + 1e+09, + { + {"class", GRIB_TYPE_STRING, 0, "ur"}, + {"paramId", GRIB_TYPE_LONG, 176}, + {"discipline", GRIB_TYPE_LONG, 0}, + {"parameterCategory", GRIB_TYPE_LONG, 4}, + {"parameterNumber", GRIB_TYPE_LONG, 9}, + {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1}, + {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, + {NULL, }, + }, + {&from_start, &predefined_level}, + }, + { "10_metre_wind_speed", - 0.001, + 0, 10, 10, - 150, + 200, { {"paramId", GRIB_TYPE_LONG, 207}, {"discipline", GRIB_TYPE_LONG, 0}, @@ -2819,12 +2831,15 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, {&point_in_time, &given_level}, }, +/* + uerra, cosmo-fc: 10_metre_wind_direction maximum value 360.001 is not in [359,360] +*/ { "10_metre_wind_direction", 0, - 0.001, - 359.999, - 360, + 0.1, + 359., + 360.01, { {"paramId", GRIB_TYPE_LONG, 260260}, {"discipline", GRIB_TYPE_LONG, 0}, @@ -2895,10 +2910,10 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "evaporation_sfc", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + -10, + -0.1, + 0.1, + 5, { {"paramId", GRIB_TYPE_LONG, 260259}, {"discipline", GRIB_TYPE_LONG, 0}, @@ -2912,10 +2927,10 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "snow_depth_sfc", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + 0, + 0, + 0, + 5, { {"paramId", GRIB_TYPE_LONG, 3066}, {"discipline", GRIB_TYPE_LONG, 0}, @@ -2926,12 +2941,16 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, {&point_in_time, &predefined_level}, }, + +/* + uerra, cosmo-det-an: surface_roughness_sfc maximum value 9.36719 is not in [1.3,1.8] +*/ { "surface_roughness_sfc", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + 1e-8, + 1e-5, + 1.3, + 10, { {"paramId", GRIB_TYPE_LONG, 173}, {"discipline", GRIB_TYPE_LONG, 2}, @@ -2944,10 +2963,10 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, { "liquid_non-frozen_soil_moisture_level", - -1e-19, 0, - 450, - 800, + 0.1, + 0.1, + 1, { {"paramId", GRIB_TYPE_LONG, 260210}, {"discipline", GRIB_TYPE_LONG, 2}, @@ -2956,14 +2975,14 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 151}, {NULL, }, }, - {&point_in_time, &given_level}, + {&point_in_time, &given_level, &has_bitmap, &has_soil_level}, }, { "liquid_non-frozen_soil_moisture_layer", - -1e-19, 0, - 450, - 800, + 0.1, + 0.1, + 1, { {"paramId", GRIB_TYPE_LONG, 260210}, {"discipline", GRIB_TYPE_LONG, 2}, @@ -2975,14 +2994,14 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_LONG, 0}, {NULL, }, }, - {&point_in_time, &given_thickness}, + {&point_in_time, &given_thickness, &has_bitmap, &has_soil_layer}, }, { "volumetric_soil_moisture_level", - -1e-19, 0, - 450, - 800, + 0.1, + 0.1, + 1, { {"paramId", GRIB_TYPE_LONG, 260199}, {"discipline", GRIB_TYPE_LONG, 2}, @@ -2991,14 +3010,14 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 151}, {NULL, }, }, - {&point_in_time, &given_level}, + {&point_in_time, &given_level, &has_bitmap, &has_soil_level}, }, { "volumetric_soil_moisture_layer", - -1e-19, 0, - 450, - 800, + 0.1, + 0.1, + 1, { {"paramId", GRIB_TYPE_LONG, 260199}, {"discipline", GRIB_TYPE_LONG, 2}, @@ -3010,14 +3029,14 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_LONG, 0}, {NULL, }, }, - {&point_in_time, &given_thickness}, + {&point_in_time, &given_thickness, &has_bitmap, &has_soil_layer}, }, { "soil_heat_flux_sfc", - -1e+10, - 1e+10, - -1e+10, - 1e+10, + -1000, + -10, + 10, + 1000, { {"paramId", GRIB_TYPE_LONG, 260364}, {"discipline", GRIB_TYPE_LONG, 2}, @@ -3028,11 +3047,16 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, {&point_in_time, &predefined_level}, }, + +/* + uerra, cosmo-an: soil_temperature_level maximum value 296.188 is not in [300,350] + uerra, eswi: soil_temperature_level minimum value 199.649 is not in [200,270] +*/ { "soil_temperature_level", - 200, - 230, - 300, + 180, + 270, + 280, 350, { {"paramId", GRIB_TYPE_LONG, 260360}, @@ -3043,13 +3067,16 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0}, {NULL, }, }, - {&point_in_time, &given_level}, + {&point_in_time, &given_level, &has_bitmap, &has_soil_level}, }, +/* + uerra, egrr-an-enda: soil_temperature_layer minimum value 273.125 is not in [200,230] +*/ { "soil_temperature_layer", 200, - 230, + 280, 300, 350, { @@ -3063,24 +3090,7 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_LONG, 0}, {NULL, }, }, - {&point_in_time, &given_thickness}, - }, - { - "total_column_water_sfc.ur", - 0, - 0.5, - 20, - 150, - { - {"class", GRIB_TYPE_STRING, 0, "ur"}, - {"discipline", GRIB_TYPE_LONG, 0}, - {"parameterCategory", GRIB_TYPE_LONG, 1}, - {"parameterNumber", GRIB_TYPE_LONG, 51}, - {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, - {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8}, - {NULL, }, - }, - {&point_in_time, &predefined_thickness}, + {&point_in_time, &given_thickness, &has_bitmap, &has_soil_layer}, }, { @@ -3101,5 +3111,133 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t }, {&point_in_time, &given_level, &pressure_level}, }, + { + "cloud_cover_pl.ur", + 0, + 1e-10, + 0, + 100, + { + {"class", GRIB_TYPE_STRING, 0, "ur"}, + {"discipline", GRIB_TYPE_LONG, 0}, + {"parameterCategory", GRIB_TYPE_LONG, 6}, + {"parameterNumber", GRIB_TYPE_LONG, 22}, + {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 100}, + {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0}, + {NULL, }, + }, + {&point_in_time, &given_level, &pressure_level}, + }, + +/* + ======================== + this skin_temperature_sfc must be matched by tigge and uerra (not s2s!) + ======================== + + uerra, cosmo-an: skin_temperature_sfc minimum value 245.905 is not in [160,245] + uerra, eswi-fc: skin_temperature_sfc maximum value 298.942 is not in [300,355] +*/ + { + "skin_temperature_sfc", + 160, + 300, + 300, + 355, + { + {"paramId", GRIB_TYPE_LONG, 235}, + {"discipline", GRIB_TYPE_LONG, 0}, + {"parameterCategory", GRIB_TYPE_LONG, 0}, + {"parameterNumber", GRIB_TYPE_LONG, 17}, + {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, + {NULL, }, + }, + {&point_in_time, &predefined_level}, + }, + +/* + uerra, egrr-det-an: total_column_water_vapour_sfc minimum value 5.57326 is not in [-3,2] +*/ + { + "total_column_water_vapour_sfc", + -3.0, + 10, + 30, + 150, + { + {"discipline", GRIB_TYPE_LONG, 0}, + {"parameterCategory", GRIB_TYPE_LONG, 1}, + {"parameterNumber", GRIB_TYPE_LONG, 64}, + {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, + {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8}, + {NULL, }, + }, + {&point_in_time, &predefined_thickness}, + }, + + /* +uerra, eswi-enfo:total_cloud_cover_sfc maximum value 96.4844 is not in [100,100] + */ + { + "total_cloud_cover_sfc.ur.eswi", + 0, + 1e-10, + 90., + 100., + { + {"class", GRIB_TYPE_STRING, 0, "ur"}, + {"centre", GRIB_TYPE_STRING, 1, "eswi"}, + + {"discipline", GRIB_TYPE_LONG, 0}, + {"parameterCategory", GRIB_TYPE_LONG, 6}, + {"parameterNumber", GRIB_TYPE_LONG, 1}, + + {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1}, + {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8}, + {NULL, }, + }, + {&point_in_time, &predefined_thickness}, + }, + +/* + uerra, cosmo-det-an: u_velocity_pl minimum value 1.40681 is not in [-200,-1] +*/ + { + "u_velocity_pl", + -200, + 5, + 1, + 200, + { + {"class", GRIB_TYPE_STRING, 0, "ur"}, + + {"paramId", GRIB_TYPE_LONG, 131}, + + {"discipline", GRIB_TYPE_LONG, 0}, + {"parameterCategory", GRIB_TYPE_LONG, 2}, + {"parameterNumber", GRIB_TYPE_LONG, 2}, + + {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 100}, + {NULL, }, + }, + {&point_in_time, &given_level, &pressure_level}, + }, + { + "soil_depth", + 0.005, + 100, + 0.005, + 100, + { + {"paramId", GRIB_TYPE_LONG, 260367}, + {"discipline", GRIB_TYPE_LONG, 2}, + {"parameterCategory", GRIB_TYPE_LONG, 3}, + {"parameterNumber", GRIB_TYPE_LONG, 27}, + {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 151}, + {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0}, + {NULL, }, + }, + {&point_in_time, &given_level, &has_bitmap, &has_soil_level}, + }, + };